[FFmpeg-devel] [PATCH] vp9: fix mvref finding to adhere to bug in libvpx

Jim Bankoski jimbankoski at google.com
Mon Nov 11 20:24:36 CET 2013


> #define IF_DIFF_REF_FRAME_ADD_MV(CANDIDATE) \
>  do { \
>    if ((CANDIDATE)->ref_frame[0] != ref_frame) \
>      ADD_MV_REF_LIST(scale_mv((CANDIDATE), 0, ref_frame, ref_sign_bias));
\
>    if ((CANDIDATE)->ref_frame[1] != ref_frame && \
>        has_second_ref(CANDIDATE) && \
>        (CANDIDATE)->mv[1].as_int != (CANDIDATE)->mv[0].as_int) \
>      ADD_MV_REF_LIST(scale_mv((CANDIDATE), 1, ref_frame, ref_sign_bias));
\
>  } while (0)

> Note that for the second ref, we do the MV compare _before_ scaling
(there's several other things > wrong here; it looks like a premature
optimization - the last condition shouldn't have been there at
> all). Thus this is a bug in libvpx, or at this point yet another
bitstream bug. Thanks for finding it.


The bitstream's not changing to change this agreeably odd behavior.   When
I rewrote this to the current code I tried to do what you did and eliminate
the second prescaled comparison as it seems the natural thing to do.  I
agree its unfortunate.

We tested the impact on the quality and it was so minimal a change we
didn't think it worth the pain on the hw side..

As a result I believe you should make the patch you proposed in ffvp9.


More information about the ffmpeg-devel mailing list