[vlc-devel] commit: Load the scalers and text renderer at SPU creation. (Laurent Aimar )

git version control git at videolan.org
Wed Sep 17 19:11:26 CEST 2008


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Tue Sep 16 22:19:50 2008 +0200| [482f6514debb28bc8b7a5ef84cf805cd355deafc] | committer: Laurent Aimar 

Load the scalers and text renderer at SPU creation.

It is useless to wait for the first subtitle.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=482f6514debb28bc8b7a5ef84cf805cd355deafc
---

 src/video_output/vout_subpictures.c |   51 +++++++++++++++++------------------
 1 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index f15229b..0c36f49 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -59,8 +59,8 @@ static int spu_ParseChain( spu_t * );
 static int SubFilterCallback( vlc_object_t *, char const *,
                               vlc_value_t, vlc_value_t, void * );
 
-static int sub_filter_allocation_init( filter_t *, void * );
-static void sub_filter_allocation_clear( filter_t * );
+static int SubFilterAllocationInit( filter_t *, void * );
+static void SubFilterAllocationClean( filter_t * );
 struct filter_owner_sys_t
 {
     spu_t *p_spu;
@@ -75,14 +75,10 @@ enum {
 
 #define SCALE_UNIT (1000)
 
-static void FilterRelease( filter_t *p_filter )
-{
-    if( p_filter->p_module )
-        module_Unneed( p_filter, p_filter->p_module );
-
-    vlc_object_detach( p_filter );
-    vlc_object_release( p_filter );
-}
+/* */
+static void SpuRenderCreateAndLoadText( spu_t *p_spu );
+static void SpuRenderCreateAndLoadScale( spu_t *p_spu );
+static void FilterRelease( filter_t *p_filter );
 
 /**
  * Creates the subpicture unit
@@ -114,9 +110,14 @@ spu_t *__spu_Create( vlc_object_t *p_this )
     vlc_object_attach( p_spu, p_this );
 
     p_spu->p_chain = filter_chain_New( p_spu, "sub filter", false,
-                                       sub_filter_allocation_init,
-                                       sub_filter_allocation_clear,
+                                       SubFilterAllocationInit,
+                                       SubFilterAllocationClean,
                                        p_spu );
+
+    /* Load text and scale module */
+    SpuRenderCreateAndLoadText( p_spu );
+    SpuRenderCreateAndLoadScale( p_spu );
+
     return p_spu;
 }
 
@@ -460,6 +461,15 @@ void spu_DestroySubpicture( spu_t *p_spu, subpicture_t *p_subpic )
  *****************************************************************************
  * This function renders all sub picture units in the list.
  *****************************************************************************/
+static void FilterRelease( filter_t *p_filter )
+{
+    if( p_filter->p_module )
+        module_Unneed( p_filter, p_filter->p_module );
+
+    vlc_object_detach( p_filter );
+    vlc_object_release( p_filter );
+}
+
 static void SpuRenderCreateBlend( spu_t *p_spu, vlc_fourcc_t i_chroma, int i_aspect )
 {
     filter_t *p_blend;
@@ -581,7 +591,6 @@ static filter_t *CreateAndLoadScale( vlc_object_t *p_obj, vlc_fourcc_t i_chroma
 
     return p_scale;
 }
-
 static void SpuRenderCreateAndLoadScale( spu_t *p_spu )
 {
     /* FIXME: We'll also be using it for YUVA and RGBA blending ... */
@@ -1029,17 +1038,6 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt_a,
     if( !p_spu->p_blend )
         SpuRenderCreateBlend( p_spu, p_fmt->i_chroma, p_fmt->i_aspect );
 
-    /* Load the scaling module */
-    if( !p_spu->p_scale && !p_spu->p_scale_yuvp )
-        SpuRenderCreateAndLoadScale( p_spu );
-
-    /* Load the text rendering module; it is possible there is a
-     * text region somewhere in the subpicture other than the first
-     * element in the region list, so just load it anyway as we'll
-     * probably want it sooner or later. */
-    if( !p_spu->p_text )
-        SpuRenderCreateAndLoadText( p_spu );
-
     /* */
     for( p_subpic = p_subpic_list; ; p_subpic = p_subpic->p_next )
     {
@@ -1441,7 +1439,7 @@ static int SubFilterCallback( vlc_object_t *p_object, char const *psz_var,
     return VLC_SUCCESS;
 }
 
-static int sub_filter_allocation_init( filter_t *p_filter, void *p_data )
+static int SubFilterAllocationInit( filter_t *p_filter, void *p_data )
 {
     spu_t *p_spu = (spu_t *)p_data;
 
@@ -1458,9 +1456,10 @@ static int sub_filter_allocation_init( filter_t *p_filter, void *p_data )
     return VLC_SUCCESS;
 }
 
-static void sub_filter_allocation_clear( filter_t *p_filter )
+static void SubFilterAllocationClean( filter_t *p_filter )
 {
     filter_owner_sys_t *p_sys = p_filter->p_owner;
     SpuClearChannel( p_sys->p_spu, p_sys->i_channel, true );
     free( p_filter->p_owner );
 }
+




More information about the vlc-devel mailing list