h264: make H264ParamSets sps const

This commit is contained in:
Benoit Fouet 2016-06-21 14:17:13 +02:00
parent 4cc1ce4a91
commit 879330c561
5 changed files with 8 additions and 9 deletions

View File

@ -234,8 +234,7 @@ typedef struct H264ParamSets {
AVBufferRef *sps_ref; AVBufferRef *sps_ref;
/* currently active parameters sets */ /* currently active parameters sets */
const PPS *pps; const PPS *pps;
// FIXME this should properly be const const SPS *sps;
SPS *sps;
} H264ParamSets; } H264ParamSets;
/** /**

View File

@ -373,7 +373,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
"non-existing SPS %u referenced\n", p->ps.pps->sps_id); "non-existing SPS %u referenced\n", p->ps.pps->sps_id);
goto fail; goto fail;
} }
p->ps.sps = (SPS*)p->ps.sps_list[p->ps.pps->sps_id]->data; p->ps.sps = (const SPS*)p->ps.sps_list[p->ps.pps->sps_id]->data;
sps = p->ps.sps; sps = p->ps.sps;

View File

@ -712,7 +712,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct
H264ParamSets *ps, int bit_length) H264ParamSets *ps, int bit_length)
{ {
AVBufferRef *pps_buf; AVBufferRef *pps_buf;
SPS *sps; const SPS *sps;
unsigned int pps_id = get_ue_golomb(gb); unsigned int pps_id = get_ue_golomb(gb);
PPS *pps; PPS *pps;
int qp_bd_offset; int qp_bd_offset;
@ -743,7 +743,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct
ret = AVERROR_INVALIDDATA; ret = AVERROR_INVALIDDATA;
goto fail; goto fail;
} }
sps = (SPS*)ps->sps_list[pps->sps_id]->data; sps = (const SPS*)ps->sps_list[pps->sps_id]->data;
if (sps->bit_depth_luma > 14) { if (sps->bit_depth_luma > 14) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"Invalid luma bit depth=%d\n", "Invalid luma bit depth=%d\n",

View File

@ -278,7 +278,7 @@ static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb,
{ {
unsigned int sps_id; unsigned int sps_id;
int sched_sel_idx; int sched_sel_idx;
SPS *sps; const SPS *sps;
sps_id = get_ue_golomb_31(gb); sps_id = get_ue_golomb_31(gb);
if (sps_id > 31 || !ps->sps_list[sps_id]) { if (sps_id > 31 || !ps->sps_list[sps_id]) {
@ -286,7 +286,7 @@ static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb,
"non-existing SPS %d referenced in buffering period\n", sps_id); "non-existing SPS %d referenced in buffering period\n", sps_id);
return sps_id > 31 ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND; return sps_id > 31 ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND;
} }
sps = (SPS*)ps->sps_list[sps_id]->data; sps = (const SPS*)ps->sps_list[sps_id]->data;
// NOTE: This is really so duplicated in the standard... See H.264, D.1.1 // NOTE: This is really so duplicated in the standard... See H.264, D.1.1
if (sps->nal_hrd_parameters_present_flag) { if (sps->nal_hrd_parameters_present_flag) {

View File

@ -356,7 +356,7 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
h->ps.sps_ref = av_buffer_ref(h1->ps.sps_ref); h->ps.sps_ref = av_buffer_ref(h1->ps.sps_ref);
if (!h->ps.sps_ref) if (!h->ps.sps_ref)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
h->ps.sps = (SPS*)h->ps.sps_ref->data; h->ps.sps = (const SPS*)h->ps.sps_ref->data;
} }
if (need_reinit || !inited) { if (need_reinit || !inited) {
@ -873,7 +873,7 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
/* export coded and cropped frame dimensions to AVCodecContext */ /* export coded and cropped frame dimensions to AVCodecContext */
static int init_dimensions(H264Context *h) static int init_dimensions(H264Context *h)
{ {
SPS *sps = h->ps.sps; const SPS *sps = (const SPS*)h->ps.sps;
int width = h->width - (sps->crop_right + sps->crop_left); int width = h->width - (sps->crop_right + sps->crop_left);
int height = h->height - (sps->crop_top + sps->crop_bottom); int height = h->height - (sps->crop_top + sps->crop_bottom);
av_assert0(sps->crop_right + sps->crop_left < (unsigned)h->width); av_assert0(sps->crop_right + sps->crop_left < (unsigned)h->width);