Skip to content
Snippets Groups Projects
Commit eafbc671 authored by Vittorio Giovara's avatar Vittorio Giovara
Browse files

vmnc: Delay pixel size check


Some clients incorrectly set 24 as bits_per_coded_sample, while
the actual value is preserved in one of the codec headers.
In order to work around this, delay the check until decode_frame().

Signed-off-by: default avatarVittorio Giovara <vittorio.giovara@gmail.com>
parent 732dd658
No related branches found
No related tags found
No related merge requests found
...@@ -419,10 +419,18 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, ...@@ -419,10 +419,18 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
c->pic->pict_type = AV_PICTURE_TYPE_I; c->pic->pict_type = AV_PICTURE_TYPE_I;
depth = bytestream2_get_byte(gb); depth = bytestream2_get_byte(gb);
if (depth != c->bpp) { if (depth != c->bpp) {
av_log(avctx, AV_LOG_INFO, av_log(avctx, AV_LOG_WARNING, "Depth mismatch. "
"Depth mismatch. Container %i bpp, " "Container %i bpp / Codec %i bpp\n", c->bpp, depth);
"Frame data: %i bpp\n",
c->bpp, depth); if (depth != 8 && depth != 16 && depth != 32) {
av_log(avctx, AV_LOG_ERROR,
"Unsupported codec bitdepth %i\n", depth);
return AVERROR_INVALIDDATA;
}
/* reset values */
c->bpp = depth;
c->bpp2 = c->bpp / 8;
} }
bytestream2_skip(gb, 1); bytestream2_skip(gb, 1);
c->bigendian = bytestream2_get_byte(gb); c->bigendian = bytestream2_get_byte(gb);
...@@ -524,6 +532,9 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -524,6 +532,9 @@ static av_cold int decode_init(AVCodecContext *avctx)
case 16: case 16:
avctx->pix_fmt = AV_PIX_FMT_RGB555; avctx->pix_fmt = AV_PIX_FMT_RGB555;
break; break;
case 24:
/* 24 bits is not technically supported, but some clients might
* mistakenly set it -- delay the actual check until decode_frame() */
case 32: case 32:
avctx->pix_fmt = AV_PIX_FMT_RGB32; avctx->pix_fmt = AV_PIX_FMT_RGB32;
break; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment