diff options
author | Paul B Mahol <onemda@gmail.com> | 2018-09-08 17:27:40 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2018-09-08 17:27:40 +0200 |
commit | 068412f2e88b9fde731894bca685c25b985ec8e1 (patch) | |
tree | 95504b467fdb78ea8bcfdcc834b22b98f06b2205 | |
parent | a5278b672aaa8970cd550dd10f4bd2c582197bd3 (diff) | |
download | ffmpeg-068412f2e88b9fde731894bca685c25b985ec8e1.tar.gz |
avcodec/rscc: fix decoding of some iscc files
-rw-r--r-- | libavcodec/rscc.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libavcodec/rscc.c b/libavcodec/rscc.c index dae5e84634..7921f149ed 100644 --- a/libavcodec/rscc.c +++ b/libavcodec/rscc.c @@ -85,8 +85,18 @@ static av_cold int rscc_init(AVCodecContext *avctx) /* Get pixel format and the size of the pixel */ if (avctx->codec_tag == MKTAG('I', 'S', 'C', 'C')) { - avctx->pix_fmt = AV_PIX_FMT_BGRA; - ctx->component_size = 4; + if (avctx->extradata && avctx->extradata_size == 4) { + if ((avctx->extradata[0] >> 1) & 1) { + avctx->pix_fmt = AV_PIX_FMT_BGRA; + ctx->component_size = 4; + } else { + avctx->pix_fmt = AV_PIX_FMT_BGR24; + ctx->component_size = 3; + } + } else { + avctx->pix_fmt = AV_PIX_FMT_BGRA; + ctx->component_size = 4; + } } else if (avctx->codec_tag == MKTAG('R', 'S', 'C', 'C')) { ctx->component_size = avctx->bits_per_coded_sample / 8; switch (avctx->bits_per_coded_sample) { |