rlm@9
|
1 package com.aurellem.capture.video;
|
rlm@9
|
2
|
rlm@9
|
3
|
rlm@9
|
4 /**
|
rlm@9
|
5 * Handles writing video files using Xuggle.
|
rlm@9
|
6 *
|
rlm@9
|
7 *
|
rlm@9
|
8 * @author Robert McIntyre
|
rlm@9
|
9 *
|
rlm@9
|
10 */
|
rlm@9
|
11 /*
|
rlm@9
|
12 public class XuggleVideoRecorder extends AbstractVideoRecorder{
|
rlm@9
|
13
|
rlm@9
|
14
|
rlm@9
|
15 IMediaWriter writer;
|
rlm@9
|
16 BufferedImage frame;
|
rlm@9
|
17 int videoChannel = 0;
|
rlm@9
|
18 long currentTimeStamp = 0;
|
rlm@9
|
19 boolean videoReady = false;
|
rlm@9
|
20
|
rlm@9
|
21
|
rlm@9
|
22 public XuggleVideoRecorder(File output) throws IOException {super(output);}
|
rlm@9
|
23
|
rlm@9
|
24 public void initVideo(){
|
rlm@9
|
25 this.frame = new BufferedImage(
|
rlm@9
|
26 width, height,
|
rlm@9
|
27 BufferedImage.TYPE_3BYTE_BGR);
|
rlm@9
|
28 this.writer = ToolFactory.makeWriter(this.targetFileName);
|
rlm@9
|
29 writer.addVideoStream(videoChannel,
|
rlm@9
|
30 0, IRational.make(fps),
|
rlm@9
|
31 width, height);
|
rlm@9
|
32 this.videoReady = true;
|
rlm@9
|
33 }
|
rlm@9
|
34
|
rlm@9
|
35
|
rlm@9
|
36 public void record(BufferedImage rawFrame) {
|
rlm@9
|
37 if (!this.videoReady){initVideo();}
|
rlm@9
|
38 // convert the Image into the form that Xuggle likes.
|
rlm@9
|
39 this.frame.getGraphics().drawImage(rawFrame, 0, 0, null);
|
rlm@9
|
40 writer.encodeVideo(videoChannel,
|
rlm@9
|
41 frame,
|
rlm@9
|
42 currentTimeStamp, TimeUnit.NANOSECONDS);
|
rlm@9
|
43
|
rlm@9
|
44 currentTimeStamp += (long) (1000000000.0 / fps);
|
rlm@9
|
45 }
|
rlm@9
|
46
|
rlm@9
|
47 public void finish() {
|
rlm@9
|
48 writer.close();
|
rlm@9
|
49 }
|
rlm@9
|
50
|
rlm@9
|
51 }
|
rlm@9
|
52
|
rlm@9
|
53 */
|