/** * Create a movie with the specified width, height, filename, frame rate, codec type and quality, * and key frame rate. */ public MovieMaker( PApplet p, int _w, int _h, String _filename, int _rate, int _codecType, int _codecQuality, int _keyFrameRate) { parent = p; width = _w; height = _h; rate = _rate; try { QTSession.open(); } catch (QTException e1) { e1.printStackTrace(); } try { ImageDescription imgD = null; if (quicktime.util.EndianOrder.isNativeLittleEndian()) { imgD = new ImageDescription(QDConstants.k32BGRAPixelFormat); } else { imgD = new ImageDescription(QDGraphics.kDefaultPixelFormat); } imgD.setWidth(width); imgD.setHeight(height); gw = new QDGraphics(imgD, 0); } catch (QTException e) { e.printStackTrace(); } codecType = _codecType; codecQuality = _codecQuality; keyFrameRate = _keyFrameRate; initMovie(_filename); parent.registerDispose(this); }
private void compressAndAdd() { try { if (temporalSupported) { CompressedFrameInfo cfInfo = seq.compressFrame(gw, bounds, StdQTConstants.codecFlagUpdatePrevious, compressedImage); boolean syncSample = cfInfo.getSimilarity() == 0; // see developer.apple.com/qa/qtmcc/qtmcc20.html videoMedia.addSample( imageHandle, 0, cfInfo.getDataSize(), TIME_SCALE / rate, imgDesc, 1, syncSample ? 0 : StdQTConstants.mediaSampleNotSync); } else { imgDesc = QTImage.fCompress( gw, gw.getBounds(), 32, codecQuality, codecType, CodecComponent.anyCodec, null, 0, RawEncodedImage.fromQTHandle(imageHandle)); boolean syncSample = true; // UM, what the hell should this be??? videoMedia.addSample( imageHandle, 0, imgDesc.getDataSize(), TIME_SCALE / rate, imgDesc, 1, syncSample ? 0 : StdQTConstants.mediaSampleNotSync); } } catch (QTException e) { e.printStackTrace(); } }