[SCM] libav/experimental: correct signaling of palette change

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:52:25 UTC 2013


The following commit has been merged in the experimental branch:
commit 1e4051aaa041ca83ddfe09973558c2e9d2f32ec0
Author: Alex Beregszaszi <alex at rtfs.hu>
Date:   Thu Oct 19 23:03:47 2006 +0000

    correct signaling of palette change
    
    Originally committed as revision 6739 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c
index d5c55f6..f53aabf 100644
--- a/libavcodec/flicvideo.c
+++ b/libavcodec/flicvideo.c
@@ -190,7 +190,6 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
         case FLI_256_COLOR:
         case FLI_COLOR:
             stream_ptr_after_color_chunk = stream_ptr + chunk_size - 6;
-            s->new_palette = 1;
 
             /* check special case: If this file is from the Magic Carpet
              * game and uses 6-bit colors even though it reports 256-color
@@ -216,6 +215,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
                     color_changes = 256;
 
                 for (j = 0; j < color_changes; j++) {
+                    unsigned int entry;
 
                     /* wrap around, for good measure */
                     if ((unsigned)palette_ptr >= 256)
@@ -224,7 +224,10 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
                     r = buf[stream_ptr++] << color_shift;
                     g = buf[stream_ptr++] << color_shift;
                     b = buf[stream_ptr++] << color_shift;
-                    s->palette[palette_ptr++] = (r << 16) | (g << 8) | b;
+                    entry = (r << 16) | (g << 8) | b;
+                    if (s->palette[palette_ptr] != entry)
+                        s->new_palette = 1;
+                    s->palette[palette_ptr++] = entry;
                 }
             }
 
@@ -404,9 +407,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
                "and final chunk ptr = %d\n", buf_size, stream_ptr);
 
     /* make the palette available on the way out */
-//    if (s->new_palette) {
-    if (1) {
-        memcpy(s->frame.data[1], s->palette, AVPALETTE_SIZE);
+    memcpy(s->frame.data[1], s->palette, AVPALETTE_SIZE);
+    if (s->new_palette) {
         s->frame.palette_has_changed = 1;
         s->new_palette = 0;
     }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list