Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libSequencer / mvFirefoggRender.js
blob2f5fd2d99c963bc78286e66b15162be2e723b2fd
1 /*
2  * hanndles driving the firefogg render system 
3 */
5 var mvFirefoggRender = function( iObj ) {               
6         return this.init( iObj );
7 };
8 var default_render_options = {
9         "videoQuality" : 10, 
10         "framerate"     : 30, 
11         "width"         : 400, 
12         "height"        : 300
14 var default_FirefoggRender_options = {
15         start_time:0,
16         //if we should save to disk (if false setup upload stuff below) 
17         save_to_disk:true
19 //set up the mvPlaylist object
20 mvFirefoggRender.prototype = {
21         //default empty render options: 
22         renderOptions: {},              
23         continue_rendering:false,
24         init:function( iObj ){
25                 var _this = this;                               
26                 
27                 //grab the mvFirefogg object to do basic tests
28                 this.myFogg = new mvFirefogg({
29                         'only_fogg':true
30                 });
31                 
32                 //check for firefogg:
33                 if( this.myFogg.firefoggCheck() ){
34                         this.enabled = true;
35                 }else{
36                         this.enabled = false;
37                         return this;
38                 }
39                 
40                 //set up local fogg pointer: 
41                 this.fogg = this.myFogg.fogg;
42                 
43                 //setup player instance
44                 this.player = $j(iObj.player_target).get(0);            
45                 this.player_target = iObj.player_target;
46                 
47                 //setup the render options (with defaults) 
48                 for(var i in default_render_options){
49                         if( iObj['render_options'][i] ){
50                                 this.renderOptions[ i ] = iObj['render_options'][i];
51                         }else{
52                                 this.renderOptions[ i ] = default_render_options[i];
53                         }
54                 }
55                 //setup the application options (with defaults) 
56                 for(var i in default_FirefoggRender_options ){
57                         if( iObj[ i ] ){
58                                 this[ i ] = iObj[ i ];
59                         }else{
60                                 this[ i ] = default_FirefoggRender_options[i];
61                         }
62                 }
63                 //set up targets and local vars
64                 
65                 if( iObj.target_startRender ){
66                         $j(iObj.target_startRender).click(function(){
67                                 js_log("Start render");
68                                 _this.startRender();
69                         })
70                         this.target_startRender = iObj.target_startRender;
71                 }
72                 if( iObj.target_stopRender ){
73                         $j(iObj.target_stopRender).click(function(){
74                                 _this.stopRender();
75                         })
76                         this.target_stopRender = iObj.target_stopRender;
77                 }
78                 if( iObj.target_timeStatus ){
79                         this.target_timeStatus = iObj.target_timeStatus;
80                 }
81         },
82         startRender:function(){
83                 var _this = this;       
84                 var t = this.start_time;
85                 //get the interval from renderOptions framerate
86                 var interval =  1 / this.renderOptions.framerate
87                 
88                 //issue a load request on the player:
89                 this.player.load();
90                 
91                 //init the Render
92                 this.fogg.initRender(  JSON.stringify( _this.renderOptions ), 'foggRender' );
93                 
94                 //add audio if we had any:
95                 
96                 //request a target (should support rendering to temp location too) 
97                 this.fogg.saveVideoAs();
98                 
99                 //set the continue rendering flag to true:
100                 this.continue_rendering = true;
101                 
102                 //internal function to hanndle updates:                         
103                 var doNextFrame = function(){                   
104                         $j(_this.target_timeStatus).val( " on " + (Math.round(t*10)/10) + " of "+
105                                 (Math.round( _this.player.getDuration() * 10) / 10 ) );
106                         _this.player.setCurrentTime(t, function(){
107                                 _this.fogg.addFrame( $j(_this.player_target).attr('id') );
108                                 t += interval;
109                                 if(t >= _this.player.getDuration() ){
110                                         _this.doFinalRender();                                                          
111                                 }else{                          
112                                         if(_this.continue_rendering){
113                                                 doNextFrame();
114                                         }else{
115                                                 //else quit:
116                                                 _this.doFinalRender();
117                                         }
118                                 }
119                         });
120                 }
121                 doNextFrame();
122         },
123         stopRender:function(){
124                 this.continue_rendering=false;
125         },      
126         doFinalRender:function(){               
127                 $j(this.target_timeStatus).val("doing final render");
128                 this.fogg.render();     
129                 this.updateStatus();
130         },
131         updateStatus:function(){
132                 var _this = this;               
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);
138                     } else {
139                         $j(_this.target_startRender).attr("disabled", false); 
140                     }
141                 }
142                 doUpdateStatus();
143         }
145