mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2025-03-03 01:35:49 +00:00
Merge commit 'ee62b364be0c30cba83b5ff10a3ca8c3e866ade6'
* commit 'ee62b364be0c30cba83b5ff10a3ca8c3e866ade6': h264: eliminate ff_h264_set_parameter_from_sps() Conflicts: libavcodec/h264.c libavcodec/h264.h libavcodec/h264_slice.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
ab7ad5e6a1
@ -1206,54 +1206,6 @@ int ff_h264_get_profile(SPS *sps)
|
||||
return profile;
|
||||
}
|
||||
|
||||
int ff_h264_set_parameter_from_sps(H264Context *h)
|
||||
{
|
||||
if (h->flags & CODEC_FLAG_LOW_DELAY ||
|
||||
(h->sps.bitstream_restriction_flag &&
|
||||
!h->sps.num_reorder_frames)) {
|
||||
if (h->avctx->has_b_frames > 1 || h->delayed_pic[0])
|
||||
av_log(h->avctx, AV_LOG_WARNING, "Delayed frames seen. "
|
||||
"Reenabling low delay requires a codec flush.\n");
|
||||
else
|
||||
h->low_delay = 1;
|
||||
}
|
||||
|
||||
if (h->avctx->has_b_frames < 2)
|
||||
h->avctx->has_b_frames = !h->low_delay;
|
||||
|
||||
if (h->cur_bit_depth_luma != h->sps.bit_depth_luma ||
|
||||
h->cur_chroma_format_idc != h->sps.chroma_format_idc) {
|
||||
if (h->avctx->codec &&
|
||||
h->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU &&
|
||||
(h->sps.bit_depth_luma != 8 || h->sps.chroma_format_idc > 1)) {
|
||||
av_log(h->avctx, AV_LOG_ERROR,
|
||||
"VDPAU decoding does not support video colorspace.\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 14 &&
|
||||
h->sps.bit_depth_luma != 11 && h->sps.bit_depth_luma != 13) {
|
||||
h->cur_bit_depth_luma =
|
||||
h->avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
|
||||
h->cur_chroma_format_idc = h->sps.chroma_format_idc;
|
||||
h->pixel_shift = h->sps.bit_depth_luma > 8;
|
||||
|
||||
ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma,
|
||||
h->sps.chroma_format_idc);
|
||||
ff_h264chroma_init(&h->h264chroma, h->sps.bit_depth_chroma);
|
||||
ff_h264qpel_init(&h->h264qpel, h->sps.bit_depth_luma);
|
||||
ff_h264_pred_init(&h->hpc, h->avctx->codec_id, h->sps.bit_depth_luma,
|
||||
h->sps.chroma_format_idc);
|
||||
|
||||
ff_videodsp_init(&h->vdsp, h->sps.bit_depth_luma);
|
||||
} else {
|
||||
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth %d\n",
|
||||
h->sps.bit_depth_luma);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ff_set_ref_count(H264Context *h, H264SliceContext *sl)
|
||||
{
|
||||
int ref_count[2], list_count;
|
||||
|
@ -1168,7 +1168,6 @@ int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src);
|
||||
void ff_h264_unref_picture(H264Context *h, H264Picture *pic);
|
||||
|
||||
int ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl);
|
||||
int ff_h264_set_parameter_from_sps(H264Context *h);
|
||||
|
||||
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height);
|
||||
int ff_init_poc(H264Context *h, int pic_field_poc[2], int *pic_poc);
|
||||
|
@ -611,8 +611,6 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
|
||||
|
||||
/* copy block_offset since frame_start may not be called */
|
||||
memcpy(h->block_offset, h1->block_offset, sizeof(h->block_offset));
|
||||
|
||||
ff_h264_set_parameter_from_sps(h);
|
||||
}
|
||||
|
||||
if (!h->cur_pic_ptr)
|
||||
@ -1103,6 +1101,37 @@ static int h264_slice_header_init(H264Context *h, int reinit)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (h->avctx->codec &&
|
||||
h->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU &&
|
||||
(h->sps.bit_depth_luma != 8 || h->sps.chroma_format_idc > 1)) {
|
||||
av_log(h->avctx, AV_LOG_ERROR,
|
||||
"VDPAU decoding does not support video colorspace.\n");
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (h->sps.bit_depth_luma < 8 || h->sps.bit_depth_luma > 14 ||
|
||||
h->sps.bit_depth_luma == 11 || h->sps.bit_depth_luma == 13
|
||||
) {
|
||||
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth %d\n",
|
||||
h->sps.bit_depth_luma);
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
h->cur_bit_depth_luma =
|
||||
h->avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
|
||||
h->cur_chroma_format_idc = h->sps.chroma_format_idc;
|
||||
h->pixel_shift = h->sps.bit_depth_luma > 8;
|
||||
|
||||
ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma,
|
||||
h->sps.chroma_format_idc);
|
||||
ff_h264chroma_init(&h->h264chroma, h->sps.bit_depth_chroma);
|
||||
ff_h264qpel_init(&h->h264qpel, h->sps.bit_depth_luma);
|
||||
ff_h264_pred_init(&h->hpc, h->avctx->codec_id, h->sps.bit_depth_luma,
|
||||
h->sps.chroma_format_idc);
|
||||
ff_videodsp_init(&h->vdsp, h->sps.bit_depth_luma);
|
||||
|
||||
if (nb_slices > H264_MAX_THREADS || (nb_slices > h->mb_height && h->mb_height)) {
|
||||
int max_slices;
|
||||
if (h->mb_height)
|
||||
@ -1300,8 +1329,20 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl)
|
||||
h->chroma_format_idc = h->sps.chroma_format_idc;
|
||||
needs_reinit = 1;
|
||||
}
|
||||
if ((ret = ff_h264_set_parameter_from_sps(h)) < 0)
|
||||
return ret;
|
||||
|
||||
if (h->flags & CODEC_FLAG_LOW_DELAY ||
|
||||
(h->sps.bitstream_restriction_flag &&
|
||||
!h->sps.num_reorder_frames)) {
|
||||
if (h->avctx->has_b_frames > 1 || h->delayed_pic[0])
|
||||
av_log(h->avctx, AV_LOG_WARNING, "Delayed frames seen. "
|
||||
"Reenabling low delay requires a codec flush.\n");
|
||||
else
|
||||
h->low_delay = 1;
|
||||
}
|
||||
|
||||
if (h->avctx->has_b_frames < 2)
|
||||
h->avctx->has_b_frames = !h->low_delay;
|
||||
|
||||
}
|
||||
|
||||
h->avctx->profile = ff_h264_get_profile(&h->sps);
|
||||
|
Loading…
x
Reference in New Issue
Block a user