mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
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: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
9108967513
commit
2a06c2a03e
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user