]> git.sesse.net Git - vlc/commitdiff
dvbsub.c : Don't fill region if page_state == 0
authorBjörn Stenberg <bjorn@haxx.se>
Tue, 15 Jun 2010 12:47:22 +0000 (14:47 +0200)
committerIlkka Ollakka <ileoo@videolan.org>
Wed, 16 Jun 2010 05:16:12 +0000 (08:16 +0300)
My interpretation of ETSI EN 300 743 is that the region_fill_flag of a region
composition segment should not cause the region to be filled when the containing
page composition segment has its' page_state variable set to 0 (page update).

Signed-off-by: Ilkka Ollakka <ileoo@videolan.org>
modules/codec/dvbsub.c

index fb7619cfa4a22e54605cce34572b852095c48024..a434003bbfd389f34d42af4d19f0835d0858b802 100644 (file)
@@ -840,7 +840,8 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
     int i_segment_length, i_processed_length, i_id, i_version;
     int i_width, i_height, i_level_comp, i_depth, i_clut;
     int i_8_bg, i_4_bg, i_2_bg;
-    bool b_fill;
+    bool b_region_fill, b_fill = false;
+    dvbsub_page_t *p_page = p_sys->p_page;
 
     i_segment_length = bs_read( s, 16 );
     i_id = bs_read( s, 8 );
@@ -877,7 +878,7 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
     /* Region attributes */
     p_region->i_id = i_id;
     p_region->i_version = i_version;
-    b_fill = bs_read( s, 1 );
+    b_region_fill = bs_read( s, 1 );
     bs_skip( s, 3 ); /* Reserved */
 
     i_width = bs_read( s, 16 );
@@ -917,6 +918,10 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
         p_region->i_depth = 0;
         b_fill = true;
     }
+    else
+        if (b_region_fill && p_page->i_state != 0)
+            b_fill = true;
+
     if( p_region->i_depth &&
         ( ( p_region->i_depth != i_depth ) ||
           ( p_region->i_level_comp != i_level_comp ) ||