summaryrefslogtreecommitdiff
path: root/libavcodec/rscc.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2018-09-08 17:27:40 +0200
committerPaul B Mahol <onemda@gmail.com>2018-09-08 17:27:40 +0200
commit068412f2e88b9fde731894bca685c25b985ec8e1 (patch)
tree95504b467fdb78ea8bcfdcc834b22b98f06b2205 /libavcodec/rscc.c
parenta5278b672aaa8970cd550dd10f4bd2c582197bd3 (diff)
avcodec/rscc: fix decoding of some iscc files
Diffstat (limited to 'libavcodec/rscc.c')
-rw-r--r--libavcodec/rscc.c14
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) {