Index: encoder/me.c =================================================================== --- encoder/me.c (revision 680) +++ encoder/me.c (working copy) @@ -120,6 +120,12 @@ COST_MV_X4( 0,-1, 0,1, -1,0, 1,0 );\ } +#define DIA2_ITER( mx, my )\ +{\ + omx = mx; omy = my;\ + COST_MV_X4( 0,-2, 0,2, -2,0, 2,0 );\ +} + #define CROSS( start, x_max, y_max )\ {\ i = start;\ @@ -214,9 +220,18 @@ switch( h->mb.i_me_method ) { case X264_ME_DIA: - /* diamond search, radius 1 */ + /* diamond search, radius 2 */ for( i = 0; i < i_me_range; i++ ) { + DIA2_ITER( bmx, bmy ); + if( bmx == omx && bmy == omy ) + break; + if( !CHECK_MVRANGE(bmx, bmy) ) + break; + } + /* diamond search, radius 1 */ + for( i = 0; i < 2; i++ ) + { DIA1_ITER( bmx, bmy ); if( bmx == omx && bmy == omy ) break;