/**
 * Reverse playback example.
 *
 * The Movie.speed() method allows to change the playback speed. 
 * Use negative values for backwards playback. Note that not all 
 * video formats support backwards playback. This depends on the 
 * underlying gstreamer plugins used by gsvideo. For example, the 
 * theora codec does support backward playback, but not so the H264 
 * codec, at least in its current version.
 * 
 */

import processing.video.*;

Movie mov;
boolean speedSet = false;
boolean once = true;

void setup() {
  size(640, 360);
  background(0);
  mov = new Movie(this, "transit.mkv");
  mov.play();
}

void movieEvent(Movie m) {
  m.read();  
  if (speedSet == true) {
    speedSet = false;
  }
}

void draw() {
  if (speedSet == false && once == true) {
    // Setting the speed should be done only once,
    // this is the reason for the if statement.
    speedSet = true;
    once = false;
    mov.jump(mov.duration());
    // -1 means backward playback at normal speed.
    mov.speed(-1.0);
    // Setting to play again, since the movie stop
    // playback once it reached the end.
    mov.play();
  }
  image(mov, 0, 0, width, height);
}