mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
h264: add a parameter to the FIELD_OR_MBAFF_PICTURE macro.
This way it does not look like a constant.
This commit is contained in:
parent
7fa00653a5
commit
a6931d8ece
@ -206,7 +206,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice,
|
||||
slice->SliceBytesInBuffer = size;
|
||||
slice->wBadSliceChopping = 0;
|
||||
|
||||
slice->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE) * h->mb_width + h->mb_x;
|
||||
slice->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE(h)) * h->mb_width + h->mb_x;
|
||||
slice->NumMbsForSlice = 0; /* XXX it is set once we have all slices */
|
||||
slice->BitOffsetToSliceData = get_bits_count(&h->gb);
|
||||
slice->slice_type = ff_h264_get_slice_type(h);
|
||||
|
@ -1862,7 +1862,7 @@ static void decode_postinit(H264Context *h, int setup_finished)
|
||||
break;
|
||||
case SEI_PIC_STRUCT_TOP_BOTTOM:
|
||||
case SEI_PIC_STRUCT_BOTTOM_TOP:
|
||||
if (FIELD_OR_MBAFF_PICTURE)
|
||||
if (FIELD_OR_MBAFF_PICTURE(h))
|
||||
cur->f.interlaced_frame = 1;
|
||||
else
|
||||
// try to flag soft telecine progressive
|
||||
@ -1888,7 +1888,7 @@ static void decode_postinit(H264Context *h, int setup_finished)
|
||||
cur->f.interlaced_frame = (h->sei_ct_type & (1 << 1)) != 0;
|
||||
} else {
|
||||
/* Derive interlacing flag from used decoding process. */
|
||||
cur->f.interlaced_frame = FIELD_OR_MBAFF_PICTURE;
|
||||
cur->f.interlaced_frame = FIELD_OR_MBAFF_PICTURE(h);
|
||||
}
|
||||
h->prev_interlaced_frame = cur->f.interlaced_frame;
|
||||
|
||||
@ -3448,13 +3448,13 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
|
||||
h->cur_pic_ptr->frame_num = h->frame_num; // FIXME frame_num cleanup
|
||||
|
||||
assert(h->mb_num == h->mb_width * h->mb_height);
|
||||
if (first_mb_in_slice << FIELD_OR_MBAFF_PICTURE >= h->mb_num ||
|
||||
if (first_mb_in_slice << FIELD_OR_MBAFF_PICTURE(h) >= h->mb_num ||
|
||||
first_mb_in_slice >= h->mb_num) {
|
||||
av_log(h->avctx, AV_LOG_ERROR, "first_mb_in_slice overflow\n");
|
||||
return -1;
|
||||
}
|
||||
h->resync_mb_x = h->mb_x = first_mb_in_slice % h->mb_width;
|
||||
h->resync_mb_y = h->mb_y = (first_mb_in_slice / h->mb_width) << FIELD_OR_MBAFF_PICTURE;
|
||||
h->resync_mb_y = h->mb_y = (first_mb_in_slice / h->mb_width) << FIELD_OR_MBAFF_PICTURE(h);
|
||||
if (h->picture_structure == PICT_BOTTOM_FIELD)
|
||||
h->resync_mb_y = h->mb_y = h->mb_y + 1;
|
||||
assert(h->mb_y < h->mb_height);
|
||||
@ -4163,7 +4163,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
|
||||
h->mb_x = lf_x_start = 0;
|
||||
decode_finish_row(h);
|
||||
++h->mb_y;
|
||||
if (FIELD_OR_MBAFF_PICTURE) {
|
||||
if (FIELD_OR_MBAFF_PICTURE(h)) {
|
||||
++h->mb_y;
|
||||
if (FRAME_MBAFF(h) && h->mb_y < h->mb_height)
|
||||
predict_field_decoding_flag(h);
|
||||
@ -4210,7 +4210,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
|
||||
h->mb_x = lf_x_start = 0;
|
||||
decode_finish_row(h);
|
||||
++h->mb_y;
|
||||
if (FIELD_OR_MBAFF_PICTURE) {
|
||||
if (FIELD_OR_MBAFF_PICTURE(h)) {
|
||||
++h->mb_y;
|
||||
if (FRAME_MBAFF(h) && h->mb_y < h->mb_height)
|
||||
predict_field_decoding_flag(h);
|
||||
|
@ -79,7 +79,7 @@
|
||||
#define LBOT 0
|
||||
#define LEFT(i) 0
|
||||
#endif
|
||||
#define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF(h) || FIELD_PICTURE(h))
|
||||
#define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
|
||||
|
||||
#ifndef CABAC
|
||||
#define CABAC h->pps.cabac
|
||||
|
@ -324,7 +324,7 @@ static int vaapi_h264_decode_slice(AVCodecContext *avctx,
|
||||
if (!slice_param)
|
||||
return -1;
|
||||
slice_param->slice_data_bit_offset = get_bits_count(&h->gb) + 8; /* bit buffer started beyond nal_unit_type */
|
||||
slice_param->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE) * h->mb_width + h->mb_x;
|
||||
slice_param->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE(h)) * h->mb_width + h->mb_x;
|
||||
slice_param->slice_type = ff_h264_get_slice_type(h);
|
||||
slice_param->direct_spatial_mv_pred_flag = h->slice_type == AV_PICTURE_TYPE_B ? h->direct_spatial_mv_pred : 0;
|
||||
slice_param->num_ref_idx_l0_active_minus1 = h->list_count > 0 ? h->ref_count[0] - 1 : 0;
|
||||
|
Loading…
Reference in New Issue
Block a user