Merge commit '0edbe6faa7ef80daf0e84353cbe733389bf1a522'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 15:18:29 +0000 (16:18 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 15:18:29 +0000 (16:18 +0100)
* commit '0edbe6faa7ef80daf0e84353cbe733389bf1a522':
  h264: move mb_xy into the per-slice context

Conflicts:
libavcodec/h264.c
libavcodec/h264_cabac.c
libavcodec/svq3.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
12 files changed:
1  2 
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_cabac.c
libavcodec/h264_cavlc.c
libavcodec/h264_direct.c
libavcodec/h264_loopfilter.c
libavcodec/h264_mb.c
libavcodec/h264_mb_template.c
libavcodec/h264_mc_template.c
libavcodec/h264_mvpred.h
libavcodec/h264_slice.c
libavcodec/svq3.c

@@@ -68,24 -60,16 +68,24 @@@ static void h264_er_decode_mb(void *opa
  
      h->mb_x  = mb_x;
      h->mb_y  = mb_y;
-     h->mb_xy = mb_x + mb_y * h->mb_stride;
+     sl->mb_xy = mb_x + mb_y * h->mb_stride;
      memset(sl->non_zero_count_cache, 0, sizeof(sl->non_zero_count_cache));
 -    assert(ref >= 0);
 +    av_assert1(ref >= 0);
      /* FIXME: It is possible albeit uncommon that slice references
       * differ between slices. We take the easy approach and ignore
       * it for now. If this turns out to have any relevance in
       * practice then correct remapping should be added. */
      if (ref >= sl->ref_count[0])
          ref = 0;
-     fill_rectangle(&h->cur_pic.ref_index[0][4 * h->mb_xy],
 +    if (!sl->ref_list[0][ref].f.data[0]) {
 +        av_log(h->avctx, AV_LOG_DEBUG, "Reference not available for error concealing\n");
 +        ref = 0;
 +    }
 +    if ((sl->ref_list[0][ref].reference&3) != 3) {
 +        av_log(h->avctx, AV_LOG_DEBUG, "Reference invalid\n");
 +        return;
 +    }
+     fill_rectangle(&h->cur_pic.ref_index[0][4 * sl->mb_xy],
                     2, 2, 2, ref, 1);
      fill_rectangle(&sl->ref_cache[0][scan8[0]], 4, 4, 8, ref, 1);
      fill_rectangle(sl->mv_cache[0][scan8[0]], 4, 4, 8,
Simple merge
@@@ -1284,7 -1284,7 +1284,7 @@@ void ff_h264_init_cabac_states(H264Cont
  
  static int decode_cabac_field_decoding_flag(H264Context *h, H264SliceContext *sl)
  {
-     const int mbb_xy = h->mb_xy - 2*h->mb_stride;
 -    const long mbb_xy = sl->mb_xy - 2L*h->mb_stride;
++    const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
  
      unsigned long ctx = 0;
  
@@@ -1915,9 -1913,8 +1915,9 @@@ int ff_h264_decode_mb_cabac(H264Contex
      int dct8x8_allowed= h->pps.transform_8x8_mode;
      int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
      const int pixel_shift = h->pixel_shift;
 +    unsigned local_ref_count[2];
  
-     mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
+     mb_xy = sl->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
  
      tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
      if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
@@@ -709,9 -702,8 +709,9 @@@ int ff_h264_decode_mb_cavlc(H264Contex
      int dct8x8_allowed= h->pps.transform_8x8_mode;
      int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
      const int pixel_shift = h->pixel_shift;
 +    unsigned local_ref_count[2];
  
-     mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
+     mb_xy = sl->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
  
      tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
      cbp = 0; /* avoid warning. FIXME: find a solution without slowing
Simple merge
Simple merge
@@@ -96,9 -96,9 +96,9 @@@ static inline void get_lowest_part_y(H2
   */
  static void await_references(H264Context *h, H264SliceContext *sl)
  {
-     const int mb_xy   = h->mb_xy;
+     const int mb_xy   = sl->mb_xy;
      const int mb_type = h->cur_pic.mb_type[mb_xy];
 -    int refs[2][48];
 +    int16_t refs[2][48];
      int nrefs[2] = { 0 };
      int ref, list;
  
Simple merge
@@@ -71,10 -71,10 +71,10 @@@ static void MCFUNC(hl_motion)(H264Conte
                                h264_weight_func *weight_op,
                                h264_biweight_func *weight_avg)
  {
-     const int mb_xy   = h->mb_xy;
+     const int mb_xy   = sl->mb_xy;
      const int mb_type = h->cur_pic.mb_type[mb_xy];
  
 -    assert(IS_INTER(mb_type));
 +    av_assert2(IS_INTER(mb_type));
  
      if (HAVE_THREADS && (h->avctx->active_thread_type & FF_THREAD_FRAME))
          await_references(h, sl);
Simple merge
Simple merge
@@@ -1153,20 -1130,10 +1153,20 @@@ static int svq3_decode_frame(AVCodecCon
          return 0;
      }
  
-     h->mb_x = h->mb_y = h->mb_xy = 0;
 -    init_get_bits(&h->gb, buf, 8 * buf_size);
 -
+     h->mb_x = h->mb_y = sl->mb_xy = 0;
  
 +    if (s->watermark_key) {
 +        av_fast_padded_malloc(&s->buf, &s->buf_size, buf_size);
 +        if (!s->buf)
 +            return AVERROR(ENOMEM);
 +        memcpy(s->buf, avpkt->data, buf_size);
 +        buf = s->buf;
 +    } else {
 +        buf = avpkt->data;
 +    }
 +
 +    init_get_bits(&h->gb, buf, 8 * buf_size);
 +
      if (svq3_decode_slice_header(avctx))
          return -1;