Index: libavcodec/mpegvideo.c =================================================================== --- libavcodec/mpegvideo.c (revision 14767) +++ libavcodec/mpegvideo.c (working copy) @@ -779,19 +779,15 @@ } av_log(s->avctx, AV_LOG_FATAL, "Internal error, picture buffer overflow\n"); - /* We could return -1, but the codec would crash trying to draw into a - * non-existing frame anyway. This is safer than waiting for a random crash. - * Also the return of this is never useful, an encoder must only allocate - * as much as allowed in the specification. This has no relationship to how - * much libavcodec could allocate (and MAX_PICTURE_COUNT is always large - * enough for such valid streams). - * Plus, a decoder has to check stream validity and remove frames if too - * many reference frames are around. Waiting for "OOM" is not correct at - * all. Similarly, missing reference frames have to be replaced by - * interpolated/MC frames, anything else is a bug in the codec ... - */ - abort(); - return -1; + int oldest=0; + for(i=0; iavctx, AV_LOG_FATAL, "pic %d num %d ref %d\n", + i, s->picture[i].coded_picture_number, s->picture[i].reference); + if (s->picture[i].coded_picture_number < s->picture[oldest].coded_picture_number) + oldest = i; + } + s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[oldest]); + return oldest; } static void update_noise_reduction(MpegEncContext *s){