summaryrefslogtreecommitdiff
path: root/libavcodec/utvideodec.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2017-10-30 14:20:58 -0300
committerJames Almer <jamrial@gmail.com>2017-10-30 14:25:15 -0300
commitb428d445a8175ecd872b56a2c3272326c48a5eb9 (patch)
tree33228a48cb530f7d0a298fc13bc81ab9cb8dcbb1 /libavcodec/utvideodec.c
parentba45ca0e62e251279508785bf93872f9c3b226a2 (diff)
parent7c25523cc8e618e77dc84d960e41e9644eaf8c33 (diff)
Merge commit '7c25523cc8e618e77dc84d960e41e9644eaf8c33'
* commit '7c25523cc8e618e77dc84d960e41e9644eaf8c33': utvideodec: Fix decoding odd sizes with interlaced video with some formats See 9ef21a897c64417a0575cbc6fad6222f3163d103 Merged-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/utvideodec.c')
-rw-r--r--libavcodec/utvideodec.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 40c12772b3..26c3f8a506 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -229,6 +229,16 @@ fail:
return AVERROR_INVALIDDATA;
}
+static int compute_cmask(int plane_no, int interlaced, enum AVPixelFormat 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,
@@ -239,7 +249,7 @@ static int decode_plane(UtvideoContext *c, int plane_no,
VLC vlc;
GetBitContext gb;
int prev, fsym;
- const int cmask = c->interlaced ? ~(1 + 2 * (!plane_no && c->avctx->pix_fmt == AV_PIX_FMT_YUV420P)) : ~(!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");