|
|
|
@@ -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_OR_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_OR_MBAFF_PICTURE) { |
|
|
|
++s->mb_y; |
|
|
|
} |
|
|
|
if(s->mb_y >= s->mb_height){ |
|
|
|
|