[FFmpeg-cvslog] utvideodec: Fix decoding odd sizes with interlaced video with some formats
Paul B Mahol
git at videolan.org
Mon Oct 30 19:26:30 EET 2017
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Fri Apr 21 12:27:17 2017 +0200| [7c25523cc8e618e77dc84d960e41e9644eaf8c33] | committer: Luca Barbato
utvideodec: Fix decoding odd sizes with interlaced video with some formats
Signed-off-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7c25523cc8e618e77dc84d960e41e9644eaf8c33
---
libavcodec/utvideodec.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 910d64b57e..0f58c83979 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");
More information about the ffmpeg-cvslog
mailing list