Merge commit '4e17946f10d39eec6cc03fb249ae8147373141b6'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 22 May 2015 19:25:57 +0000 (21:25 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 22 May 2015 20:39:47 +0000 (22:39 +0200)
* commit '4e17946f10d39eec6cc03fb249ae8147373141b6':
  mpegvideo: Rework various functions not to use MpegEncContext directly

Conflicts:
libavcodec/mpegvideo.c

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

Simple merge
@@@ -1694,7 -1632,7 +1692,7 @@@ static inline int pic_is_unused(Pictur
      return 0;
  }
  
- static int find_unused_picture(MpegEncContext *s, int shared)
 -static int find_unused_picture(Picture *picture, int shared)
++static int find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
  {
      int i;
  
          }
      }
  
-     av_log(s->avctx, AV_LOG_FATAL,
 -    return AVERROR_INVALIDDATA;
++    av_log(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 ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
  {
-     int ret = find_unused_picture(s, shared);
 -    int ret = find_unused_picture(picture, shared);
++    int ret = find_unused_picture(avctx, picture, shared);
  
      if (ret >= 0 && ret < MAX_PICTURE_COUNT) {
-         if (s->picture[ret].needs_realloc) {
-             s->picture[ret].needs_realloc = 0;
-             ff_free_picture_tables(&s->picture[ret]);
-             ff_mpeg_unref_picture(s->avctx, &s->picture[ret]);
+         if (picture[ret].needs_realloc) {
+             picture[ret].needs_realloc = 0;
+             ff_free_picture_tables(&picture[ret]);
+             ff_mpeg_unref_picture(avctx, &picture[ret]);
          }
      }
      return ret;
@@@ -770,17 -740,10 +770,18 @@@ int ff_mpv_encode_picture(AVCodecContex
  void ff_clean_intra_table_entries(MpegEncContext *s);
  void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h);
  void ff_mpeg_flush(AVCodecContext *avctx);
 -void ff_print_debug_info(MpegEncContext *s, Picture *p);
 +
 +void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict);
 +void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table,
 +                         uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2],
 +                         int *low_delay,
 +                         int mb_width, int mb_height, int mb_stride, int quarter_sample);
 +
 +int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type);
 +
  void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
- int ff_find_unused_picture(MpegEncContext *s, int shared);
+ int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared);
  int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
  int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src);
  void ff_set_qscale(MpegEncContext * s, int qscale);
@@@ -1123,15 -990,11 +1123,15 @@@ static int load_input_picture(MpegEncCo
              direct = 0;
          if ((s->width & 15) || (s->height & 15))
              direct = 0;
 +        if (((intptr_t)(pic_arg->data[0])) & (STRIDE_ALIGN-1))
 +            direct = 0;
 +        if (s->linesize & (STRIDE_ALIGN-1))
 +            direct = 0;
  
 -        ff_dlog(s->avctx, "%d %d %td %td\n", pic_arg->linesize[0],
 +        ff_dlog(s->avctx, "%d %d %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"\n", pic_arg->linesize[0],
                  pic_arg->linesize[1], s->linesize, s->uvlinesize);
  
-         i = ff_find_unused_picture(s, direct);
+         i = ff_find_unused_picture(s->avctx, s->picture, direct);
          if (i < 0)
              return i;