Commit 2a06c2a0 authored by Michael Niedermayer's avatar Michael Niedermayer Committed by Martin Storsjö

mpegvideo_enc: Draw edges on input for non-multiple of 16 resolutions

This improves motion estimation and avoids using uninitialized data
for resolutions that aren't a multiple of 16.

Prior to d2a25c40, the edges used to be initialized so that encoding
was deterministic, but after that commit it started using uninitialized
data (for non multiple of 16 resolutions).

CC: libav-stable@libav.org
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 91089675
......@@ -990,6 +990,8 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
pic_arg->linesize[1] != s->uvlinesize ||
pic_arg->linesize[2] != s->uvlinesize)
direct = 0;
if ((s->width & 15) || (s->height & 15))
direct = 0;
av_dlog(s->avctx, "%d %d %td %td\n", pic_arg->linesize[0],
pic_arg->linesize[1], s->linesize, s->uvlinesize);
......@@ -1038,12 +1040,21 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
if (src_stride == dst_stride)
memcpy(dst, src, src_stride * h);
else {
while (h--) {
memcpy(dst, src, w);
dst += dst_stride;
int h2 = h;
uint8_t *dst2 = dst;
while (h2--) {
memcpy(dst2, src, w);
dst2 += dst_stride;
src += src_stride;
}
}
if ((s->width & 15) || (s->height & 15)) {
s->mpvencdsp.draw_edges(dst, dst_stride,
w, h,
16 >> h_shift,
16 >> v_shift,
EDGE_BOTTOM);
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment