@ -177,7 +177,7 @@ static void fill_caches(H264Context *h, int mb_type, int for_deblock){
//wow what a mess, why didn't they simplify the interlacing&intra stuff, i can't imagine that these complex rules are worth it
top_xy = mb_xy - s - > mb_stride ;
top_xy = mb_xy - ( s - > mb_stride < < FIELD_PICTURE ) ;
topleft_xy = top_xy - 1 ;
topright_xy = top_xy + 1 ;
left_xy [ 1 ] = left_xy [ 0 ] = mb_xy - 1 ;
@ -3921,13 +3921,15 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
s - > current_picture_ptr - > frame_num = h - > frame_num ; //FIXME frame_num cleanup
assert ( s - > mb_num = = s - > mb_width * s - > mb_height ) ;
if ( first_mb_in_slice < < h - > mb_aff_frame > = s - > mb_num | |
if ( first_mb_in_slice < < FIELD_OR_MBAFF_PICTURE > = s - > mb_num | |
first_mb_in_slice > = s - > mb_num ) {
av_log ( h - > s . avctx , AV_LOG_ERROR , " first_mb_in_slice overflow \n " ) ;
return - 1 ;
}
s - > resync_mb_x = s - > mb_x = first_mb_in_slice % s - > mb_width ;
s - > resync_mb_y = s - > mb_y = ( first_mb_in_slice / s - > mb_width ) < < h - > mb_aff_frame ;
s - > resync_mb_y = s - > mb_y = ( first_mb_in_slice / s - > mb_width ) < < FIELD_OR_MBAFF_PICTURE ;
if ( s - > picture_structure = = PICT_BOTTOM_FIELD )
s - > resync_mb_y = s - > mb_y = s - > mb_y + 1 ;
assert ( s - > mb_y < s - > mb_height ) ;
if ( s - > picture_structure = = PICT_FRAME ) {
@ -4987,7 +4989,7 @@ static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
} else {
int mb_xy = mb_x + mb_y * s - > mb_stride ;
mba_xy = mb_xy - 1 ;
mbb_xy = mb_xy - s - > mb_stride ;
mbb_xy = mb_xy - ( s - > mb_stride < < FIELD_PICTURE ) ;
}
if ( h - > slice_table [ mba_xy ] = = h - > slice_num & & ! IS_SKIP ( s - > current_picture . mb_type [ mba_xy ] ) )
@ -5431,6 +5433,8 @@ static inline void compute_mb_neighbors(H264Context *h)
if ( left_mb_frame_flag ! = curr_mb_frame_flag ) {
h - > left_mb_xy [ 0 ] = pair_xy - 1 ;
}
} else if ( FIELD_PICTURE ) {
h - > top_mb_xy - = s - > mb_stride ;
}
return ;
}
@ -6666,7 +6670,7 @@ static int decode_slice(struct AVCodecContext *avctx, H264Context *h){
s - > mb_x = 0 ;
ff_draw_horiz_band ( s , 16 * s - > mb_y , 16 ) ;
+ + s - > mb_y ;
if ( FRAME _MBAFF ) {
if ( FIELD_O R_MBAFF_PICTURE ) {
+ + s - > mb_y ;
}
}
@ -6703,7 +6707,7 @@ static int decode_slice(struct AVCodecContext *avctx, H264Context *h){
s - > mb_x = 0 ;
ff_draw_horiz_band ( s , 16 * s - > mb_y , 16 ) ;
+ + s - > mb_y ;
if ( FRAME _MBAFF ) {
if ( FIELD_O R_MBAFF_PICTURE ) {
+ + s - > mb_y ;
}
if ( s - > mb_y > = s - > mb_height ) {