@ -718,12 +718,12 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
down the code */
if ( sl - > slice_type_nos ! = AV_PICTURE_TYPE_I ) {
if ( sl - > mb_skip_run = = - 1 )
sl - > mb_skip_run = get_ue_golomb_long ( & h - > gb ) ;
sl - > mb_skip_run = get_ue_golomb_long ( & sl - > gb ) ;
if ( sl - > mb_skip_run - - ) {
if ( FRAME_MBAFF ( h ) & & ( sl - > mb_y & 1 ) = = 0 ) {
if ( sl - > mb_skip_run = = 0 )
h - > mb_mbaff = h - > mb_field_decoding_flag = get_bits1 ( & h - > gb ) ;
h - > mb_mbaff = h - > mb_field_decoding_flag = get_bits1 ( & sl - > gb ) ;
}
decode_mb_skip ( h , sl ) ;
return 0 ;
@ -731,12 +731,12 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
}
if ( FRAME_MBAFF ( h ) ) {
if ( ( sl - > mb_y & 1 ) = = 0 )
h - > mb_mbaff = h - > mb_field_decoding_flag = get_bits1 ( & h - > gb ) ;
h - > mb_mbaff = h - > mb_field_decoding_flag = get_bits1 ( & sl - > gb ) ;
}
sl - > prev_mb_skipped = 0 ;
mb_type = get_ue_golomb ( & h - > gb ) ;
mb_type = get_ue_golomb ( & sl - > gb ) ;
if ( sl - > slice_type_nos = = AV_PICTURE_TYPE_B ) {
if ( mb_type < 23 ) {
partition_count = b_mb_type_info [ mb_type ] . partition_count ;
@ -778,12 +778,12 @@ decode_intra_mb:
h - > sps . bit_depth_luma ;
// We assume these blocks are very rare so we do not optimize it.
sl - > intra_pcm_ptr = align_get_bits ( & h - > gb ) ;
if ( get_bits_left ( & h - > gb ) < mb_size ) {
sl - > intra_pcm_ptr = align_get_bits ( & sl - > gb ) ;
if ( get_bits_left ( & sl - > gb ) < mb_size ) {
av_log ( h - > avctx , AV_LOG_ERROR , " Not enough data for an intra PCM block. \n " ) ;
return AVERROR_INVALIDDATA ;
}
skip_bits_long ( & h - > gb , mb_size ) ;
skip_bits_long ( & sl - > gb , mb_size ) ;
// In deblocking, the quantizer is 0
h - > cur_pic . qscale_table [ mb_xy ] = 0 ;
@ -807,7 +807,7 @@ decode_intra_mb:
if ( IS_INTRA4x4 ( mb_type ) ) {
int i ;
int di = 1 ;
if ( dct8x8_allowed & & get_bits1 ( & h - > gb ) ) {
if ( dct8x8_allowed & & get_bits1 ( & sl - > gb ) ) {
mb_type | = MB_TYPE_8x8DCT ;
di = 4 ;
}
@ -816,8 +816,8 @@ decode_intra_mb:
for ( i = 0 ; i < 16 ; i + = di ) {
int mode = pred_intra_mode ( h , sl , i ) ;
if ( ! get_bits1 ( & h - > gb ) ) {
const int rem_mode = get_bits ( & h - > gb , 3 ) ;
if ( ! get_bits1 ( & sl - > gb ) ) {
const int rem_mode = get_bits ( & sl - > gb , 3 ) ;
mode = rem_mode + ( rem_mode > = mode ) ;
}
@ -835,7 +835,7 @@ decode_intra_mb:
return - 1 ;
}
if ( decode_chroma ) {
pred_mode = ff_h264_check_intra_pred_mode ( h , sl , get_ue_golomb_31 ( & h - > gb ) , 1 ) ;
pred_mode = ff_h264_check_intra_pred_mode ( h , sl , get_ue_golomb_31 ( & sl - > gb ) , 1 ) ;
if ( pred_mode < 0 )
return - 1 ;
sl - > chroma_pred_mode = pred_mode ;
@ -847,7 +847,7 @@ decode_intra_mb:
if ( sl - > slice_type_nos = = AV_PICTURE_TYPE_B ) {
for ( i = 0 ; i < 4 ; i + + ) {
sl - > sub_mb_type [ i ] = get_ue_golomb_31 ( & h - > gb ) ;
sl - > sub_mb_type [ i ] = get_ue_golomb_31 ( & sl - > gb ) ;
if ( sl - > sub_mb_type [ i ] > = 13 ) {
av_log ( h - > avctx , AV_LOG_ERROR , " B sub_mb_type %u out of range at %d %d \n " , sl - > sub_mb_type [ i ] , sl - > mb_x , sl - > mb_y ) ;
return - 1 ;
@ -865,7 +865,7 @@ decode_intra_mb:
} else {
av_assert2 ( sl - > slice_type_nos = = AV_PICTURE_TYPE_P ) ; //FIXME SP correct ?
for ( i = 0 ; i < 4 ; i + + ) {
sl - > sub_mb_type [ i ] = get_ue_golomb_31 ( & h - > gb ) ;
sl - > sub_mb_type [ i ] = get_ue_golomb_31 ( & sl - > gb ) ;
if ( sl - > sub_mb_type [ i ] > = 4 ) {
av_log ( h - > avctx , AV_LOG_ERROR , " P sub_mb_type %u out of range at %d %d \n " , sl - > sub_mb_type [ i ] , sl - > mb_x , sl - > mb_y ) ;
return - 1 ;
@ -884,9 +884,9 @@ decode_intra_mb:
if ( ref_count = = 1 ) {
tmp = 0 ;
} else if ( ref_count = = 2 ) {
tmp = get_bits1 ( & h - > gb ) ^ 1 ;
tmp = get_bits1 ( & sl - > gb ) ^ 1 ;
} else {
tmp = get_ue_golomb_31 ( & h - > gb ) ;
tmp = get_ue_golomb_31 ( & sl - > gb ) ;
if ( tmp > = ref_count ) {
av_log ( h - > avctx , AV_LOG_ERROR , " ref %u overflow \n " , tmp ) ;
return - 1 ;
@ -920,8 +920,8 @@ decode_intra_mb:
const int index = 4 * i + block_width * j ;
int16_t ( * mv_cache ) [ 2 ] = & sl - > mv_cache [ list ] [ scan8 [ index ] ] ;
pred_motion ( h , sl , index , block_width , list , sl - > ref_cache [ list ] [ scan8 [ index ] ] , & mx , & my ) ;
mx + = get_se_golomb ( & h - > gb ) ;
my + = get_se_golomb ( & h - > gb ) ;
mx + = get_se_golomb ( & sl - > gb ) ;
my + = get_se_golomb ( & sl - > gb ) ;
tprintf ( h - > avctx , " final mv:%d %d \n " , mx , my ) ;
if ( IS_SUB_8X8 ( sub_mb_type ) ) {
@ -959,9 +959,9 @@ decode_intra_mb:
if ( local_ref_count [ list ] = = 1 ) {
val = 0 ;
} else if ( local_ref_count [ list ] = = 2 ) {
val = get_bits1 ( & h - > gb ) ^ 1 ;
val = get_bits1 ( & sl - > gb ) ^ 1 ;
} else {
val = get_ue_golomb_31 ( & h - > gb ) ;
val = get_ue_golomb_31 ( & sl - > gb ) ;
if ( val > = local_ref_count [ list ] ) {
av_log ( h - > avctx , AV_LOG_ERROR , " ref %u overflow \n " , val ) ;
return - 1 ;
@ -973,8 +973,8 @@ decode_intra_mb:
for ( list = 0 ; list < sl - > list_count ; list + + ) {
if ( IS_DIR ( mb_type , 0 , list ) ) {
pred_motion ( h , sl , 0 , 4 , list , sl - > ref_cache [ list ] [ scan8 [ 0 ] ] , & mx , & my ) ;
mx + = get_se_golomb ( & h - > gb ) ;
my + = get_se_golomb ( & h - > gb ) ;
mx + = get_se_golomb ( & sl - > gb ) ;
my + = get_se_golomb ( & sl - > gb ) ;
tprintf ( h - > avctx , " final mv:%d %d \n " , mx , my ) ;
fill_rectangle ( sl - > mv_cache [ list ] [ scan8 [ 0 ] ] , 4 , 4 , 8 , pack16to32 ( mx , my ) , 4 ) ;
@ -989,9 +989,9 @@ decode_intra_mb:
if ( local_ref_count [ list ] = = 1 ) {
val = 0 ;
} else if ( local_ref_count [ list ] = = 2 ) {
val = get_bits1 ( & h - > gb ) ^ 1 ;
val = get_bits1 ( & sl - > gb ) ^ 1 ;
} else {
val = get_ue_golomb_31 ( & h - > gb ) ;
val = get_ue_golomb_31 ( & sl - > gb ) ;
if ( val > = local_ref_count [ list ] ) {
av_log ( h - > avctx , AV_LOG_ERROR , " ref %u overflow \n " , val ) ;
return - 1 ;
@ -1007,8 +1007,8 @@ decode_intra_mb:
unsigned int val ;
if ( IS_DIR ( mb_type , i , list ) ) {
pred_16x8_motion ( h , sl , 8 * i , list , sl - > ref_cache [ list ] [ scan8 [ 0 ] + 16 * i ] , & mx , & my ) ;
mx + = get_se_golomb ( & h - > gb ) ;
my + = get_se_golomb ( & h - > gb ) ;
mx + = get_se_golomb ( & sl - > gb ) ;
my + = get_se_golomb ( & sl - > gb ) ;
tprintf ( h - > avctx , " final mv:%d %d \n " , mx , my ) ;
val = pack16to32 ( mx , my ) ;
@ -1026,9 +1026,9 @@ decode_intra_mb:
if ( local_ref_count [ list ] = = 1 ) {
val = 0 ;
} else if ( local_ref_count [ list ] = = 2 ) {
val = get_bits1 ( & h - > gb ) ^ 1 ;
val = get_bits1 ( & sl - > gb ) ^ 1 ;
} else {
val = get_ue_golomb_31 ( & h - > gb ) ;
val = get_ue_golomb_31 ( & sl - > gb ) ;
if ( val > = local_ref_count [ list ] ) {
av_log ( h - > avctx , AV_LOG_ERROR , " ref %u overflow \n " , val ) ;
return - 1 ;
@ -1044,8 +1044,8 @@ decode_intra_mb:
unsigned int val ;
if ( IS_DIR ( mb_type , i , list ) ) {
pred_8x16_motion ( h , sl , i * 4 , list , sl - > ref_cache [ list ] [ scan8 [ 0 ] + 2 * i ] , & mx , & my ) ;
mx + = get_se_golomb ( & h - > gb ) ;
my + = get_se_golomb ( & h - > gb ) ;
mx + = get_se_golomb ( & sl - > gb ) ;
my + = get_se_golomb ( & sl - > gb ) ;
tprintf ( h - > avctx , " final mv:%d %d \n " , mx , my ) ;
val = pack16to32 ( mx , my ) ;
@ -1061,7 +1061,7 @@ decode_intra_mb:
write_back_motion ( h , sl , mb_type ) ;
if ( ! IS_INTRA16x16 ( mb_type ) ) {
cbp = get_ue_golomb ( & h - > gb ) ;
cbp = get_ue_golomb ( & sl - > gb ) ;
if ( decode_chroma ) {
if ( cbp > 47 ) {
@ -1086,7 +1086,7 @@ decode_intra_mb:
}
if ( dct8x8_allowed & & ( cbp & 15 ) & & ! IS_INTRA ( mb_type ) ) {
mb_type | = MB_TYPE_8x8DCT * get_bits1 ( & h - > gb ) ;
mb_type | = MB_TYPE_8x8DCT * get_bits1 ( & sl - > gb ) ;
}
sl - > cbp =
h - > cbp_table [ mb_xy ] = cbp ;
@ -1096,7 +1096,7 @@ decode_intra_mb:
int i4x4 , i8x8 , chroma_idx ;
int dquant ;
int ret ;
GetBitContext * gb = & h - > gb ;
GetBitContext * gb = & sl - > gb ;
const uint8_t * scan , * scan8x8 ;
const int max_qp = 51 + 6 * ( h - > sps . bit_depth_luma - 8 ) ;
@ -1108,7 +1108,7 @@ decode_intra_mb:
scan = sl - > qscale ? h - > zigzag_scan : h - > zigzag_scan_q0 ;
}
dquant = get_se_golomb ( & h - > gb ) ;
dquant = get_se_golomb ( & sl - > gb ) ;
sl - > qscale + = dquant ;