[FFmpeg-cvslog] Support FLIC in AVI.

Paul B Mahol git at videolan.org
Wed Mar 28 04:07:01 CEST 2012


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue Mar 27 18:53:05 2012 +0000| [e4cc9f309e96a9145970989fd20394933923f574] | committer: Michael Niedermayer

Support FLIC in AVI.

Signed-off-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/flicvideo.c |   19 ++++++++++++++-----
 libavformat/riff.c     |    1 +
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c
index c5df949..c46b5da 100644
--- a/libavcodec/flicvideo.c
+++ b/libavcodec/flicvideo.c
@@ -85,8 +85,9 @@ static av_cold int flic_decode_init(AVCodecContext *avctx)
 
     if (avctx->extradata_size != 0 &&
         avctx->extradata_size != 12 &&
-        avctx->extradata_size != 128) {
-        av_log(avctx, AV_LOG_ERROR, "Expected extradata of 12 or 128 bytes\n");
+        avctx->extradata_size != 128 &&
+        avctx->extradata_size != 1024) {
+        av_log(avctx, AV_LOG_ERROR, "Expected extradata of 12, 128 or 1024 bytes\n");
         return AVERROR_INVALIDDATA;
     }
 
@@ -96,6 +97,15 @@ static av_cold int flic_decode_init(AVCodecContext *avctx)
         /* special case for magic carpet FLIs */
         s->fli_type = FLC_MAGIC_CARPET_SYNTHETIC_TYPE_CODE;
         depth = 8;
+    } else if (avctx->extradata_size == 1024) {
+        uint8_t *ptr = avctx->extradata;
+        int i;
+
+        for (i = 0; i < 256; i++) {
+            s->palette[i] = AV_RL32(ptr);
+            ptr += 4;
+        }
+        depth = 8;
     } else if (avctx->extradata_size == 0) {
         /* FLI in MOV, see e.g. FFmpeg trac issue #626 */
         s->fli_type = FLI_TYPE_CODE;
@@ -433,9 +443,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
     }
 
     /* by the end of the chunk, the stream ptr should equal the frame
-     * size (minus 1, possibly); if it doesn't, issue a warning */
-    if ((bytestream2_get_bytes_left(&g2) != 0) &&
-        (bytestream2_get_bytes_left(&g2) != 1))
+     * size (minus 1 or 2, possibly); if it doesn't, issue a warning */
+    if (bytestream2_get_bytes_left(&g2) > 2)
         av_log(avctx, AV_LOG_ERROR, "Processed FLI chunk where chunk size = %d " \
                "and final chunk ptr = %d\n", buf_size,
                buf_size - bytestream2_get_bytes_left(&g2));
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 650bea6..80a44b0 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -300,6 +300,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
     { CODEC_ID_DXTORY,       MKTAG('x', 't', 'o', 'r') },
     { CODEC_ID_ZEROCODEC,    MKTAG('Z', 'E', 'C', 'O') },
     { CODEC_ID_Y41P,         MKTAG('Y', '4', '1', 'P') },
+    { CODEC_ID_FLIC,         MKTAG('A', 'F', 'L', 'C') },
     { CODEC_ID_NONE,         0 }
 };
 



More information about the ffmpeg-cvslog mailing list