[FFmpeg-cvslog] bfi: store palette data in the context

Stefano Sabatini git at videolan.org
Wed Apr 27 00:54:00 CEST 2011


ffmpeg | branch: oldabi | Stefano Sabatini <stefano.sabatini-lala at poste.it> | Mon Apr 25 20:26:15 2011 +0200| [ff558d7b0166dab5a84dc1c565c2beafa8590c86] | committer: Stefano Sabatini

bfi: store palette data in the context

Store palette data in the codec context, do not assume that the frame
allocated the first time by avctx->get_buffer will be returned again.

This requires to store the palette which comes with the first frame in
the context, and copy it to the following frames.

Fix trac issue #84.

Signed-off-by: Stefano Sabatini <stefano.sabatini-lala at poste.it>

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

 libavcodec/bfi.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/libavcodec/bfi.c b/libavcodec/bfi.c
index ff74233..6fc1628 100644
--- a/libavcodec/bfi.c
+++ b/libavcodec/bfi.c
@@ -34,6 +34,7 @@ typedef struct BFIContext {
     AVCodecContext *avctx;
     AVFrame frame;
     uint8_t *dst;
+    uint32_t pal[256];
 } BFIContext;
 
 static av_cold int bfi_decode_init(AVCodecContext * avctx)
@@ -85,10 +86,13 @@ static int bfi_decode_frame(AVCodecContext * avctx, void *data,
                     (avctx->extradata[i * 3 + j] >> 4)) << shift;
             pal++;
         }
+        memcpy(bfi->pal, bfi->frame.data[1], sizeof(bfi->pal));
         bfi->frame.palette_has_changed = 1;
     } else {
         bfi->frame.pict_type = FF_P_TYPE;
         bfi->frame.key_frame = 0;
+        bfi->frame.palette_has_changed = 0;
+        memcpy(bfi->frame.data[1], bfi->pal, sizeof(bfi->pal));
     }
 
     buf += 4; //Unpacked size, not required.



More information about the ffmpeg-cvslog mailing list