Merge commit 'e9b2383bf86b38ad18a001801aee20c8182e29bd'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 17:07:01 +0000 (18:07 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 17:07:01 +0000 (18:07 +0100)
* commit 'e9b2383bf86b38ad18a001801aee20c8182e29bd':
  h264: move mb_mbaff into the per-slice context

Conflicts:
libavcodec/h264_cabac.c
libavcodec/h264_cavlc.c
libavcodec/h264_slice.c

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

@@@ -90,8 -74,7 +90,8 @@@ static void h264_er_decode_mb(void *opa
      fill_rectangle(&sl->ref_cache[0][scan8[0]], 4, 4, 8, ref, 1);
      fill_rectangle(sl->mv_cache[0][scan8[0]], 4, 4, 8,
                     pack16to32((*mv)[0][0][0], (*mv)[0][0][1]), 4);
-     h->mb_mbaff =
 -    assert(!FRAME_MBAFF(h));
++    sl->mb_mbaff =
 +    sl->mb_field_decoding_flag = 0;
      ff_h264_hl_decode_mb(h, &h->slice_ctx[0]);
  }
  
Simple merge
@@@ -2057,9 -2054,6 +2057,9 @@@ decode_intra_mb
          return 0;
      }
  
-     local_ref_count[0] = sl->ref_count[0] << MB_MBAFF(h);
-     local_ref_count[1] = sl->ref_count[1] << MB_MBAFF(h);
++    local_ref_count[0] = sl->ref_count[0] << MB_MBAFF(sl);
++    local_ref_count[1] = sl->ref_count[1] << MB_MBAFF(sl);
 +
      fill_decode_caches(h, sl, mb_type);
  
      if( IS_INTRA( mb_type ) ) {
@@@ -794,9 -786,6 +794,9 @@@ decode_intra_mb
          return 0;
      }
  
-     local_ref_count[0] = sl->ref_count[0] << MB_MBAFF(h);
-     local_ref_count[1] = sl->ref_count[1] << MB_MBAFF(h);
++    local_ref_count[0] = sl->ref_count[0] << MB_MBAFF(sl);
++    local_ref_count[1] = sl->ref_count[1] << MB_MBAFF(sl);
 +
      fill_decode_neighbors(h, sl, mb_type);
      fill_decode_caches(h, sl, mb_type);
  
Simple merge
@@@ -1499,21 -1349,14 +1499,21 @@@ int ff_h264_decode_slice_header(H264Con
          }
      }
  
 -    if (h == h0 && h->dequant_coeff_pps != pps_id) {
 +    if (first_slice && h->dequant_coeff_pps != pps_id) {
          h->dequant_coeff_pps = pps_id;
 -        h264_init_dequant_tables(h);
 +        ff_h264_init_dequant_tables(h);
      }
  
 -    h->frame_num = get_bits(&sl->gb, h->sps.log2_max_frame_num);
 +    frame_num = get_bits(&sl->gb, h->sps.log2_max_frame_num);
 +    if (!first_slice) {
 +        if (h0->frame_num != frame_num) {
 +            av_log(h->avctx, AV_LOG_ERROR, "Frame num change from %d to %d\n",
 +                   h0->frame_num, frame_num);
 +            return AVERROR_INVALIDDATA;
 +        }
 +    }
  
-     h->mb_mbaff        = 0;
+     sl->mb_mbaff       = 0;
      h->mb_aff_frame    = 0;
      last_pic_structure = h0->picture_structure;
      last_pic_droppable = h0->droppable;
@@@ -2053,7 -1836,7 +2053,7 @@@ static av_always_inline void fill_filte
          if (USES_LIST(top_type, list)) {
              const int b_xy  = h->mb2b_xy[top_xy] + 3 * b_stride;
              const int b8_xy = 4 * top_xy + 2;
-             int (*ref2frm)[64] = (void*)(sl->ref2frm[h->slice_table[top_xy] & (MAX_SLICES - 1)][0] + (MB_MBAFF(h) ? 20 : 2));
 -            int (*ref2frm)[64] = sl->ref2frm[h->slice_table[top_xy] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
++            int (*ref2frm)[64] = (void*)(sl->ref2frm[h->slice_table[top_xy] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2));
              AV_COPY128(mv_dst - 1 * 8, h->cur_pic.motion_val[list][b_xy + 0]);
              ref_cache[0 - 1 * 8] =
              ref_cache[1 - 1 * 8] = ref2frm[list][h->cur_pic.ref_index[list][b8_xy + 0]];
              if (USES_LIST(left_type[LTOP], list)) {
                  const int b_xy  = h->mb2b_xy[left_xy[LTOP]] + 3;
                  const int b8_xy = 4 * left_xy[LTOP] + 1;
-                 int (*ref2frm)[64] =(void*)( sl->ref2frm[h->slice_table[left_xy[LTOP]] & (MAX_SLICES - 1)][0] + (MB_MBAFF(h) ? 20 : 2));
 -                int (*ref2frm)[64] = sl->ref2frm[h->slice_table[left_xy[LTOP]] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
++                int (*ref2frm)[64] =(void*)( sl->ref2frm[h->slice_table[left_xy[LTOP]] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2));
                  AV_COPY32(mv_dst - 1 +  0, h->cur_pic.motion_val[list][b_xy + b_stride * 0]);
                  AV_COPY32(mv_dst - 1 +  8, h->cur_pic.motion_val[list][b_xy + b_stride * 1]);
                  AV_COPY32(mv_dst - 1 + 16, h->cur_pic.motion_val[list][b_xy + b_stride * 2]);
  
      {
          int8_t *ref = &h->cur_pic.ref_index[list][4 * mb_xy];
-         int (*ref2frm)[64] = (void*)(sl->ref2frm[sl->slice_num & (MAX_SLICES - 1)][0] + (MB_MBAFF(h) ? 20 : 2));
 -        int (*ref2frm)[64] = sl->ref2frm[sl->slice_num & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
++        int (*ref2frm)[64] = (void*)(sl->ref2frm[sl->slice_num & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2));
          uint32_t ref01 = (pack16to32(ref2frm[list][ref[0]], ref2frm[list][ref[1]]) & 0x00FF00FF) * 0x0101;
          uint32_t ref23 = (pack16to32(ref2frm[list][ref[2]], ref2frm[list][ref[3]]) & 0x00FF00FF) * 0x0101;
          AV_WN32A(&ref_cache[0 * 8], ref01);