From 85407c7e63722a2d723257e8cf5f281a8c9f34a4 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 12 Nov 2016 12:31:34 +0100 Subject: [PATCH] avcodec/mpegvideo: Fix edge emu buffer overlap with interlaced mpeg4 Fixes Ticket5936 Regression since c5fc8ae12622a507d7b9ee30ddcd3734e6de6b1d Signed-off-by: Michael Niedermayer --- libavcodec/mpegpicture.c | 2 +- libavcodec/mpegvideo.c | 2 +- libavcodec/mpegvideo_enc.c | 2 +- libavcodec/mpegvideo_motion.c | 4 ++-- libavcodec/version.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/mpegpicture.c b/libavcodec/mpegpicture.c index 6748fc2986..302f9d20d3 100644 --- a/libavcodec/mpegpicture.c +++ b/libavcodec/mpegpicture.c @@ -76,7 +76,7 @@ int ff_mpeg_framesize_alloc(AVCodecContext *avctx, MotionEstContext *me, // at uvlinesize. It supports only YUV420 so 24x24 is enough // linesize * interlaced * MBsize // we also use this buffer for encoding in encode_mb_internal() needig an additional 32 lines - FF_ALLOCZ_ARRAY_OR_GOTO(avctx, sc->edge_emu_buffer, alloc_size, 4 * 68, + FF_ALLOCZ_ARRAY_OR_GOTO(avctx, sc->edge_emu_buffer, alloc_size, 4 * 70, fail); FF_ALLOCZ_ARRAY_OR_GOTO(avctx, me->scratchpad, alloc_size, 4 * 16 * 2, diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 9a17a6e25c..59be078262 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -2116,7 +2116,7 @@ static av_always_inline void mpeg_motion_lowres(MpegEncContext *s, ptr_y = s->sc.edge_emu_buffer; if (!CONFIG_GRAY || !(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { uint8_t *ubuf = s->sc.edge_emu_buffer + 18 * s->linesize; - uint8_t *vbuf =ubuf + 9 * s->uvlinesize; + uint8_t *vbuf =ubuf + 10 * s->uvlinesize; s->vdsp.emulated_edge_mc(ubuf, ptr_cb, uvlinesize >> field_based, uvlinesize >> field_based, 9, 9 + field_based, diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1540e5c11d..10b4c5b8c4 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2276,7 +2276,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width; if((mb_x * 16 + 16 > s->width || mb_y * 16 + 16 > s->height) && s->codec_id != AV_CODEC_ID_AMV){ - uint8_t *ebuf = s->sc.edge_emu_buffer + 36 * wrap_y; + uint8_t *ebuf = s->sc.edge_emu_buffer + 38 * wrap_y; int cw = (s->width + s->chroma_x_shift) >> s->chroma_x_shift; int ch = (s->height + s->chroma_y_shift) >> s->chroma_y_shift; s->vdsp.emulated_edge_mc(ebuf, ptr_y, diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c index c29810f598..b97a6cb303 100644 --- a/libavcodec/mpegvideo_motion.c +++ b/libavcodec/mpegvideo_motion.c @@ -326,7 +326,7 @@ void mpeg_motion_internal(MpegEncContext *s, ptr_y = s->sc.edge_emu_buffer; if (!CONFIG_GRAY || !(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { uint8_t *ubuf = s->sc.edge_emu_buffer + 18 * s->linesize; - uint8_t *vbuf = ubuf + 9 * s->uvlinesize; + uint8_t *vbuf = ubuf + 10 * s->uvlinesize; uvsrc_y = (unsigned)uvsrc_y << field_based; s->vdsp.emulated_edge_mc(ubuf, ptr_cb, s->uvlinesize, s->uvlinesize, @@ -549,7 +549,7 @@ static inline void qpel_motion(MpegEncContext *s, ptr_y = s->sc.edge_emu_buffer; if (!CONFIG_GRAY || !(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { uint8_t *ubuf = s->sc.edge_emu_buffer + 18 * s->linesize; - uint8_t *vbuf = ubuf + 9 * s->uvlinesize; + uint8_t *vbuf = ubuf + 10 * s->uvlinesize; s->vdsp.emulated_edge_mc(ubuf, ptr_cb, s->uvlinesize, s->uvlinesize, 9, 9 + field_based, diff --git a/libavcodec/version.h b/libavcodec/version.h index 610ebbaa73..b5e9ad77ac 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 66 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MICRO 104 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \