2 * Handles driving the firefogg render system
4 var mvFirefoggRender = function( options
) {
5 return this.init( options
);
7 var default_render_options
= {
11 var default_FirefoggRender_options
= {
13 // if we should save to disk (if false setup upload stuff below)
16 // set up the mvPlaylist object
17 mvFirefoggRender
.prototype = {
18 // default empty render options:
20 continue_rendering
:false,
21 init:function( options
) {
24 // grab the mvFirefogg object to do basic tests
25 this.myFogg
= new mvFirefogg( {
29 // check for firefogg:
30 if ( this.myFogg
.getFirefogg() ) {
37 // set up local fogg pointer:
38 this.fogg
= this.myFogg
.fogg
;
40 // setup player instance
41 this.player
= $j( options
.player_target
).get( 0 );
42 this.player_target
= options
.player_target
;
44 // Extend the render options with any provided details
45 if( options
['render_options'] )
46 $j
.extend(this.renderOptions
, options
['render_options']);
48 // If no height width provided use target DOM width/height
49 if( !this.renderOptions
.width
&& !this.renderOptions
.height
){
50 this.renderOptions
.width
= $j(this.player_target
).width();
51 this.renderOptions
.height
= $j(this.player_target
).height();
55 // Setup the application options (with defaults)
56 for ( var i
in default_FirefoggRender_options
) {
58 this[ i
] = options
[ i
];
60 this[ i
] = default_FirefoggRender_options
[i
];
63 // Should be externally controlled
64 if ( options
.target_startRender
) {
65 $j( options
.target_startRender
).click( function() {
66 js_log( "Start render" );
69 this.target_startRender
= options
.target_startRender
;
71 if ( options
.target_stopRender
) {
72 $j( options
.target_stopRender
).click( function() {
75 this.target_stopRender
= options
.target_stopRender
;
77 if ( options
.target_timeStatus
) {
78 this.target_timeStatus
= options
.target_timeStatus
;
81 startRender:function() {
83 var t
= this.start_time
;
84 // get the interval from renderOptions framerate
85 var interval
= 1 / this.renderOptions
.framerate
87 // issue a load request on the player:
91 this.fogg
.initRender( JSON
.stringify( _this
.renderOptions
), 'foggRender' );
93 // add audio if we had any:
95 // request a target (should support rendering to temp location too)
96 //this.fogg.saveVideoAs();
98 // set the continue rendering flag to true:
99 this.continue_rendering
= true;
101 // internal function to hanndle updates:
102 var doNextFrame = function() {
103 $j( _this
.target_timeStatus
).val( " on " + ( Math
.round( t
* 10 ) / 10 ) + " of " +
104 ( Math
.round( _this
.player
.getDuration() * 10 ) / 10 ) );
105 _this
.player
.setCurrentTime( t
, function() {
106 //_this.fogg.addFrame( $j( _this.player_target ).attr( 'id' ) );
108 if ( t
>= _this
.player
.getDuration() ) {
109 _this
.doFinalRender();
111 if ( _this
.continue_rendering
) {
114 js_log('done with render');
116 //_this.doFinalRender();
123 stopRender:function() {
124 this.continue_rendering
= false;
126 doFinalRender:function() {
127 $j( this.target_timeStatus
).val( "doing final render" );
131 updateStatus:function() {
133 var doUpdateStatus = function() {
134 var rstatus
= _this
.fogg
.renderstatus()
135 $j( _this
.target_timeStatus
).val( rstatus
);
136 if ( rstatus
!= 'done' && rstatus
!= 'rendering failed' ) {
137 setTimeout( doUpdateStatus
, 100 );
139 $j( _this
.target_startRender
).attr( "disabled", false );