[x264-devel] slicetype_mb_cost: Clip MVs based on MV range
Henrik Gramner
git at videolan.org
Mon May 22 00:02:22 CEST 2017
x264 | branch: master | Henrik Gramner <henrik at gramner.com> | Thu Feb 16 20:04:10 2017 +0100| [1bde30193eb91d1bc69b00a27e6874eb88ed4eab] | committer: Henrik Gramner
slicetype_mb_cost: Clip MVs based on MV range
Improves cost calculations, especially when a short MV range is used.
> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=1bde30193eb91d1bc69b00a27e6874eb88ed4eab
---
encoder/slicetype.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/encoder/slicetype.c b/encoder/slicetype.c
index b20bbf3a..3fd9a459 100644
--- a/encoder/slicetype.c
+++ b/encoder/slicetype.c
@@ -544,17 +544,18 @@ static void x264_slicetype_mb_cost( x264_t *h, x264_mb_analysis_t *a,
if( p0 == p1 )
goto lowres_intra_mb;
+ int mv_range = 2 * h->param.analyse.i_mv_range;
// no need for h->mb.mv_min[]
- h->mb.mv_limit_fpel[0][0] = -8*h->mb.i_mb_x - 4;
- h->mb.mv_limit_fpel[1][0] = 8*( h->mb.i_mb_width - h->mb.i_mb_x - 1 ) + 4;
- h->mb.mv_min_spel[0] = 4*( h->mb.mv_limit_fpel[0][0] - 8 );
- h->mb.mv_max_spel[0] = 4*( h->mb.mv_limit_fpel[1][0] + 8 );
+ h->mb.mv_min_spel[0] = X264_MAX( 4*(-8*h->mb.i_mb_x - 12), -mv_range );
+ h->mb.mv_max_spel[0] = X264_MIN( 4*(8*(h->mb.i_mb_width - h->mb.i_mb_x - 1) + 12), mv_range-1 );
+ h->mb.mv_limit_fpel[0][0] = h->mb.mv_min_spel[0] >> 2;
+ h->mb.mv_limit_fpel[1][0] = h->mb.mv_max_spel[0] >> 2;
if( h->mb.i_mb_x >= h->mb.i_mb_width - 2 )
{
- h->mb.mv_limit_fpel[0][1] = -8*h->mb.i_mb_y - 4;
- h->mb.mv_limit_fpel[1][1] = 8*( h->mb.i_mb_height - h->mb.i_mb_y - 1 ) + 4;
- h->mb.mv_min_spel[1] = 4*( h->mb.mv_limit_fpel[0][1] - 8 );
- h->mb.mv_max_spel[1] = 4*( h->mb.mv_limit_fpel[1][1] + 8 );
+ h->mb.mv_min_spel[1] = X264_MAX( 4*(-8*h->mb.i_mb_y - 12), -mv_range );
+ h->mb.mv_max_spel[1] = X264_MIN( 4*(8*( h->mb.i_mb_height - h->mb.i_mb_y - 1) + 12), mv_range-1 );
+ h->mb.mv_limit_fpel[0][1] = h->mb.mv_min_spel[1] >> 2;
+ h->mb.mv_limit_fpel[1][1] = h->mb.mv_max_spel[1] >> 2;
}
#define LOAD_HPELS_LUMA(dst, src) \
More information about the x264-devel
mailing list