Merge commit '8b00f4df20f4a8ab0656fdaf7d00233a6515a052'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 12:42:44 +0000 (13:42 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Mar 2015 12:42:44 +0000 (13:42 +0100)
* commit '8b00f4df20f4a8ab0656fdaf7d00233a6515a052':
  h264: move some neighbour information into the per-slice context

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

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

Simple merge
@@@ -1935,11 -1935,11 +1938,11 @@@ int ff_h264_decode_mb_cabac(H264Contex
  
      if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
          int ctx = 0;
 -        assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
 +        av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_B);
  
-         if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
+         if (!IS_DIRECT(sl->left_type[LTOP] - 1))
              ctx++;
-         if( !IS_DIRECT( h->top_type-1 ) )
+         if (!IS_DIRECT(sl->top_type - 1))
              ctx++;
  
          if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
              goto decode_intra_mb;
          }
      } else {
-         mb_type= decode_cabac_intra_mb_type(h, 3, 1);
+         mb_type = decode_cabac_intra_mb_type(h, sl, 3, 1);
          if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
              mb_type--;
 -        assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
 +        av_assert2(h->slice_type_nos == AV_PICTURE_TYPE_I);
  decode_intra_mb:
          partition_count = 0;
          cbp= i_mb_type_info[mb_type].cbp;
          return 0;
      }
  
-     fill_decode_caches(h, mb_type);
 +    local_ref_count[0] = h->ref_count[0] << MB_MBAFF(h);
 +    local_ref_count[1] = h->ref_count[1] << MB_MBAFF(h);
 +
+     fill_decode_caches(h, sl, mb_type);
  
      if( IS_INTRA( mb_type ) ) {
          int i, pred_mode;
@@@ -789,11 -781,8 +789,11 @@@ decode_intra_mb
          return 0;
      }
  
-     fill_decode_neighbors(h, mb_type);
-     fill_decode_caches(h, mb_type);
 +    local_ref_count[0] = h->ref_count[0] << MB_MBAFF(h);
 +    local_ref_count[1] = h->ref_count[1] << MB_MBAFF(h);
 +
+     fill_decode_neighbors(h, sl, mb_type);
+     fill_decode_caches(h, sl, mb_type);
  
      //mb_pred
      if(IS_INTRA(mb_type)){
Simple merge
Simple merge
Simple merge
  #include "avcodec.h"
  #include "h264.h"
  #include "mpegutils.h"
 +#include "libavutil/avassert.h"
  
 -#include <assert.h>
  
- static av_always_inline int fetch_diagonal_mv(H264Context *h, const int16_t **C,
+ static av_always_inline int fetch_diagonal_mv(H264Context *h, H264SliceContext *sl,
+                                               const int16_t **C,
                                                int i, int list, int part_width)
  {
      const int topright_ref = h->ref_cache[list][i - 8 + part_width];
@@@ -664,11 -670,11 +670,11 @@@ static void fill_decode_caches(H264Cont
                  ref_cache[4 - 1 * 8] = topright_type ? LIST_NOT_USED
                                                       : PART_NOT_AVAILABLE;
              }
 -            if (ref_cache[4 - 1 * 8] < 0) {
 +            if(ref_cache[2 - 1*8] < 0 || ref_cache[4 - 1 * 8] < 0) {
                  if (USES_LIST(topleft_type, list)) {
                      const int b_xy  = h->mb2b_xy[topleft_xy] + 3 + b_stride +
-                                       (h->topleft_partition & 2 * b_stride);
-                     const int b8_xy = 4 * topleft_xy + 1 + (h->topleft_partition & 2);
+                                       (sl->topleft_partition & 2 * b_stride);
+                     const int b8_xy = 4 * topleft_xy + 1 + (sl->topleft_partition & 2);
                      AV_COPY32(mv_cache[-1 - 1 * 8], mv[b_xy]);
                      ref_cache[-1 - 1 * 8] = ref[b8_xy];
                  } else {
Simple merge
Simple merge