annotate src/com/aurellem/capture/video/XuggleVideoRecorder.java @ 68:302d5e9ad120

adjust format
author Robert McIntyre <rlm@mit.edu>
date Thu, 19 Jul 2012 12:28:55 -0500
parents 8a6b1684f536
children 2c50a0c99715
rev   line source
rlm@9 1 package com.aurellem.capture.video;
rlm@9 2
rlm@10 3 import java.awt.image.BufferedImage;
rlm@10 4 import java.io.File;
rlm@10 5 import java.io.IOException;
rlm@10 6 import java.util.concurrent.TimeUnit;
rlm@10 7
rlm@10 8 import com.xuggle.mediatool.IMediaWriter;
rlm@10 9 import com.xuggle.mediatool.ToolFactory;
rlm@10 10 import com.xuggle.xuggler.IRational;
rlm@10 11
rlm@9 12
rlm@9 13 /**
rlm@9 14 * Handles writing video files using Xuggle.
rlm@11 15 *
rlm@9 16 * @author Robert McIntyre
rlm@9 17 *
rlm@9 18 */
rlm@10 19
rlm@9 20 public class XuggleVideoRecorder extends AbstractVideoRecorder{
rlm@9 21
rlm@68 22
rlm@68 23 IMediaWriter writer;
rlm@68 24 BufferedImage frame;
rlm@68 25 int videoChannel = 0;
rlm@68 26 long currentTimeStamp = 0;
rlm@68 27 boolean videoReady = false;
rlm@68 28
rlm@9 29
rlm@68 30 public XuggleVideoRecorder(File output)
rlm@68 31 throws IOException {super(output);}
rlm@9 32
rlm@68 33 public void initVideo(){
rlm@68 34 this.frame = new BufferedImage(
rlm@68 35 width, height,
rlm@68 36 BufferedImage.TYPE_3BYTE_BGR);
rlm@68 37 this.writer = ToolFactory.makeWriter(this.targetFileName);
rlm@68 38 writer.addVideoStream(videoChannel,
rlm@68 39 0, IRational.make(fps),
rlm@68 40 width, height);
rlm@68 41 this.videoReady = true;
rlm@68 42 }
rlm@9 43
rlm@68 44 public void record(BufferedImage rawFrame) {
rlm@68 45 if (!this.videoReady){initVideo();}
rlm@68 46 // convert the Image into the form that Xuggle likes.
rlm@68 47 this.frame.getGraphics().drawImage(rawFrame, 0, 0, null);
rlm@68 48 writer.encodeVideo(videoChannel,
rlm@68 49 frame,
rlm@68 50 currentTimeStamp, TimeUnit.NANOSECONDS);
rlm@9 51
rlm@68 52 currentTimeStamp += (long) (1000000000.0 / fps);
rlm@68 53 }
rlm@9 54
rlm@68 55 public void finish() {
rlm@68 56 writer.close();
rlm@68 57 }
rlm@68 58
rlm@9 59
rlm@9 60 }
rlm@9 61
rlm@10 62