Mercurial > jmeCapture
view src/com/aurellem/capture/video/XuggleVideoRecorder.java @ 34:13d354e1184b
trying to track down very strange bug where a listener and aux listener at the same location hear different things
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 30 Oct 2011 14:58:01 -0700 |
parents | 8a6b1684f536 |
children | 302d5e9ad120 |
line wrap: on
line source
1 package com.aurellem.capture.video;3 import java.awt.image.BufferedImage;4 import java.io.File;5 import java.io.IOException;6 import java.util.concurrent.TimeUnit;8 import com.xuggle.mediatool.IMediaWriter;9 import com.xuggle.mediatool.ToolFactory;10 import com.xuggle.xuggler.IRational;13 /**14 * Handles writing video files using Xuggle.15 *16 * @author Robert McIntyre17 *18 */20 public class XuggleVideoRecorder extends AbstractVideoRecorder{22 IMediaWriter writer;23 BufferedImage frame;24 int videoChannel = 0;25 long currentTimeStamp = 0;26 boolean videoReady = false;29 public XuggleVideoRecorder(File output) throws IOException {super(output);}31 public void initVideo(){32 this.frame = new BufferedImage(33 width, height,34 BufferedImage.TYPE_3BYTE_BGR);35 this.writer = ToolFactory.makeWriter(this.targetFileName);36 writer.addVideoStream(videoChannel,37 0, IRational.make(fps),38 width, height);39 this.videoReady = true;40 }42 public void record(BufferedImage rawFrame) {43 if (!this.videoReady){initVideo();}44 // convert the Image into the form that Xuggle likes.45 this.frame.getGraphics().drawImage(rawFrame, 0, 0, null);46 writer.encodeVideo(videoChannel,47 frame,48 currentTimeStamp, TimeUnit.NANOSECONDS);50 currentTimeStamp += (long) (1000000000.0 / fps);51 }53 public void finish() {54 writer.close();55 }57 }