else
state >>= 1; // 2->1, 1->0, 0->0
} else if (state <= 5) {
- int v = buf[i] & 0x1F;
- if (v == 6 || v == 7 || v == 8 || v == 9) {
+ int nalu_type = buf[i] & 0x1F;
+ if (nalu_type == NAL_SEI || nalu_type == NAL_SPS ||
+ nalu_type == NAL_PPS || nalu_type == NAL_AUD) {
if (pc->frame_start_found) {
i++;
goto found;
}
- } else if (v == 1 || v == 2 || v == 5) {
+ } else if (nalu_type == NAL_SLICE || nalu_type == NAL_DPA ||
+ nalu_type == NAL_IDR_SLICE) {
if (pc->frame_start_found) {
state += 8;
continue;
break;
if (index >= h->ref_count[list]) {
- av_log(h->avctx, AV_LOG_ERROR, "reference count overflow\n");
+ av_log(h->avctx, AV_LOG_ERROR,
+ "reference count %d overflow\n", index);
return AVERROR_INVALIDDATA;
}
}
s->key_frame = 0;
s->picture_structure = AV_PICTURE_STRUCTURE_UNKNOWN;
- h->avctx = avctx;
- h->sei_recovery_frame_cnt = -1;
- h->sei_dpb_output_delay = 0;
- h->sei_cpb_removal_delay = -1;
- h->sei_buffering_period_present = 0;
+ h->avctx = avctx;
+ ff_h264_reset_sei(h);
if (!buf_size)
return 0;
case NAL_SLICE:
case NAL_IDR_SLICE:
// Do not walk the whole buffer just to decode slice header
- if (state & 0x1f == NAL_IDR_SLICE || (state >> 5) & 0x3 == 0) {
+ if ((state & 0x1f) == NAL_IDR_SLICE || ((state >> 5) & 0x3) == 0) {
/* IDR or disposable slice
* No need to decode many bytes because MMCOs shall not be present. */
if (src_length > 60)
pps_id = get_ue_golomb(&h->gb);
if (pps_id >= MAX_PPS_COUNT) {
av_log(h->avctx, AV_LOG_ERROR,
- "pps_id out of range\n");
+ "pps_id %u out of range\n", pps_id);
return -1;
}
if (!h->pps_buffers[pps_id]) {
av_log(h->avctx, AV_LOG_ERROR,
- "non-existing PPS referenced\n");
+ "non-existing PPS %u referenced\n", pps_id);
return -1;
}
h->pps = *h->pps_buffers[pps_id];
if (!h->sps_buffers[h->pps.sps_id]) {
av_log(h->avctx, AV_LOG_ERROR,
- "non-existing SPS referenced\n");
+ "non-existing SPS %u referenced\n", h->pps.sps_id);
return -1;
}
h->sps = *h->sps_buffers[h->pps.sps_id];