Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Sep 2012 13:30:24 +0000 (15:30 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Sep 2012 13:30:34 +0000 (15:30 +0200)
* qatar/master:
  rv34: use ff_MPV_common_frame_size_change()
  mpegvideo: add reinit function for frame parameter changes

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/mpegvideo.c
libavcodec/mpegvideo.h
libavcodec/rv34.c

@@@ -1144,23 -1256,23 +1225,37 @@@ static int find_unused_picture(MpegEncC
          }
      }
  
 -    return AVERROR_INVALIDDATA;
 +    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 ff_find_unused_picture(MpegEncContext *s, int shared)
+ {
+     int ret = find_unused_picture(s, shared);
+     if (ret >= 0 && ret < s->picture_range_end) {
+         if (s->picture[ret].needs_realloc) {
+             s->picture[ret].needs_realloc = 0;
+             free_picture(s, &s->picture[ret]);
+             avcodec_get_frame_defaults(&s->picture[ret].f);
+         }
+     }
+     return ret;
+ }
  static void update_noise_reduction(MpegEncContext *s)
  {
      int intra, i;
Simple merge
Simple merge