@ -2172,41 +2172,6 @@ static int vc1_decode_b_mb_intfr(VC1Context *v)
}
}
}
}
if ( v - > dmb_is_raw )
direct = get_bits1 ( gb ) ;
else
direct = v - > direct_mb_plane [ mb_pos ] ;
if ( direct ) {
if ( s - > next_picture_ptr - > field_picture )
av_log ( s - > avctx , AV_LOG_WARNING , " Mixed frame/field direct mode not supported \n " ) ;
s - > mv [ 0 ] [ 0 ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 0 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 0 ] [ 0 ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 0 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 0 ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 0 ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
if ( twomv ) {
s - > mv [ 0 ] [ 2 ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 2 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 0 ] [ 2 ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 2 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 2 ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 2 ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
for ( i = 1 ; i < 4 ; i + = 2 ) {
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 0 ] [ i - 1 ] [ 0 ] ;
s - > mv [ 0 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 0 ] [ i - 1 ] [ 1 ] ;
s - > mv [ 1 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 1 ] [ i - 1 ] [ 0 ] ;
s - > mv [ 1 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 1 ] [ i - 1 ] [ 1 ] ;
}
} else {
for ( i = 1 ; i < 4 ; i + + ) {
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 0 ] [ 0 ] [ 0 ] ;
s - > mv [ 0 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 0 ] [ 0 ] [ 1 ] ;
s - > mv [ 1 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 1 ] [ 0 ] [ 0 ] ;
s - > mv [ 1 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 1 ] [ 0 ] [ 1 ] ;
}
}
}
if ( ff_vc1_mbmode_intfrp [ 0 ] [ idx_mbmode ] [ 0 ] = = MV_PMODE_INTFR_INTRA ) { // intra MB
if ( ff_vc1_mbmode_intfrp [ 0 ] [ idx_mbmode ] [ 0 ] = = MV_PMODE_INTFR_INTRA ) { // intra MB
for ( i = 0 ; i < 4 ; i + + ) {
for ( i = 0 ; i < 4 ; i + + ) {
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = 0 ;
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = 0 ;
@ -2257,6 +2222,42 @@ static int vc1_decode_b_mb_intfr(VC1Context *v)
}
}
} else {
} else {
s - > mb_intra = v - > is_intra [ s - > mb_x ] = 0 ;
s - > mb_intra = v - > is_intra [ s - > mb_x ] = 0 ;
if ( v - > dmb_is_raw )
direct = get_bits1 ( gb ) ;
else
direct = v - > direct_mb_plane [ mb_pos ] ;
if ( direct ) {
if ( s - > next_picture_ptr - > field_picture )
av_log ( s - > avctx , AV_LOG_WARNING , " Mixed frame/field direct mode not supported \n " ) ;
s - > mv [ 0 ] [ 0 ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 0 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 0 ] [ 0 ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 0 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 0 ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 0 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 0 ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 0 ] ] [ 1 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
if ( twomv ) {
s - > mv [ 0 ] [ 2 ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 2 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 0 ] [ 2 ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ 2 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] , v - > bfraction , 0 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 2 ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 0 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
s - > mv [ 1 ] [ 2 ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] = scale_mv ( s - > next_picture . motion_val [ 1 ] [ s - > block_index [ 2 ] ] [ 1 ] , v - > bfraction , 1 , s - > quarter_sample ) ;
for ( i = 1 ; i < 4 ; i + = 2 ) {
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 0 ] [ i - 1 ] [ 0 ] ;
s - > mv [ 0 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 0 ] [ i - 1 ] [ 1 ] ;
s - > mv [ 1 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 1 ] [ i - 1 ] [ 0 ] ;
s - > mv [ 1 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 1 ] [ i - 1 ] [ 1 ] ;
}
} else {
for ( i = 1 ; i < 4 ; i + + ) {
s - > mv [ 0 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 0 ] [ 0 ] [ 0 ] ;
s - > mv [ 0 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 0 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 0 ] [ 0 ] [ 1 ] ;
s - > mv [ 1 ] [ i ] [ 0 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 0 ] = s - > mv [ 1 ] [ 0 ] [ 0 ] ;
s - > mv [ 1 ] [ i ] [ 1 ] = s - > current_picture . motion_val [ 1 ] [ s - > block_index [ i ] ] [ 1 ] = s - > mv [ 1 ] [ 0 ] [ 1 ] ;
}
}
}
if ( ! direct ) {
if ( ! direct ) {
if ( skipped | | ! s - > mb_intra ) {
if ( skipped | | ! s - > mb_intra ) {
bmvtype = decode012 ( gb ) ;
bmvtype = decode012 ( gb ) ;