Skip to content

Commit 1d573ac

Browse files
committed
Cherry-Pick changes in pull request #7 "Refactor proposal".
1 parent 328c53a commit 1d573ac

File tree

64 files changed

+1282
-1355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1282
-1355
lines changed

Diff for: doc/handbook/MonteMedia-Handbook.md

+44-35
Original file line numberDiff line numberDiff line change
@@ -63,25 +63,30 @@ To read video frames from a movie file, you have to perform the following steps:
6363
movie file.
6464

6565
```java
66-
BufferedImage[]readMovie(File file)throws IOException{
67-
ArrayList<BufferedImage> frames=new ArrayList<BufferedImage> ();
68-
MovieReader in=Registry.getInstance().getReader(file);
69-
Format format=new Format(DataClassKey,BufferedImage.class);
70-
int track=in.findTrack(0,new Format(MediaTypeKey,MediaType.VIDEO));
71-
Codec codec=Registry.getInstance().getCodec(in.getFormat(track),format);
72-
try{
73-
Buffer inbuf=new Buffer();Buffer codecbuf=new Buffer();
74-
do{
75-
in.read(track,inbuf);
76-
codec.process(inbuf,codecbuf);
77-
if(!codecbuf.isFlag(BufferFlag.DISCARD)){
78-
frames.add(Images.cloneImage((BufferedImage)codecbuf.data));
66+
class HowToReadVideoFramesFromAMovieFile {
67+
68+
BufferedImage[] readMovie(File file) throws IOException {
69+
ArrayList<BufferedImage> frames = new ArrayList<BufferedImage>();
70+
MovieReader in = Registry.getInstance().getReader(file);
71+
Format format = new Format(DataClassKey, BufferedImage.class);
72+
int track = in.findTrack(0, new Format(MediaTypeKey, MediaType.VIDEO));
73+
Codec codec = Registry.getInstance().getCodec(in.getFormat(track), format);
74+
try {
75+
Buffer inbuf = new Buffer();
76+
Buffer codecbuf = new Buffer();
77+
do {
78+
in.read(track, inbuf);
79+
codec.process(inbuf, codecbuf);
80+
if (!codecbuf.isFlag(BufferFlag.DISCARD)) {
81+
frames.add(Images.cloneImage((BufferedImage) codecbuf.data));
82+
}
83+
} while (!inbuf.isFlag(BufferFlag.END_OF_MEDIA));
84+
} finally {
85+
in.close();
7986
}
80-
}while(!inbuf.isFlag(BufferFlag.END_OF_MEDIA));
81-
}finally{
82-
in.close();
83-
}
84-
return frames.toArray(new BufferedImage[frames.size()]);}
87+
return frames.toArray(new BufferedImage[frames.size()]);
88+
}
89+
}
8590
```
8691

8792
### Writing video frames into a movie file
@@ -96,23 +101,27 @@ To write video frames from into movie file, you have to perform the following st
96101
The example code below shows how to write an array of BufferedImages into a movie file.
97102

98103
```java
99-
void writeMovie(File file,BufferedImage[]frames)throws IOException{
100-
MovieWriter out=Registry.getInstance().getWriter(file);
101-
Format format=new Format(MediaTypeKey,MediaType.VIDEO, // EncodingKey, ENCODING_AVI_MJPG,
102-
FrameRateKey,new Rational(30,1),//
103-
WidthKey,frames[0].getWidth(), //
104-
HeightKey,frames[0].getHeight(),// DepthKey, 24
104+
class HowToWriteVideoFramesIntoAMovieFile {
105+
106+
void writeMovie(File file, BufferedImage[] frames) throws IOException {
107+
MovieWriter out = Registry.getInstance().getWriter(file);
108+
Format format = new Format(MediaTypeKey, MediaType.VIDEO, // EncodingKey, ENCODING_AVI_MJPG,
109+
FrameRateKey, new Rational(30, 1),//
110+
WidthKey, frames[0].getWidth(), //
111+
HeightKey, frames[0].getHeight()
105112
);
106-
int track=out.addTrack(format);
107-
try{
108-
Buffer buf=new Buffer();
109-
buf.format=new Format(DataClassKey,BufferedImage.class);buf.sampleDuration=format.get(FrameRateKey).inverse();
110-
for(int i=0;i<frames.length;i++){
111-
buf.data=frames[i];
112-
out.write(track,buf);
113-
}
114-
}finally{
115-
out.close();
116-
}
113+
int track = out.addTrack(format);
114+
try {
115+
Buffer buf = new Buffer();
116+
buf.format = new Format(DataClassKey, BufferedImage.class);
117+
buf.sampleDuration = format.get(FrameRateKey).inverse();
118+
for (int i = 0; i < frames.length; i++) {
119+
buf.data = frames[i];
120+
out.write(track, buf);
121+
}
122+
} finally {
123+
out.close();
117124
}
125+
}
126+
}
118127
```

Diff for: org.monte.demo.aviwriter/src/main/java/org.monte.demo.aviwriter/org/monte/demo/aviwriter/Main.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ FrameRateKey, new Rational(30, 1),//
103103
out.addTrack(format);
104104

105105
// Draw the animation
106-
for (int i = 0, n = 60; i < n; i++) {
106+
for (int i = 0, n = 61; i < n; i++) {
107107
double t = (double) i / n;
108108
drawAnimationFrame(img, g, t);
109109

110-
// write it to the writer
110+
// write image to the writer
111111
out.write(0, img, 1);
112112
}
113113

Diff for: org.monte.demo.quicktimewriter/src/main/java/org.monte.demo.quicktimewriter/org/monte/demo/quicktimewriter/Main.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ FrameRateKey, new Rational(30, 1),//
105105
out.setVideoColorTable(0, img.getColorModel());
106106

107107
// Draw the animation
108-
for (int i = 0, n = 200; i < n; i++) {
108+
for (int i = 0, n = 61; i < n; i++) {
109109
double t = (double) i / n - 1;
110110
drawAnimationFrame(img, g, t);
111111

112-
// write it to the writer
112+
// write image to the writer
113113
out.write(0, img, 1);
114114
}
115115

Diff for: org.monte.demo.screenrecorder/src/main/java/org.monte.demo.screenrecorder/org/monte/demo/screenrecorder/Main.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import org.monte.media.av.FormatKeys.MediaType;
99
import org.monte.media.math.Rational;
1010
import org.monte.media.screenrecorder.JRecordingAreaFrame;
11+
import org.monte.media.screenrecorder.MouseConfigs;
1112
import org.monte.media.screenrecorder.ScreenRecorder;
13+
import org.monte.media.screenrecorder.State;
1214
import org.monte.media.swing.BackgroundTask;
1315
import org.monte.media.swing.JLabelHyperlinkHandler;
1416
import org.monte.media.swing.datatransfer.DropFileTransferHandler;
@@ -77,7 +79,7 @@ private class Handler implements ChangeListener {
7779
@Override
7880
public void stateChanged(ChangeEvent e) {
7981
ScreenRecorder r = screenRecorder;
80-
if (r != null && r.getState() == ScreenRecorder.State.FAILED) {
82+
if (r != null && r.getState() == State.FAILED) {
8183
recordingFailed();
8284
}
8385
}
@@ -713,10 +715,10 @@ private void start() throws IOException, AWTException {
713715
crsr = null;
714716
break;
715717
case 1:
716-
crsr = ScreenRecorder.ENCODING_BLACK_CURSOR;
718+
crsr = MouseConfigs.ENCODING_BLACK_CURSOR;
717719
break;
718720
case 2:
719-
crsr = ScreenRecorder.ENCODING_WHITE_CURSOR;
721+
crsr = MouseConfigs.ENCODING_WHITE_CURSOR;
720722
break;
721723
}
722724
GraphicsConfiguration cfg = getGraphicsConfiguration();
@@ -790,7 +792,6 @@ protected void construct() throws Exception {
790792

791793
@Override
792794
protected void finished() {
793-
ScreenRecorder.State state = r.getState();
794795
setSettingsEnabled(true);
795796
startStopButton.setEnabled(true);
796797
startStopButton.setText("Start");

0 commit comments

Comments
 (0)