InitialObjectDescriptor {
 objectDescriptorID 1
 audioProfileLevelIndication 255
 visualProfileLevelIndication 254
 sceneProfileLevelIndication 1
 graphicsProfileLevelIndication 1
 ODProfileLevelIndication 1
 esDescr [
  ES_Descriptor {
   ES_ID 1
   decConfigDescr DecoderConfigDescriptor {
    streamType 3
    decSpecificInfo BIFSConfig {
     isCommandStream true
     pixelMetric true
     pixelWidth 240
     pixelHeight 200
    }
   }
  }
  ES_Descriptor {
   ES_ID 2
   decConfigDescr DecoderConfigDescriptor {
    streamType 1
   }
  }
 ]
}

OrderedGroup {
 children [
  Background2D {
   backColor 1 1 1
  }
  WorldInfo {
   info ["This shows complete control of media" "through scripting and MediaControl" "" "GPAC Regression Tests" "$Date: 2009-12-07 13:19:33 $ - $Revision: 1.5 $" "(C) 2002-2004 GPAC Team"]
   title "Media Control Test"
  }
  Transform2D {
   children [
    Shape {
     appearance Appearance {
      texture DEF MT MovieTexture {
       url [od:8]
      }
     }
     geometry Bitmap {}

    }
   ]
  }
  DEF MC MediaControl {
   url [od:8]
   preRoll FALSE
  }
  DEF MS MediaSensor {
   url [od:8]
  }
  DEF PANEL Transform2D {
   translation 0 80
   children [
    DEF TRPAUSE Transform2D {
     translation -100 0
     children [
      DEF PAUSE TouchSensor {}
      DEF WHICHBUT Switch {
       whichChoice 0
       choice [
        Shape {
         appearance DEF BUTAPP Appearance {
          material Material2D {
           emissiveColor 0 0 0
           filled TRUE
          }
         }
         geometry IndexedFaceSet2D {
          colorPerVertex FALSE
          coordIndex [0 1 2 3 -1 4 5 6 7 -1]
          coord Coordinate2D {
           point [-8 7.5 -3 7.5 -3 -7.5 -8 -7.5 0 7.5 5 7.5 5 -7.5 0 -7.5]
          }
         }
        }
        Shape {
         appearance USE BUTAPP
         geometry IndexedFaceSet2D {
          colorPerVertex FALSE
          coord Coordinate2D {
           point [-8 7.5 -8 -7.5 5 0]
          }
         }
        }
       ]
      }
     ]
    }
    DEF TRSTOP Transform2D {
     translation -60 0
     children [
      DEF STOP TouchSensor {}
      Shape {
       appearance USE BUTAPP
       geometry Rectangle {
        size 15 15
       }
      }
     ]
    }
    DEF TRFF Transform2D {
     translation -20 0
     children [
      DEF FASTF TouchSensor {}
      Shape {
       appearance USE BUTAPP
       geometry IndexedFaceSet2D {
        colorPerVertex FALSE
        coordIndex [0 1 2 3 -1 4 5 6 7 -1]
        coord Coordinate2D {
         point [-8 7.5 -5 0 -8 -7.5 2 0 -2 7.5 1 0 -2 -7.5 8 0]
        }
       }
      }
     ]
    }
    DEF TRLOOP Transform2D {
     translation 20 0
     children [
      DEF LOOP TouchSensor {}
      Shape {
       appearance Appearance {
        material DEF MAT_LOOP Material2D {
         emissiveColor 0 0 0
        }
       }
       geometry Circle {
        radius 6
       }
      }
     ]
    }
    Transform2D {
     translation 0 -160
     children [
      DEF TS TouchSensor {}
      Transform2D {
       children [
        Shape {
         appearance USE BUTAPP
         geometry DEF PROGBAR Rectangle {
          size 200 15
         }
        }
       ]
      }
      DEF CURS Transform2D {
       children [
        Shape {
         appearance Appearance {
          material Material2D {
           lineProps LineProperties {
            lineColor 0 0 1
            width 4
           }
          }
         }
         geometry Rectangle {
          size 6 15
         }
        }
       ]
      }
     ]
    }
    DEF TIMER Transform2D {
     translation 80 0
     children [
      DEF RTIME TouchSensor {}
      Shape {
       appearance USE BUTAPP
       geometry DEF TIME Text {
        string [""]
        fontStyle FontStyle {
         justify ["MIDDLE" "MIDDLE"]
         size 18
        }
       }
      }
     ]
    }
   ]
  }
  DEF SC Script {
   eventIn SFTime set_cursor
   eventIn SFVec3f set_seek
   eventIn SFBool restart
   eventIn SFBool rev_time
   eventIn SFBool pause
   eventIn SFBool stop
   eventIn SFBool set_loop
   eventIn SFBool set_ff
   eventIn SFTime set_duration
   field SFNode loop USE MAT_LOOP
   field SFNode app USE CURS
   field SFNode ctrl USE MC
   field SFNode bar USE PROGBAR
   field SFNode txt USE TIME
   field SFNode but USE WHICHBUT
   field SFNode pan USE PANEL
   field SFTime curSeek 0
   field SFInt32 isDown 0
   field SFBool reverse FALSE
   field SFBool isPaused FALSE
   field SFBool isLooping FALSE
   field SFTime duration -1
   eventOut SFFloat fraction_changed
   url ["javascript:
function set_duration(value, timestamp) {duration = value;}
function set_loop(value, timestamp) {if (!value) return;isLooping = !isLooping;loop.filled = isLooping;ctrl.loop = isLooping;}
function pause(value, timestamp) {if (!value) return;if (isPaused) {ctrl.mediaSpeed = 1;but.whichChoice = 0;} else {ctrl.mediaSpeed = 0;but.whichChoice = 1;ctrl.mediaStartTime = -1;}isPaused = !isPaused;}
function stop(value, timestamp) {if (!value) return;txt.string[0] = '';app.translation.x = - bar.size.x / 2;ctrl.mediaStartTime = 0;ctrl.mediaSpeed = 0;but.whichChoice = 1;isPaused = 1;}
function rev_time(value, timestamp) {if (value) reverse = !reverse;}
function set_time(value, timestamp) {timing = new String('');if (duration>=0) { if (!isLooping && value + 0.1 >=duration) {stop(true, timestamp);print('script stop ' + value + ' ' + duration);return;}}if (isPaused) return;if (duration>=0 && reverse) {value = duration - value;if (value<0) value=0;timing += '-';} else {timing += ' ';}hours = 0;mins = 0;secs = 0;if (value) {hours = Math.floor(value/3600);value -= hours*3600;mins = Math.floor(value / 60);value -= mins*60;secs = Math.floor(value);}if (hours<10) timing += '0';timing += hours + ':';if (mins<10) timing += '0';timing += mins + ':';if (secs<10) timing += '0';timing += secs;txt.string[0] = timing;}
function set_cursor(value, timestamp) {set_time(value, timestamp); if (duration<0) return;if (ctrl.mediaSpeed && isDown != 1) {if (value>duration) value = duration;pos = value;pos /= duration;app.translation.x = bar.size.x * (pos - 0.5);fraction_changed = pos;} }
function set_seek(myval, timestamp) {if (duration<0) return;pos = myval[0]; pos /= bar.size.x;pos += 0.5;if (pos>1) pos = 0;curSeek = duration;curSeek *= pos;if (isDown == 1) {app.translation.x = bar.size.x*(pos - 0.5);} else if (isDown==2) {isDown = 0;}}
function restart(myval, timestamp) {if (myval) {ctrl.mediaSpeed = 0;isDown = 1;} else if (isDown == 1) {ctrl.mediaStartTime = curSeek;ctrl.mediaSpeed = 1;isDown = 2;but.whichChoice = 0;isPaused = FALSE;}}
function set_ff(value, timestamp) {ctrl.mediaStartTime = -1;if (value) {ctrl.mediaSpeed = 4;} else {ctrl.mediaSpeed = 1;}}"   ]
  }
 ]
}

ROUTE MS.mediaCurrentTime TO SC.set_cursor
ROUTE TS.hitPoint_changed TO SC.set_seek
ROUTE TS.isActive TO SC.restart
ROUTE RTIME.isActive TO SC.rev_time
ROUTE PAUSE.isActive TO SC.pause
ROUTE STOP.isActive TO SC.stop
ROUTE LOOP.isActive TO SC.set_loop
ROUTE FASTF.isActive TO SC.set_ff
ROUTE MS.mediaDuration TO SC.set_duration
ROUTE FASTF.isActive TO SC.set_ff

AT 0 {
  UPDATE OD [
   ObjectDescriptor {
    objectDescriptorID 8
    esDescr [
     ES_Descriptor {
      ES_ID 21
      OCR_ES_ID 21
      muxInfo MuxInfo {
       fileName "../auxiliary_files/count_video.cmp"
      }
     }
    ]
   }
  ]
}

