[vlc-devel] commit: More clean up ( it has 1 minor side effect but in a buggy section anyway). (Laurent Aimar )

git version control git at videolan.org
Sat Jul 12 00:27:23 CEST 2008


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Fri Jul 11 21:21:05 2008 +0200| [fa1117e6e11da5d5e21bb5567635000ffbe5de37]

More clean up (it has 1 minor side effect but in a buggy section anyway).
Fixed scale loading conditions.

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

 src/video_output/vout_subpictures.c |   61 +++++++++++++++++++---------------
 1 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 2bbd1b5..98cb0c6 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -955,9 +955,10 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
 
         if( p_subpic->pf_update_regions )
         {
-            if ( p_subpic->p_region ) {
+            /* FIXME that part look like crap too if there is more than 1 region */
+
+            if( p_subpic->p_region )
                 spu_DestroyRegion( p_spu, p_subpic->p_region );
-            }
 
             /* TODO do not reverse the scaling that was done before calling
              * spu_RenderSubpictures, just pass it along (or do it inside
@@ -968,22 +969,23 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
             fmt_org.i_height =
             fmt_org.i_visible_height = i_source_video_height;
 
-            p_subpic->p_region = p_region = p_subpic->pf_update_regions( &fmt_org, p_spu, p_subpic, mdate() );
-        }
-        else
-        {
-            p_region = p_subpic->p_region;
+            p_subpic->p_region = p_subpic->pf_update_regions( &fmt_org, p_spu, p_subpic, mdate() );
         }
 
+        /* */
+        p_region = p_subpic->p_region;
+        if( !p_region )
+            continue;
+
         /* Create the blending module */
-        if( !p_spu->p_blend && p_region )
+        if( !p_spu->p_blend )
             SpuRenderCreateBlend( p_spu, p_fmt->i_chroma, p_fmt->i_aspect );
 
         /* 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 && p_region )
+        if( !p_spu->p_text )
             SpuRenderCreateAndLoadText( p_spu, p_fmt->i_width, p_fmt->i_height );
 
         if( p_spu->p_text )
@@ -999,7 +1001,7 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
              * resolution, rather than video resolution.
              */
             while( p_text_region &&
-                   ( p_text_region->fmt.i_chroma != VLC_FOURCC('T','E','X','T') ) )
+                   p_text_region->fmt.i_chroma != VLC_FOURCC('T','E','X','T') )
             {
                 p_text_region = p_text_region->p_next;
             }
@@ -1045,14 +1047,15 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
         if( (p_subpic->i_original_picture_height > 0) &&
             (p_subpic->i_original_picture_width  > 0) )
         {
+#if 1
             /* FIXME That seems so wrong */
             i_scale_width_orig  = 1000;
             i_scale_height_orig = 1000;
-
-            /* It is probably that :
+#else
+            /* It is probably that :*/
             pi_scale_width[ SCALE_DEFAULT ]  = i_scale_width_orig * i_source_video_width / p_subpic->i_original_picture_width;
             pi_scale_height[ SCALE_DEFAULT ] = i_scale_height_orig * i_source_video_height / p_subpic->i_original_picture_height;
-            */
+#endif
         }
 
         for( k = 0; k < SCALE_SIZE ; k++ )
@@ -1072,23 +1075,20 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
         }
 
         /* Set default subpicture aspect ratio */
-        if( p_region && p_region->fmt.i_aspect &&
-            ( !p_region->fmt.i_sar_num || !p_region->fmt.i_sar_den ) )
+        if( p_region->fmt.i_aspect && ( !p_region->fmt.i_sar_num || !p_region->fmt.i_sar_den ) )
         {
             p_region->fmt.i_sar_den = p_region->fmt.i_aspect;
             p_region->fmt.i_sar_num = VOUT_ASPECT_FACTOR;
         }
-        if( p_region &&
-            ( !p_region->fmt.i_sar_num || !p_region->fmt.i_sar_den ) )
+        if( !p_region->fmt.i_sar_num || !p_region->fmt.i_sar_den )
         {
             p_region->fmt.i_sar_den = p_fmt->i_sar_den;
             p_region->fmt.i_sar_num = p_fmt->i_sar_num;
         }
 
         /* Take care of the aspect ratio */
-        if( p_region &&
-            ( ( p_region->fmt.i_sar_num * p_fmt->i_sar_den ) !=
-              ( p_region->fmt.i_sar_den * p_fmt->i_sar_num ) ) )
+        if( ( p_region->fmt.i_sar_num * p_fmt->i_sar_den ) !=
+            ( p_region->fmt.i_sar_den * p_fmt->i_sar_num ) )
         {
             for( k = 0; k < SCALE_SIZE ; k++ )
             {
@@ -1099,14 +1099,21 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
             }
         }
 
-        /* Load the scaling module */
-        if( !p_spu->p_scale &&
-           ((((pi_scale_width[ SCALE_TEXT ]    > 0)     || (pi_scale_height[ SCALE_TEXT ]    > 0)) &&
-             ((pi_scale_width[ SCALE_TEXT ]    != 1000) || (pi_scale_height[ SCALE_TEXT ]    != 1000))) ||
-            (((pi_scale_width[ SCALE_DEFAULT ] > 0)     || (pi_scale_height[ SCALE_DEFAULT ] > 0)) &&
-             ((pi_scale_width[ SCALE_DEFAULT ] != 1000) || (pi_scale_height[ SCALE_DEFAULT ] != 1000)))) )
+        /* Load the scaling module when needed */
+        if( !p_spu->p_scale )
         {
-            SpuRenderCreateAndLoadScale( p_spu );
+            bool b_scale_used = false;
+
+            for( k = 0; k < SCALE_SIZE ; k++ )
+            {
+                const int i_scale_w = pi_scale_width[k];
+                const int i_scale_h = pi_scale_height[k];
+                if( ( i_scale_w > 0 && i_scale_w != 1000 ) || ( i_scale_h > 0 && i_scale_h != 1000 ) )
+                    b_scale_used = true;
+            }
+
+            if( b_scale_used )
+                SpuRenderCreateAndLoadScale( p_spu );
         }
 
         for( ; p_region != NULL; p_region = p_region->p_next )




More information about the vlc-devel mailing list