private static BufferedImage displayVideoAtCorrectTime ( long streamStartTime , final MediaPicture picture , final MediaPictureConverter converter , BufferedImage image , final ImageFrame window , long systemStartTime , final Rational systemTimeBase , final Rational streamTimebase ) throws InterruptedException { long streamTimestamp = picture . getTimeStamp ( ) ; // convert streamTimestamp into system units (i.e. nano-seconds) streamTimestamp = systemTimeBase . rescale ( streamTimestamp - streamStartTime , streamTimebase ) ; // get the current clock time, with our most accurate clock long systemTimestamp = System . nanoTime ( ) ; // loop in a sleeping loop until we're within 1 ms of the time for that video frame. // a real video player needs to be much more sophisticated than this. while ( streamTimestamp > ( systemTimestamp - systemStartTime + 1000000 ) ) { Thread . sleep ( 1 ) ; systemTimestamp = System . nanoTime ( ) ; } // finally, convert the image from Humble format into Java images. image = converter . toImage ( image , picture ) ; // And ask the UI thread to repaint with the new image. window . setImage ( image ) ; return image ; }
Takes the video picture and displays it at the right time .