import quicktime.*; import quicktime.qd.*; import quicktime.std.*; import quicktime.app.view.*; import quicktime.io.*; import quicktime.std.movies.*; import quicktime.app.view.*; import quicktime.util.*; static boolean QTinitialized = false; public class FasterMovie implements MovieDrawingComplete { public int width, height; Movie movie; QDGraphics gworld; void task() { try{ Movie.taskAll(100); } catch (Exception e) { e.printStackTrace(); } } FasterMovie(String path, PApplet _parent) { parent = _parent; try { if (!QTinitialized) { QTSession.open(); QTinitialized = true; } QTFile file = new QTFile (path); OpenMovieFile openqtfile = OpenMovieFile.asRead(file); movie = Movie.fromFile(openqtfile); Pict pict = movie.getPict(movie.getTime()); QDRect movieRect = movie.getBox(); if (quicktime.util.EndianOrder.isNativeLittleEndian()) { gworld = new QDGraphics(QDConstants.k32BGRAPixelFormat, movieRect); } else { gworld = new QDGraphics(QDGraphics.kDefaultPixelFormat, movieRect); } width = movieRect.getWidth(); height = movieRect.getHeight(); movie.setGWorld(gworld,GDevice.get()); movie.setDrawingCompleteProc(StdQTConstants.movieDrawingCallAlways, this); // movie.prePreroll(0, 1.0f); // movie.preroll(0, 1.0f); } catch (Exception e) { e.printStackTrace(); } } void stop() { try { movie.stop(); isrunning = false; } catch (Exception e) { e.printStackTrace(); } } void loop(boolean doloop) { repeat = doloop; } boolean running() { return isrunning; } void start (boolean restart) { try { if (restart) movie.goToBeginning(); isrunning = true; movie.start(); } catch (Exception e) { e.printStackTrace(); } } PApplet parent; boolean repeat = false; boolean isrunning = false; int execute(Movie m) { try{ if (m.isDone()) { if(repeat) m.goToBeginning(); else isrunning = false; } PixMap pixmap = gworld.getPixMap(); RawEncodedImage raw = pixmap.getPixelData(); QDRect movieRect = movie.getBox(); parent.loadPixels(); raw.copyToArray(0, parent.pixels, 0, width * height); parent.updatePixels(); } catch (Exception e) { e.printStackTrace(); } return 0; } };