@ -6008,22 +6008,11 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
v - > bits = buf_size * 8 ;
v - > bits = buf_size * 8 ;
v - > end_mb_x = s - > mb_width ;
v - > end_mb_x = s - > mb_width ;
if ( v - > field_mode ) {
if ( v - > field_mode ) {
uint8_t * tmp [ 2 ] ;
s - > current_picture . f . linesize [ 0 ] < < = 1 ;
s - > current_picture . f . linesize [ 0 ] < < = 1 ;
s - > current_picture . f . linesize [ 1 ] < < = 1 ;
s - > current_picture . f . linesize [ 1 ] < < = 1 ;
s - > current_picture . f . linesize [ 2 ] < < = 1 ;
s - > current_picture . f . linesize [ 2 ] < < = 1 ;
s - > linesize < < = 1 ;
s - > linesize < < = 1 ;
s - > uvlinesize < < = 1 ;
s - > uvlinesize < < = 1 ;
if ( v - > s . pict_type ! = AV_PICTURE_TYPE_BI & & v - > s . pict_type ! = AV_PICTURE_TYPE_B ) {
tmp [ 0 ] = v - > mv_f_last [ 0 ] ;
tmp [ 1 ] = v - > mv_f_last [ 1 ] ;
v - > mv_f_last [ 0 ] = v - > mv_f_next [ 0 ] ;
v - > mv_f_last [ 1 ] = v - > mv_f_next [ 1 ] ;
v - > mv_f_next [ 0 ] = v - > mv_f [ 0 ] ;
v - > mv_f_next [ 1 ] = v - > mv_f [ 1 ] ;
v - > mv_f [ 0 ] = tmp [ 0 ] ;
v - > mv_f [ 1 ] = tmp [ 1 ] ;
}
}
}
mb_height = s - > mb_height > > v - > field_mode ;
mb_height = s - > mb_height > > v - > field_mode ;
for ( i = 0 ; i < = n_slices ; i + + ) {
for ( i = 0 ; i < = n_slices ; i + + ) {
@ -6083,15 +6072,22 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
}
}
if ( v - > field_mode ) {
if ( v - > field_mode ) {
v - > second_field = 0 ;
v - > second_field = 0 ;
if ( s - > pict_type = = AV_PICTURE_TYPE_B ) {
memcpy ( v - > mv_f_base , v - > mv_f_next_base ,
2 * ( s - > b8_stride * ( s - > mb_height * 2 + 1 ) + s - > mb_stride * ( s - > mb_height + 1 ) * 2 ) ) ;
}
s - > current_picture . f . linesize [ 0 ] > > = 1 ;
s - > current_picture . f . linesize [ 0 ] > > = 1 ;
s - > current_picture . f . linesize [ 1 ] > > = 1 ;
s - > current_picture . f . linesize [ 1 ] > > = 1 ;
s - > current_picture . f . linesize [ 2 ] > > = 1 ;
s - > current_picture . f . linesize [ 2 ] > > = 1 ;
s - > linesize > > = 1 ;
s - > linesize > > = 1 ;
s - > uvlinesize > > = 1 ;
s - > uvlinesize > > = 1 ;
if ( v - > s . pict_type ! = AV_PICTURE_TYPE_BI & & v - > s . pict_type ! = AV_PICTURE_TYPE_B ) {
uint8_t * tmp [ 2 ] ;
tmp [ 0 ] = v - > mv_f_last [ 0 ] ;
tmp [ 1 ] = v - > mv_f_last [ 1 ] ;
v - > mv_f_last [ 0 ] = v - > mv_f_next [ 0 ] ;
v - > mv_f_last [ 1 ] = v - > mv_f_next [ 1 ] ;
v - > mv_f_next [ 0 ] = v - > mv_f [ 0 ] ;
v - > mv_f_next [ 1 ] = v - > mv_f [ 1 ] ;
v - > mv_f [ 0 ] = tmp [ 0 ] ;
v - > mv_f [ 1 ] = tmp [ 1 ] ;
}
}
}
av_dlog ( s - > avctx , " Consumed %i/%i bits \n " ,
av_dlog ( s - > avctx , " Consumed %i/%i bits \n " ,
get_bits_count ( & s - > gb ) , s - > gb . size_in_bits ) ;
get_bits_count ( & s - > gb ) , s - > gb . size_in_bits ) ;