mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-04 02:10:01 +02:00
h264: move redundant_pic_count into the per-slice context
This commit is contained in:
parent
a9b201cacf
commit
9951907f6f
@ -277,7 +277,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice,
|
|||||||
}
|
}
|
||||||
slice->slice_qs_delta = 0; /* XXX not implemented by Libav */
|
slice->slice_qs_delta = 0; /* XXX not implemented by Libav */
|
||||||
slice->slice_qp_delta = sl->qscale - h->pps.init_qp;
|
slice->slice_qp_delta = sl->qscale - h->pps.init_qp;
|
||||||
slice->redundant_pic_cnt = h->redundant_pic_count;
|
slice->redundant_pic_cnt = sl->redundant_pic_count;
|
||||||
if (sl->slice_type == AV_PICTURE_TYPE_B)
|
if (sl->slice_type == AV_PICTURE_TYPE_B)
|
||||||
slice->direct_spatial_mv_pred_flag = sl->direct_spatial_mv_pred;
|
slice->direct_spatial_mv_pred_flag = sl->direct_spatial_mv_pred;
|
||||||
slice->cabac_init_idc = h->pps.cabac ? sl->cabac_init_idc : 0;
|
slice->cabac_init_idc = h->pps.cabac ? sl->cabac_init_idc : 0;
|
||||||
|
@ -1570,7 +1570,7 @@ again:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hx->redundant_pic_count == 0 &&
|
if (sl->redundant_pic_count == 0 &&
|
||||||
(avctx->skip_frame < AVDISCARD_NONREF ||
|
(avctx->skip_frame < AVDISCARD_NONREF ||
|
||||||
hx->nal_ref_idc) &&
|
hx->nal_ref_idc) &&
|
||||||
(avctx->skip_frame < AVDISCARD_BIDIR ||
|
(avctx->skip_frame < AVDISCARD_BIDIR ||
|
||||||
|
@ -356,6 +356,8 @@ typedef struct H264SliceContext {
|
|||||||
ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
|
ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
|
||||||
ptrdiff_t mb_uvlinesize;
|
ptrdiff_t mb_uvlinesize;
|
||||||
|
|
||||||
|
int redundant_pic_count;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* number of neighbors (top and/or left) that used 8x8 dct
|
* number of neighbors (top and/or left) that used 8x8 dct
|
||||||
*/
|
*/
|
||||||
@ -577,8 +579,6 @@ typedef struct H264Context {
|
|||||||
*/
|
*/
|
||||||
int max_pic_num;
|
int max_pic_num;
|
||||||
|
|
||||||
int redundant_pic_count;
|
|
||||||
|
|
||||||
H264Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
|
H264Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
|
||||||
H264Picture *short_ref[32];
|
H264Picture *short_ref[32];
|
||||||
H264Picture *long_ref[32];
|
H264Picture *long_ref[32];
|
||||||
|
@ -605,7 +605,7 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
|
|||||||
h->dequant_coeff_pps = h1->dequant_coeff_pps;
|
h->dequant_coeff_pps = h1->dequant_coeff_pps;
|
||||||
|
|
||||||
// POC timing
|
// POC timing
|
||||||
copy_fields(h, h1, poc_lsb, redundant_pic_count);
|
copy_fields(h, h1, poc_lsb, default_ref_list);
|
||||||
|
|
||||||
// reference lists
|
// reference lists
|
||||||
copy_fields(h, h1, short_ref, thread_context);
|
copy_fields(h, h1, short_ref, thread_context);
|
||||||
@ -1591,7 +1591,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
|
|||||||
ff_init_poc(h, h->cur_pic_ptr->field_poc, &h->cur_pic_ptr->poc);
|
ff_init_poc(h, h->cur_pic_ptr->field_poc, &h->cur_pic_ptr->poc);
|
||||||
|
|
||||||
if (h->pps.redundant_pic_cnt_present)
|
if (h->pps.redundant_pic_cnt_present)
|
||||||
h->redundant_pic_count = get_ue_golomb(&h->gb);
|
sl->redundant_pic_count = get_ue_golomb(&h->gb);
|
||||||
|
|
||||||
ret = ff_set_ref_count(h, sl);
|
ret = ff_set_ref_count(h, sl);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user