lör 2019-02-09 klockan 13:10 +0000 skrev Matthew Fearnley: > - Clamp ME range to -64..63 (prevents corruption when me_range is too high) > - Allow MV's up to *and including* the positive range limit > - Allow out-of-edge ME by padding the prev buffer with a border of 0's > - Try previous MV before checking the rest (improves speed in some cases) > - More robust logic in code - ensure *mx,*my,*xored are updated together > --- > libavcodec/zmbvenc.c | 64 +++++++++++++++++++++++++++++++------------- > 1 file changed, 46 insertions(+), 18 deletions(-)
Passes FATE The only maybe suspicious thing is this part: > - c->pstride = FFALIGN(avctx->width, 16); > - if (!(c->prev = av_malloc(c->pstride * avctx->height))) { > + > + /* Allocate prev buffer - leave border around the outside for out of > edge ME */ > + c->pstride = FFALIGN(avctx->width + c->lrange, 16); Shouldn't this be with + lrange + urange? I guess it works out fine due to wraparound and lrange >= urange, but it makes me feel slightly uneasy > + prev_offset = FFALIGN(c->lrange + (c->pstride * c->lrange), 16); > + prev_size = prev_offset + (c->pstride * (avctx->height + c->urange)); The way I'd do this is compute the size first, then the offset. But I guess this works out the same way. Maybe someone else wants to chime in? /Tomas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel