]> git.sesse.net Git - vlc/commitdiff
Made SPU commands go through vout.
authorLaurent Aimar <fenrir@videolan.org>
Mon, 10 May 2010 20:38:49 +0000 (22:38 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Mon, 10 May 2010 21:02:22 +0000 (23:02 +0200)
include/vlc_vout.h
modules/control/hotkeys.c
modules/misc/lua/libs/osd.c
src/input/decoder.c
src/input/resource.c
src/libvlccore.sym
src/video_output/video_epg.c
src/video_output/video_output.c
src/video_output/video_text.c
src/video_output/video_widgets.c
src/video_output/vout_intf.c

index 2e14ef7bb5ddd41af4671305bdb0e224a86a58d3..2d3f0b2035614560ed7d1505d099bbb0d22e6e5e 100644 (file)
@@ -163,6 +163,11 @@ VLC_EXPORT( void,            vout_PutPicture,     ( vout_thread_t *, picture_t *
 VLC_EXPORT( void,            vout_HoldPicture,    ( vout_thread_t *, picture_t * ) );
 VLC_EXPORT( void,            vout_ReleasePicture, ( vout_thread_t *, picture_t * ) );
 
+/* */
+VLC_EXPORT( void, vout_PutSubpicture,             ( vout_thread_t *, subpicture_t * ) );
+VLC_EXPORT( int,  vout_RegisterSubpictureChannel, ( vout_thread_t * ) );
+VLC_EXPORT( void, vout_FlushSubpictureChannel,    ( vout_thread_t *, int ) );
+
 /**
  * Return the spu_t object associated to a vout_thread_t.
  *
index cbf1965b0d2312a9db0d617a183c55366195b66c..b1444d7baec0a1b40740cec01450a2f31bb278a5 100644 (file)
@@ -170,7 +170,7 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
      * Alternatively, we should keep a reference to the vout thread. */
     if( p_vout && p_vout != p_sys->p_last_vout )
         for( unsigned i = 0; i < CHANNELS_NUMBER; i++ )
-            p_intf->p_sys->p_channels[i] = spu_RegisterChannel( vout_GetSpu( p_vout ) );
+            p_intf->p_sys->p_channels[i] = vout_RegisterSubpictureChannel( p_vout );
     p_sys->p_last_vout = p_vout;
 
     /* Quit */
@@ -1073,9 +1073,8 @@ static void ClearChannels( intf_thread_t *p_intf, vout_thread_t *p_vout )
 {
     if( p_vout )
     {
-        spu_t *p_spu = vout_GetSpu( p_vout );
-        spu_ClearChannel( p_spu, SPU_DEFAULT_CHANNEL );
+        vout_FlushSubpictureChannel( p_vout, SPU_DEFAULT_CHANNEL );
         for( int i = 0; i < CHANNELS_NUMBER; i++ )
-            spu_ClearChannel( p_spu, p_intf->p_sys->p_channels[i]  );
+            vout_FlushSubpictureChannel( p_vout, p_intf->p_sys->p_channels[i]  );
     }
 }
index acba5085089b8ddaa35e3fb41f738bf23b6eb09f..8d757a0a18b0b7524fee4ed453875424a9da75eb 100644 (file)
@@ -152,7 +152,7 @@ static int vlclua_spu_channel_register( lua_State *L )
     if( !p_vout )
         return luaL_error( L, "Unable to find vout." );
 
-    i_chan = spu_RegisterChannel( vout_GetSpu( p_vout ) );
+    i_chan = vout_RegisterSubpictureChannel( p_vout );
     vlc_object_release( p_vout );
     lua_pushinteger( L, i_chan );
     return 1;
@@ -167,7 +167,7 @@ static int vlclua_spu_channel_clear( lua_State *L )
     if( !p_vout )
         return luaL_error( L, "Unable to find vout." );
 
-    spu_ClearChannel( vout_GetSpu( p_vout ), i_chan );
+    vout_ClearSubpitureChannel( p_vout, i_chan );
     vlc_object_release( p_vout );
     return 0;
 }
index 9c0aa3dab3dbd9996994ca42f8c06878d3b18f8a..e5f84dd04b42d4d08d027fd2af00e672cb176a72 100644 (file)
@@ -1593,7 +1593,7 @@ static void DecoderPlaySpu( decoder_t *p_dec, subpicture_t *p_subpic,
                          p_subpic->i_start - SPU_MAX_PREPARE_TIME );
 
         if( !b_reject )
-            spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic );
+            vout_PutSubpicture( p_vout, p_subpic );
         else
             subpicture_Delete( p_subpic );
 
@@ -1935,8 +1935,7 @@ static void DecoderProcessSpu( decoder_t *p_dec, block_t *p_block, bool b_flush
         p_vout = input_resource_HoldVout( p_input->p->p_resource );
 
         if( p_vout && p_owner->p_spu_vout == p_vout )
-            spu_ClearChannel( vout_GetSpu( p_vout ),
-                              p_owner->i_spu_channel );
+            vout_FlushSubpictureChannel( p_vout, p_owner->i_spu_channel );
 
         if( p_vout )
             vlc_object_release( p_vout );
@@ -2098,7 +2097,7 @@ static void DeleteDecoder( decoder_t * p_dec )
         if( p_vout )
         {
             if( p_owner->p_spu_vout == p_vout )
-                spu_ClearChannel( vout_GetSpu( p_vout ), p_owner->i_spu_channel );
+                vout_FlushSubpictureChannel( p_vout, p_owner->i_spu_channel );
             vlc_object_release( p_vout );
         }
     }
@@ -2427,7 +2426,7 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec,
 
         vlc_mutex_unlock( &p_owner->lock );
 
-        p_owner->i_spu_channel = spu_RegisterChannel( vout_GetSpu( p_vout ) );
+        p_owner->i_spu_channel = vout_RegisterSubpictureChannel( p_vout );
         p_owner->i_spu_order = 0;
         p_owner->p_spu_vout = p_vout;
     }
index ba3cf7efadc5439a58580e6dabf79ee29c9eda1e..64cfa52d6ba7f0b1001926539037d91fcc417074 100644 (file)
@@ -273,7 +273,7 @@ static vout_thread_t *RequestVout( input_resource_t *p_resource,
         {
             msg_Dbg( p_resource->p_input, "saving a free vout" );
             vout_Flush( p_vout, 1 );
-            spu_ClearChannel( vout_GetSpu( p_vout ), -1 );
+            vout_FlushSubpictureChannel( p_vout, -1 );
 
             p_resource->p_vout_free = p_vout;
         }
index 308f19bb5dd43cd44be76d07dae6202832712935..ffb933a43b14ab1d4a0d4d38740da88715720d6e 100644 (file)
@@ -614,6 +614,9 @@ vout_GetPicture
 vout_PutPicture
 vout_HoldPicture
 vout_ReleasePicture
+vout_PutSubpicture
+vout_RegisterSubpictureChannel
+vout_FlushSubpictureChannel
 vout_EnableFilter
 vout_GetSnapshot
 vout_GetSpu
index 5f894573a1a9fec5498bad028e192b76f733ef0f..48d31d76c87dc7a1af5535f8092118b600b8f8ff 100644 (file)
@@ -315,7 +315,7 @@ int vout_OSDEpg( vout_thread_t *p_vout, input_item_t *p_input )
     p_spu->b_absolute = true;
     p_spu->b_fade = true;
 
-    spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_spu );
+    vout_PutSubpicture( p_vout, p_spu );
 
     return VLC_SUCCESS;
 }
index 8467ca88fe7cf3995fac19ac0921e340c4a017a2..cc706c6ae7dfafc8d307364362a01965fe201bb5 100644 (file)
@@ -506,6 +506,19 @@ void vout_DisplayTitle(vout_thread_t *vout, const char *title)
     vout_control_PushString(&vout->p->control, VOUT_CONTROL_OSD_TITLE, title);
 }
 
+void vout_PutSubpicture( vout_thread_t *vout, subpicture_t *subpic )
+{
+    spu_DisplaySubpicture(vout->p->p_spu, subpic);
+}
+int vout_RegisterSubpictureChannel( vout_thread_t *vout )
+{
+    return spu_RegisterChannel(vout->p->p_spu);
+}
+void vout_FlushSubpictureChannel( vout_thread_t *vout, int channel )
+{
+    spu_ClearChannel(vout->p->p_spu, channel);
+}
+
 spu_t *vout_GetSpu( vout_thread_t *p_vout )
 {
     return p_vout->p->p_spu;
index 6ac6af6954544fb450308a5f3aa2fa372b618c79..8bf7a716981329757bdbba3c2f24bee4ba28bffd 100644 (file)
@@ -118,7 +118,7 @@ void vout_OSDText(vout_thread_t *vout, int channel,
     subpic->b_absolute = false;
     subpic->b_fade     = true;
 
-    spu_DisplaySubpicture(vout_GetSpu(vout), subpic);
+    vout_PutSubpicture(vout, subpic);
 }
 
 void vout_OSDMessage(vout_thread_t *vout, int channel, const char *format, ...)
index f8835d2ff3ffc4ddf9c6f4d58a4d9a97fd2584ff..5d3e21be9f3f154ae85c408e8ec599fe04112e16 100644 (file)
@@ -309,7 +309,7 @@ static void OSDWidget(vout_thread_t *vout, int channel, int type, int position)
     subpic->b_absolute = true;
     subpic->b_fade     = true;
 
-    spu_DisplaySubpicture(vout_GetSpu(vout), subpic);
+    vout_PutSubpicture(vout, subpic);
 }
 
 void vout_OSDSlider(vout_thread_t *vout, int channel, int position, short type)
index 7c2c8c5bd9ceeb7c0621af42c39f50b7af88c3b4..4cf3b5ee2ca243ec935b62bc24a88a0376398748 100644 (file)
@@ -384,7 +384,7 @@ static int VoutSnapshotPip( vout_thread_t *p_vout, picture_t *p_pic )
     p_subpic->i_original_picture_width  *= 4;
     p_subpic->i_original_picture_height *= 4;
 
-    spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic );
+    vout_PutSubpicture( p_vout, p_subpic );
     return VLC_SUCCESS;
 }