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 complex scripting and MediaControl" "providing complete control of an inline scene" "" "GPAC Regression Tests" "(C) 2002-2004 GPAC Team"] title "Media Control Test" } Inline { url [od:8] } 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 field SFBool reset_startTime FALSE 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;if (ctrl.mediaStartTime == 0) reset_startTime = TRUE;} else {ctrl.mediaSpeed = 0;but.whichChoice = 1;ctrl.mediaStartTime = -1;}isPaused = !isPaused;}function stop(value, timestamp) {if (!value || isPaused) 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 (isPaused) return;if (duration>=0) { if (value + 0.1 >=duration) {if (!isLooping) {stop(true, timestamp);} else {ctrl.mediaStartTime = 0;reset_startTime = TRUE;}return;}}if (reset_startTime) {ctrl.mediaStartTime = -1;reset_startTime = FALSE;}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 = 8;} 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 URLstring "bifs-timeline-mediacontrol-inline-av.mp4" } ] }