OSDN Git Service

dvbsubdec: dirty handkling
authorJULIAN GARDNER <joolzg@btinternet.com>
Fri, 14 Oct 2011 13:28:50 +0000 (15:28 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 14 Oct 2011 18:19:59 +0000 (20:19 +0200)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/dvbsubdec.c

index 4b61126..cb93450 100644 (file)
@@ -209,6 +209,7 @@ typedef struct DVBSubRegion {
 
     uint8_t *pbuf;
     int buf_size;
+    int dirty;
 
     DVBSubObjectDisplay *display_list;
 
@@ -781,6 +782,7 @@ static void dvbsub_parse_pixel_data_block(AVCodecContext *avctx, DVBSubObjectDis
         return;
 
     pbuf = region->pbuf;
+    region->dirty = 1;
 
     x_pos = display->x_pos;
     y_pos = display->y_pos;
@@ -1044,6 +1046,7 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
         region->pbuf = av_malloc(region->buf_size);
 
         fill = 1;
+        region->dirty = 0;
     }
 
     region->depth = 1 << (((*buf++) >> 2) & 7);
@@ -1356,6 +1359,10 @@ static int dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,
         if (!region)
             continue;
 
+        if (!region->dirty)
+            continue;
+
+        rect = sub->rects[i];
         rect->x = display->x_pos + offset_x;
         rect->y = display->y_pos + offset_y;
         rect->w = region->width;