static void rv34_pred_mv ( RV34DecContext * r , int block_type , int subblock_no , int dmv_no ) {
 MpegEncContext * s = & r -> s ;
 int mv_pos = s -> mb_x * 2 + s -> mb_y * 2 * s -> b8_stride ;
 int A [ 2 ] = {
 0 }
 , B [ 2 ] , C [ 2 ] ;
 int i , j ;
 int mx , my ;
 int * avail = r -> avail_cache + avail_indexes [ subblock_no ] ;
 int c_off = part_sizes_w [ block_type ] ;
 mv_pos += ( subblock_no & 1 ) + ( subblock_no >> 1 ) * s -> b8_stride ;
 if ( subblock_no == 3 ) c_off = - 1 ;
 if ( avail [ - 1 ] ) {
 A [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - 1 ] [ 0 ] ;
 A [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - 1 ] [ 1 ] ;
 }
 if ( avail [ - 4 ] ) {
 B [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride ] [ 0 ] ;
 B [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride ] [ 1 ] ;
 }
 else {
 B [ 0 ] = A [ 0 ] ;
 B [ 1 ] = A [ 1 ] ;
 }
 if ( ! avail [ c_off - 4 ] ) {
 if ( avail [ - 4 ] && ( avail [ - 1 ] || r -> rv30 ) ) {
 C [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride - 1 ] [ 0 ] ;
 C [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride - 1 ] [ 1 ] ;
 }
 else {
 C [ 0 ] = A [ 0 ] ;
 C [ 1 ] = A [ 1 ] ;
 }
 }
 else {
 C [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride + c_off ] [ 0 ] ;
 C [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride + c_off ] [ 1 ] ;
 }
 mx = mid_pred ( A [ 0 ] , B [ 0 ] , C [ 0 ] ) ;
 my = mid_pred ( A [ 1 ] , B [ 1 ] , C [ 1 ] ) ;
 mx += r -> dmv [ dmv_no ] [ 0 ] ;
 my += r -> dmv [ dmv_no ] [ 1 ] ;
 for ( j = 0 ;
 j < part_sizes_h [ block_type ] ;
 j ++ ) {
 for ( i = 0 ;
 i < part_sizes_w [ block_type ] ;
 i ++ ) {
 s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos + i + j * s -> b8_stride ] [ 0 ] = mx ;
 s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos + i + j * s -> b8_stride ] [ 1 ] = my ;
 }
 }
 }
static void rv34_pred_mv ( RV34DecContext * r , int block_type , int subblock_no , int dmv_no ) {
 MpegEncContext * s = & r -> s ;
 int mv_pos = s -> mb_x * 2 + s -> mb_y * 2 * s -> b8_stride ;
 int A [ 2 ] = {
 0 }
 , B [ 2 ] , C [ 2 ] ;
 int i , j ;
 int mx , my ;
 int * avail = r -> avail_cache + avail_indexes [ subblock_no ] ;
 int c_off = part_sizes_w [ block_type ] ;
 mv_pos += ( subblock_no & 1 ) + ( subblock_no >> 1 ) * s -> b8_stride ;
 if ( subblock_no == 3 ) c_off = - 1 ;
 if ( avail [ - 1 ] ) {
 A [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - 1 ] [ 0 ] ;
 A [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - 1 ] [ 1 ] ;
 }
 if ( avail [ - 4 ] ) {
 B [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride ] [ 0 ] ;
 B [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride ] [ 1 ] ;
 }
 else {
 B [ 0 ] = A [ 0 ] ;
 B [ 1 ] = A [ 1 ] ;
 }
 if ( ! avail [ c_off - 4 ] ) {
 if ( avail [ - 4 ] && ( avail [ - 1 ] || r -> rv30 ) ) {
 C [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride - 1 ] [ 0 ] ;
 C [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride - 1 ] [ 1 ] ;
 }
 else {
 C [ 0 ] = A [ 0 ] ;
 C [ 1 ] = A [ 1 ] ;
 }
 }
 else {
 C [ 0 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride + c_off ] [ 0 ] ;
 C [ 1 ] = s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos - s -> b8_stride + c_off ] [ 1 ] ;
 }
 mx = mid_pred ( A [ 0 ] , B [ 0 ] , C [ 0 ] ) ;
 my = mid_pred ( A [ 1 ] , B [ 1 ] , C [ 1 ] ) ;
 mx += r -> dmv [ dmv_no ] [ 0 ] ;
 my += r -> dmv [ dmv_no ] [ 1 ] ;
 for ( j = 0 ;
 j < part_sizes_h [ block_type ] ;
 j ++ ) {
 for ( i = 0 ;
 i < part_sizes_w [ block_type ] ;
 i ++ ) {
 s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos + i + j * s -> b8_stride ] [ 0 ] = mx ;
 s -> current_picture_ptr -> motion_val [ 0 ] [ mv_pos + i + j * s -> b8_stride ] [ 1 ] = my ;
 }
 }
 }