mosaic.js
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:10k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * mosaic.js: VLC media player web interface - Mosaic specific functions
  3.  *****************************************************************************
  4.  * Copyright (C) 2005-2006 the VideoLAN team
  5.  * $Id$
  6.  *
  7.  * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /**********************************************************************
  24.  * 
  25.  *********************************************************************/
  26. var mosaic_alpha    = 255;
  27. var mosaic_height   = 0;
  28. var mosaic_width    = 0;
  29. var mosaic_align    = 5;
  30. var mosaic_xoffset  = 0;
  31. var mosaic_yoffset  = 0;
  32. var mosaic_vborder  = 0;
  33. var mosaic_hborder  = 0;
  34. var mosaic_position = 1;
  35. var mosaic_rows     = 0;
  36. var mosaic_cols     = 0;
  37. var mosaic_delay    = 0;
  38. var cell_width  = 0;
  39. var cell_height = 0;
  40. var streams = Object();
  41. var cells   = Object();
  42. function mosaic_init()
  43. {
  44.     document.getElementById( 'sout_transcode_extra' ).value = ",sfilter=mosaic}:bridge-in{offset=100";
  45.     mosaic_size_change();
  46.     /* Force usage of transcode in sout */
  47.     document.getElementById( 'sout_vcodec_s' ).checked = 'checked';
  48.     disable( 'sout_vcodec_s' );
  49.     update_sout();
  50. }
  51. function mosaic_size_change()
  52. {
  53.     var x,y;
  54.     var bg_width    = check_and_replace_int( "bg_width", "400" );
  55.     var bg_height   = check_and_replace_int( "bg_height", "300" );
  56.     mosaic_height   = check_and_replace_int( "mosaic_height", "100" );
  57.     mosaic_width    = check_and_replace_int( "mosaic_width", "100" );
  58.     mosaic_xoffset  = check_and_replace_int( "mosaic_xoffset", "10" );
  59.     mosaic_yoffset  = check_and_replace_int( "mosaic_yoffset", "10" );
  60.     mosaic_vborder  = check_and_replace_int( "mosaic_vborder", "5" );
  61.     mosaic_hborder  = check_and_replace_int( "mosaic_hborder", "10" );
  62.     mosaic_rows     = check_and_replace_int( "mosaic_rows", "1" );
  63.     mosaic_cols     = check_and_replace_int( "mosaic_cols", "1" );
  64.     
  65.     cell_width  = Math.floor((mosaic_width-(mosaic_cols-1)*mosaic_hborder)/mosaic_cols);
  66.     cell_height = Math.floor((mosaic_height-(mosaic_rows-1)*mosaic_vborder)/mosaic_rows);
  67.     
  68.     var mlayout = document.getElementById( "mosaic_layout" );
  69.     while( mlayout.hasChildNodes() )
  70.         mlayout.removeChild( mlayout.firstChild );
  71.     mlayout.style.width = bg_width + "px";
  72.     mlayout.style.height = bg_height + "px";
  73.     if( mosaic_cols && mosaic_rows )
  74.     {
  75.         var mdt = document.createElement( 'div' );
  76.         mdt.setAttribute( 'id',    'mosaic_dt'  );
  77.         setclass( mdt, 'mosaic_tbl' );
  78.         
  79.         mdt.style.width  = mosaic_width   + "px";
  80.         mdt.style.height = mosaic_height  + "px";
  81.         mdt.style.top    = mosaic_yoffset + "px";
  82.         mdt.style.left   = mosaic_xoffset + "px";
  83.         var mtable = document.createElement( 'table' );
  84.         mtable.setAttribute( 'id', 'mosaic_table' );
  85.         mtable.style.top    = "-" + mosaic_vborder + "px";
  86.         mtable.style.left   = "-" + mosaic_hborder + "px";
  87.         mtable.style.width  = (1*mosaic_width +2*mosaic_hborder)  + "px";
  88.         mtable.style.height = (1*mosaic_height+2*mosaic_vborder) + "px";
  89.         mtable.style.borderSpacing = mosaic_hborder + "px " +
  90.                                      mosaic_vborder + "px";
  91.         var mtbody = document.createElement( 'tbody' );
  92.         for( y = 0; y < mosaic_rows; y++ )
  93.         {
  94.             var mrow = document.createElement( 'tr' );
  95.             for( x = 0; x < mosaic_cols; x++ )
  96.             {
  97.                 var mcell = document.createElement( 'td' );
  98.                 setclass( mcell, 'mosaic_itm' );
  99.                 mcell.style.width  = cell_width  + "px";
  100.                 mcell.style.height = cell_height + "px";
  101.                 
  102.                 var id = x+'_'+y;
  103.                 var melt = create_button( cells[id] ? cells[id] : '?', 'mosaic_elt_choose("'+id+'");' );
  104.                 melt.setAttribute( 'id', id );
  105.                 melt.setAttribute( 'title', 'Click to choose stream' );
  106.                 
  107.                 mcell.appendChild( melt );
  108.                 mrow.appendChild( mcell );
  109.             }
  110.             mtbody.appendChild( mrow );
  111.         }
  112.         mtable.appendChild( mtbody );
  113.         mdt.appendChild( mtable );
  114.         mlayout.appendChild( mdt );
  115.     }
  116.     mosaic_code_update();
  117. }
  118. function mosaic_add_input()
  119. {
  120.     streams[ addunderscores( value('mosaic_input_name') ) ] =
  121.         value('mosaic_input');
  122.     mosaic_feedback( addunderscores( value('mosaic_input_name') ) + " ( " + value('mosaic_input') + " ) added to input list.", true );
  123.     var mlist = document.getElementById( "mosaic_list_content" );
  124.     while( mlist.hasChildNodes() )
  125.         mlist.removeChild( mlist.firstChild );
  126.     
  127.     for( var name in streams )
  128.     {
  129.         var mrl = streams[name];
  130.         
  131.         var minput = document.createElement( 'a' );
  132.         minput.setAttribute( 'href', 'javascript:mosaic_elt_select(''+name+'');');
  133.         minput.setAttribute( 'id', name );
  134.         minput.setAttribute( 'value', mrl );
  135.         
  136.         var minputtxt = document.createTextNode( name );
  137.         minput.appendChild( minputtxt );
  138.         mlist.appendChild( minput );
  139.         mlist.appendChild( document.createTextNode( " ( "+mrl+" )" ) );
  140.         mlist.appendChild( document.createElement( 'br' ) );
  141.     }
  142. }
  143. function mosaic_elt_select( id )
  144. {
  145.     hide( 'mosaic_list' );
  146.     var ml = document.getElementById( 'mosaic_list' ).value;
  147.     if( ml )
  148.     {
  149.         document.getElementById( ml ).value = id;
  150.         cells[ ml ] = id;
  151.         mosaic_code_update();
  152.     }
  153. }
  154. function mosaic_elt_choose( id )
  155. {
  156.     document.getElementById( 'mosaic_list' ).value = id;
  157.     show( 'mosaic_list' );
  158. }
  159. function mosaic_code_update()
  160. {
  161.     var code = document.getElementById( 'mosaic_code' );
  162.     code.value =
  163. "##################################n"+
  164. "## HTTP interface mosaic wizard ##n"+
  165. "##################################n"+
  166. "n"+
  167. "# Comment the following line if you don't want to reset your VLM configurationn"+
  168. "del alln"+
  169. "n"+
  170. "# Background optionsn"+
  171. "new   bg broadcast enabledn"+
  172. "setup bg input     " + sanitize_input( value( 'mosaic_bg_input' ) ) + "n";
  173.     if( value( 'mosaic_output' ) )
  174.     {
  175.         code.value +=
  176. "setup bg output    " + value( 'mosaic_output' )+ "n";
  177.     }
  178.     var o = /.*transcode.*/;
  179.     if(! o.test( value( 'mosaic_output' ) ) )
  180.     {
  181.         code.value +=
  182. "setup bg option    sub-filter=mosaicn"+
  183. "setup bg output    #bridge-in{offset=100}:displayn";
  184.     }
  185.     code.value+=
  186. "n"+
  187. "# Mosaic optionsn"+
  188. "setup bg option mosaic-alpha="    + mosaic_alpha    + "n"+
  189. "setup bg option mosaic-height="   + mosaic_height   + "n"+
  190. "setup bg option mosaic-width="    + mosaic_width    + "n"+
  191. "setup bg option mosaic-align="    + mosaic_align    + "n"+
  192. "setup bg option mosaic-xoffset="  + mosaic_xoffset  + "n"+
  193. "setup bg option mosaic-yoffset="  + mosaic_yoffset  + "n"+
  194. "setup bg option mosaic-vborder="  + mosaic_vborder  + "n"+
  195. "setup bg option mosaic-hborder="  + mosaic_hborder  + "n"+
  196. "setup bg option mosaic-position=" + mosaic_position + "n"+
  197. "setup bg option mosaic-rows="     + mosaic_rows     + "n"+
  198. "setup bg option mosaic-cols="     + mosaic_cols     + "n"+
  199. "setup bg option mosaic-order=";
  200.     for( y = 0; y < mosaic_rows; y++ )
  201.     {
  202.         for( x = 0; x < mosaic_cols; x++ )
  203.         {
  204.             var id = x+'_'+y;
  205.             if( cells[id] )
  206.                 code.value += cells[id];
  207.             else
  208.                 code.value += '_';
  209.             if( y != mosaic_rows - 1 || x != mosaic_cols - 1 )
  210.                 code.value += ',';
  211.         }
  212.     }
  213.     code.value += "n"+
  214. "setup bg option mosaic-delay="    + mosaic_delay    + "n"+
  215. "setup bg option mosaic-keep-picturen"+
  216. "n"+
  217. "# Input optionsn";
  218.     var x, y;
  219.     for( y = 0; y < mosaic_rows; y++ )
  220.     {
  221.         for( x = 0; x < mosaic_cols; x++ )
  222.         {
  223.             var id = x+'_'+y;
  224.             if( cells[id] )
  225.             {
  226.                 var s = cells[id];
  227.                 code.value +=
  228. "new   " + s + " broadcast enabledn"+
  229. "setup " + s + " input     " + sanitize_input( streams[s] ) + "n"+
  230. "setup " + s + " output #duplicate{dst=mosaic-bridge{id=" + s + ",width="+cell_width+",height="+cell_height+"},select=video,dst=bridge-out{id="+(y*mosaic_cols+x)+"},select=audio}n"+
  231. "n";
  232.             }
  233.         }
  234.     }
  235.     code.value +=
  236. "# Launch everythingn"+
  237. "control bg playn";
  238.     for( y = 0; y < mosaic_rows; y++ )
  239.     {
  240.         for( x = 0; x < mosaic_cols; x++ )
  241.         {
  242.             var id = x+'_'+y;
  243.             if( cells[id] )
  244.             {
  245.                 var s = cells[id];
  246.                 code.value +=
  247. "control " + s + " playn";
  248.             }
  249.         }
  250.     }
  251.     code.value +=
  252. "n"+
  253. "# end of mosaic batchn";
  254. }
  255. function mosaic_batch( batch )
  256. {
  257.     var i;
  258.     var commands = batch.split( 'n' );
  259.     for( i = 0; i < commands.length; i++ )
  260.     {
  261.         mosaic_cmd( commands[i] );
  262.     }
  263. }
  264. function mosaic_cmd( cmd )
  265. {
  266.     loadXMLDoc( 'requests/vlm_cmd.xml?command='+cmd.replace(/#/g, '%23'), parse_mosaic_cmd );
  267. }
  268. function parse_mosaic_cmd()
  269. {
  270.     /* TODO */
  271. }
  272. function mosaic_stop()
  273. {
  274.     var cmd;
  275.     cmd = "control bg stopn";
  276.     var x,y;
  277.     for( y = 0; y < mosaic_rows; y++ )
  278.     {
  279.         for( x = 0; x < mosaic_cols; x++ )
  280.         {
  281.             var id = x+'_'+y;
  282.             if( cells[id] )
  283.             {
  284.                 var s = cells[id];
  285.                 cmd += "control " + s + " stopn";
  286.             }
  287.         }
  288.     }
  289.     mosaic_batch( cmd );
  290. }
  291. function mosaic_feedback( msg, ok )
  292. {
  293.     var f = document.getElementById( "mosaic_feedback" );
  294.     while( f.hasChildNodes() )
  295.         f.removeChild( f.firstChild );
  296.     f.style.fontWeight = "bold";
  297.     if( ok )
  298.         f.style.color = "#0f0";
  299.     else
  300.         f.style.color = "#f00";
  301.     var t = document.createTextNode( ( ok ? "Info: " : "Error: " ) + msg );
  302.     f.appendChild( t );
  303. }