Module: libav Branch: master Commit: 7c25523cc8e618e77dc84d960e41e9644eaf8c33
Author: Paul B Mahol <one...@gmail.com> Committer: Luca Barbato <lu_z...@gentoo.org> Date: Fri Apr 21 12:27:17 2017 +0200 utvideodec: Fix decoding odd sizes with interlaced video with some formats Signed-off-by: Paul B Mahol <one...@gmail.com> Signed-off-by: Luca Barbato <lu_z...@gentoo.org> --- libavcodec/utvideodec.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index 910d64b..0f58c83 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -228,6 +228,16 @@ fail: return AVERROR_INVALIDDATA; } +static int compute_cmask(int plane_no, int interlaced, int pix_fmt) +{ + const int is_luma = (pix_fmt == AV_PIX_FMT_YUV420P) && !plane_no; + + if (interlaced) + return ~(1 + 2 * is_luma); + + return ~is_luma; +} + static int decode_plane(UtvideoContext *c, int plane_no, uint8_t *dst, int step, ptrdiff_t stride, int width, int height, @@ -238,7 +248,7 @@ static int decode_plane(UtvideoContext *c, int plane_no, VLC vlc; BitstreamContext bc; int prev, fsym; - const int cmask = ~(!plane_no && c->avctx->pix_fmt == AV_PIX_FMT_YUV420P); + const int cmask = compute_cmask(plane_no, c->interlaced, c->avctx->pix_fmt); if (build_huff(src, &vlc, &fsym)) { av_log(c->avctx, AV_LOG_ERROR, "Cannot build Huffman codes\n"); _______________________________________________ libav-commits mailing list libav-commits@libav.org https://lists.libav.org/mailman/listinfo/libav-commits