|
|
@ -621,15 +621,17 @@ int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (h->long_ref_count + h->short_ref_count > h->sps.ref_frame_count){ |
|
|
|
if (h->long_ref_count + h->short_ref_count - |
|
|
|
|
|
|
|
(h->short_ref[0] == s->current_picture_ptr) > h->sps.ref_frame_count){ |
|
|
|
|
|
|
|
|
|
|
|
/* We have too many reference frames, probably due to corrupted
|
|
|
|
/* We have too many reference frames, probably due to corrupted
|
|
|
|
* stream. Need to discard one frame. Prevents overrun of the |
|
|
|
* stream. Need to discard one frame. Prevents overrun of the |
|
|
|
* short_ref and long_ref buffers. |
|
|
|
* short_ref and long_ref buffers. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
av_log(h->s.avctx, AV_LOG_ERROR, |
|
|
|
av_log(h->s.avctx, AV_LOG_ERROR, |
|
|
|
"number of reference frames exceeds max (probably " |
|
|
|
"number of reference frames (%d+%d) exceeds max (%d; probably " |
|
|
|
"corrupt input), discarding one\n"); |
|
|
|
"corrupt input), discarding one\n", |
|
|
|
|
|
|
|
h->long_ref_count, h->short_ref_count, h->sps.ref_frame_count); |
|
|
|
|
|
|
|
|
|
|
|
if (h->long_ref_count && !h->short_ref_count) { |
|
|
|
if (h->long_ref_count && !h->short_ref_count) { |
|
|
|
for (i = 0; i < 16; ++i) |
|
|
|
for (i = 0; i < 16; ++i) |
|
|
|