Merge commit '36d04801ba9d8622c2d759c172aea18561bac74d'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 17:47:19 +0000 (18:47 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 17:50:53 +0000 (18:50 +0100)
* commit '36d04801ba9d8622c2d759c172aea18561bac74d':
  h264: move the scratch buffers into the per-slice context

Conflicts:
libavcodec/h264.h
libavcodec/h264_slice.c
libavcodec/svq3.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_mb.c
libavcodec/h264_slice.c
libavcodec/svq3.c

Simple merge
@@@ -763,14 -713,6 +768,11 @@@ typedef struct H264Context 
      int initial_cpb_removal_delay[32];  ///< Initial timestamps for CPBs
  
      int cur_chroma_format_idc;
-     uint8_t *bipred_scratchpad;
 +    int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
 +
 +    uint8_t parse_history[6];
 +    int parse_history_count;
 +    int parse_last_mb;
-     uint8_t *edge_emu_buffer;
      int16_t *dc_val_base;
  
      AVBufferPool *qscale_table_pool;
@@@ -305,17 -305,17 +305,17 @@@ static av_always_inline void mc_dir_par
      }
      chroma_op(dest_cb, src_cb, sl->mb_uvlinesize,
                height >> (chroma_idc == 1 /* yuv420 */),
 -              mx & 7, (my << (chroma_idc == 2 /* yuv422 */)) & 7);
 +              mx & 7, ((unsigned)my << (chroma_idc == 2 /* yuv422 */)) & 7);
  
      if (emu) {
-         h->vdsp.emulated_edge_mc(h->edge_emu_buffer, src_cr,
+         h->vdsp.emulated_edge_mc(sl->edge_emu_buffer, src_cr,
                                   sl->mb_uvlinesize, sl->mb_uvlinesize,
                                   9, 8 * chroma_idc + 1, (mx >> 3), (my >> ysh),
                                   pic_width >> 1, pic_height >> (chroma_idc == 1 /* yuv420 */));
-         src_cr = h->edge_emu_buffer;
+         src_cr = sl->edge_emu_buffer;
      }
      chroma_op(dest_cr, src_cr, sl->mb_uvlinesize, height >> (chroma_idc == 1 /* yuv420 */),
 -              mx & 7, (my << (chroma_idc == 2 /* yuv422 */)) & 7);
 +              mx & 7, ((unsigned)my << (chroma_idc == 2 /* yuv422 */)) & 7);
  }
  
  static av_always_inline void mc_part_std(const H264Context *h, H264SliceContext *sl,
@@@ -585,13 -522,13 +580,11 @@@ int ff_h264_update_thread_context(AVCod
              av_log(dst, AV_LOG_ERROR, "context_init() failed.\n");
              return ret;
          }
 +        }
  
-         h->bipred_scratchpad = NULL;
-         h->edge_emu_buffer   = NULL;
 -        h->rbsp_buffer      = NULL;
 -        h->rbsp_buffer_size = 0;
  
          h->thread_context[0] = h;
 -
 -        h->context_initialized = 1;
 +        h->context_initialized = h1->context_initialized;
      }
  
      h->avctx->coded_height  = h1->avctx->coded_height;
@@@ -1736,18 -1525,9 +1729,10 @@@ int ff_h264_decode_slice_header(H264Con
      if (h != h0 && (ret = clone_slice(h, h0)) < 0)
          return ret;
  
-     /* can't be in alloc_tables because linesize isn't known there.
-      * FIXME: redo bipred weight to not require extra buffer? */
-     for (i = 0; i < h->slice_context_count; i++)
-         if (h->thread_context[i]) {
-             ret = alloc_scratch_buffers(h->thread_context[i], h->linesize);
-             if (ret < 0)
-                 return ret;
-         }
 +
      h->cur_pic_ptr->frame_num = h->frame_num; // FIXME frame_num cleanup
  
 -    assert(h->mb_num == h->mb_width * h->mb_height);
 +    av_assert1(h->mb_num == h->mb_width * h->mb_height);
      if (first_mb_in_slice << FIELD_OR_MBAFF_PICTURE(h) >= h->mb_num ||
          first_mb_in_slice >= h->mb_num) {
          av_log(h->avctx, AV_LOG_ERROR, "first_mb_in_slice overflow\n");
@@@ -1115,9 -1095,9 +1117,9 @@@ static int get_buffer(AVCodecContext *a
      if (ret < 0)
          goto fail;
  
-     if (!h->edge_emu_buffer) {
-         h->edge_emu_buffer = av_mallocz_array(pic->f.linesize[0], 17);
-         if (!h->edge_emu_buffer)
+     if (!sl->edge_emu_buffer) {
 -        sl->edge_emu_buffer = av_mallocz(pic->f.linesize[0] * 17);
++        sl->edge_emu_buffer = av_mallocz_array(pic->f.linesize[0], 17);
+         if (!sl->edge_emu_buffer)
              return AVERROR(ENOMEM);
      }
  
@@@ -1371,10 -1326,6 +1373,9 @@@ static av_cold int svq3_decode_end(AVCo
  
      ff_h264_free_context(h);
  
-     av_freep(&h->edge_emu_buffer);
 +    av_freep(&s->buf);
 +    s->buf_size = 0;
 +
      return 0;
  }