diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2012-03-24 20:28:43 +0100 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2012-03-26 20:03:56 +0200 |
commit | fca62f05005567514b5daaea230ba9365e202201 (patch) | |
tree | 5c0539c6e500b5aff2a2e09618ecd57560fd0efe /libavcodec/flicvideo.c | |
parent | 5afd9a80dbf020847625fc84d1e837f6372de4ca (diff) | |
download | ffmpeg-fca62f05005567514b5daaea230ba9365e202201.tar.gz |
Support FLIC in MOV.
Fixes trac issue #626.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Diffstat (limited to 'libavcodec/flicvideo.c')
-rw-r--r-- | libavcodec/flicvideo.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libavcodec/flicvideo.c b/libavcodec/flicvideo.c index 0434261f10..c5df949b31 100644 --- a/libavcodec/flicvideo.c +++ b/libavcodec/flicvideo.c @@ -83,7 +83,8 @@ static av_cold int flic_decode_init(AVCodecContext *avctx) unsigned char *fli_header = (unsigned char *)avctx->extradata; int depth; - if (avctx->extradata_size != 12 && + 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"); return AVERROR_INVALIDDATA; @@ -91,13 +92,16 @@ static av_cold int flic_decode_init(AVCodecContext *avctx) s->avctx = avctx; - s->fli_type = AV_RL16(&fli_header[4]); /* Might be overridden if a Magic Carpet FLC */ - if (s->avctx->extradata_size == 12) { /* special case for magic carpet FLIs */ s->fli_type = FLC_MAGIC_CARPET_SYNTHETIC_TYPE_CODE; depth = 8; + } else if (avctx->extradata_size == 0) { + /* FLI in MOV, see e.g. FFmpeg trac issue #626 */ + s->fli_type = FLI_TYPE_CODE; + depth = 8; } else { + s->fli_type = AV_RL16(&fli_header[4]); depth = AV_RL16(&fli_header[12]); } |