|
|
|
@ -1467,7 +1467,8 @@ int ff_h264_decode_extradata(H264Context *h) |
|
|
|
|
h->is_avc = 1; |
|
|
|
|
|
|
|
|
|
if (avctx->extradata_size < 7) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "avcC too short\n"); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, |
|
|
|
|
"avcC %d too short\n", avctx->extradata_size); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
/* sps and pps in the avcC always have length coded with 2 bytes,
|
|
|
|
@ -1734,7 +1735,7 @@ static int decode_update_thread_context(AVCodecContext *dst, |
|
|
|
|
|
|
|
|
|
ret = ff_h264_alloc_tables(h); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_log(dst, AV_LOG_ERROR, "Could not allocate memory for h264\n"); |
|
|
|
|
av_log(dst, AV_LOG_ERROR, "Could not allocate memory\n"); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
ret = context_init(h); |
|
|
|
@ -3072,7 +3073,7 @@ static int h264_set_parameter_from_sps(H264Context *h) |
|
|
|
|
ff_dsputil_init(&h->dsp, h->avctx); |
|
|
|
|
ff_videodsp_init(&h->vdsp, h->sps.bit_depth_luma); |
|
|
|
|
} else { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth: %d\n", |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth %d\n", |
|
|
|
|
h->sps.bit_depth_luma); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
@ -3125,7 +3126,7 @@ static enum AVPixelFormat get_pixel_format(H264Context *h) |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"Unsupported bit depth: %d\n", h->sps.bit_depth_luma); |
|
|
|
|
"Unsupported bit depth %d\n", h->sps.bit_depth_luma); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -3196,8 +3197,7 @@ static int h264_slice_header_init(H264Context *h, int reinit) |
|
|
|
|
init_scan_tables(h); |
|
|
|
|
ret = ff_h264_alloc_tables(h); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"Could not allocate memory for h264\n"); |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "Could not allocate memory\n"); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3207,7 +3207,7 @@ static int h264_slice_header_init(H264Context *h, int reinit) |
|
|
|
|
max_slices = FFMIN(MAX_THREADS, h->mb_height); |
|
|
|
|
else |
|
|
|
|
max_slices = MAX_THREADS; |
|
|
|
|
av_log(h->avctx, AV_LOG_WARNING, "too many threads/slices (%d)," |
|
|
|
|
av_log(h->avctx, AV_LOG_WARNING, "too many threads/slices %d," |
|
|
|
|
" reducing to %d\n", nb_slices, max_slices); |
|
|
|
|
nb_slices = max_slices; |
|
|
|
|
} |
|
|
|
@ -3367,7 +3367,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
slice_type = get_ue_golomb_31(&h->gb); |
|
|
|
|
if (slice_type > 9) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"slice type too large (%d) at %d %d\n", |
|
|
|
|
"slice type %d too large at %d %d\n", |
|
|
|
|
h->slice_type, h->mb_x, h->mb_y); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
@ -3396,7 +3396,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
|
|
|
|
|
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"); |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
if (!h0->pps_buffers[pps_id]) { |
|
|
|
@ -3547,7 +3547,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} else if (!h0->cur_pic_ptr) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"unset cur_pic_ptr on %d. slice\n", |
|
|
|
|
"unset cur_pic_ptr on slice %d\n", |
|
|
|
|
h0->current_slice + 1); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
@ -3814,7 +3814,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
if (h->slice_type_nos != AV_PICTURE_TYPE_I && h->pps.cabac) { |
|
|
|
|
tmp = get_ue_golomb_31(&h->gb); |
|
|
|
|
if (tmp > 2) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "cabac_init_idc overflow\n"); |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "cabac_init_idc %u overflow\n", tmp); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
h->cabac_init_idc = tmp; |
|
|
|
@ -4386,7 +4386,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
} |
|
|
|
|
if (ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"error while decoding MB %d %d, bytestream (%td)\n", |
|
|
|
|
"error while decoding MB %d %d, bytestream %td\n", |
|
|
|
|
h->mb_x, h->mb_y, |
|
|
|
|
h->cabac.bytestream_end - h->cabac.bytestream); |
|
|
|
|
er_add_slice(h, h->resync_mb_x, h->resync_mb_y, h->mb_x, |
|
|
|
|