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]); } diff --git a/libavformat/isom.c b/libavformat/isom.c index f12ba2c5b2..04e3f3f0d0 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -231,6 +231,7 @@ const AVCodecTag ff_codec_movvideo_tags[] = { { CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 's') }, /* Apple ProRes 422 LT */ { CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'o') }, /* Apple ProRes 422 Proxy */ { CODEC_ID_PRORES, MKTAG('a', 'p', '4', 'h') }, /* Apple ProRes 4444 */ + { CODEC_ID_FLIC, MKTAG('f', 'l', 'i', 'c') }, { CODEC_ID_NONE, 0 }, };