+static int x264_mb_analyse_inter_p4x4_chroma( x264_t *h, x264_mb_analysis_t *a, uint8_t **p_fref, int i8x8, int pixel )
+{
+ uint8_t pix1[8*8], pix2[8*8];
+ const int i_stride = h->mb.pic.i_stride[1];
+ const int off = 4*(i8x8&1) + 2*(i8x8&2)*i_stride;
+
+#define CHROMA4x4MC( width, height, me, x, y ) \
+ h->mc.mc_chroma( &p_fref[4][off+x+y*i_stride], i_stride, &pix1[x+y*8], 8, (me).mv[0], (me).mv[1], width, height ); \
+ h->mc.mc_chroma( &p_fref[5][off+x+y*i_stride], i_stride, &pix2[x+y*8], 8, (me).mv[0], (me).mv[1], width, height );
+
+ if( pixel == PIXEL_4x4 )
+ {
+ CHROMA4x4MC( 2,2, a->l0.me4x4[i8x8][0], 0,0 );
+ CHROMA4x4MC( 2,2, a->l0.me4x4[i8x8][1], 0,2 );
+ CHROMA4x4MC( 2,2, a->l0.me4x4[i8x8][2], 2,0 );
+ CHROMA4x4MC( 2,2, a->l0.me4x4[i8x8][3], 2,2 );
+ }
+ else if( pixel == PIXEL_8x4 )
+ {
+ CHROMA4x4MC( 4,2, a->l0.me8x4[i8x8][0], 0,0 );
+ CHROMA4x4MC( 4,2, a->l0.me8x4[i8x8][1], 0,2 );
+ }
+ else
+ {
+ CHROMA4x4MC( 2,4, a->l0.me4x8[i8x8][0], 0,0 );
+ CHROMA4x4MC( 2,4, a->l0.me4x8[i8x8][1], 2,0 );
+ }
+
+ return h->pixf.satd[PIXEL_4x4]( &h->mb.pic.p_fenc[1][off], i_stride, pix1, 8 )
+ + h->pixf.satd[PIXEL_4x4]( &h->mb.pic.p_fenc[2][off], i_stride, pix2, 8 );
+}
+