]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/h264_loopfilter.c
Merge commit '5c4b98de4d101ea715ef86847306a510afd0db0c'
[ffmpeg] / libavcodec / h264_loopfilter.c
index dc4d771d1ad606d4e5237844b800fc3063d0edee..79aff5375b0161652aabd7b3e905f46d0dc5ca14 100644 (file)
@@ -246,13 +246,13 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
     int chroma444 = CHROMA444(h);
     int chroma422 = CHROMA422(h);
 
-    int mb_xy = h->mb_xy;
+    int mb_xy = sl->mb_xy;
     int left_type = sl->left_type[LTOP];
     int top_type  = sl->top_type;
 
     int qp_bd_offset = 6 * (h->sps.bit_depth_luma - 8);
-    int a = 52 + h->slice_alpha_c0_offset - qp_bd_offset;
-    int b = 52 + h->slice_beta_offset - qp_bd_offset;
+    int a = 52 + sl->slice_alpha_c0_offset - qp_bd_offset;
+    int b = 52 + sl->slice_beta_offset - qp_bd_offset;
 
     int mb_type = h->cur_pic.mb_type[mb_xy];
     int qp      = h->cur_pic.qscale_table[mb_xy];
@@ -358,7 +358,7 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
     } else {
         LOCAL_ALIGNED(8, int16_t, bS, [2], [4][4]);
         int edges;
-        if( IS_8x8DCT(mb_type) && (h->cbp&7) == 7 && !chroma444 ) {
+        if( IS_8x8DCT(mb_type) && (sl->cbp&7) == 7 && !chroma444 ) {
             edges = 4;
             AV_WN64A(bS[0][0], 0x0002000200020002ULL);
             AV_WN64A(bS[0][2], 0x0002000200020002ULL);
@@ -368,7 +368,7 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
             int mask_edge1 = (3*(((5*mb_type)>>5)&1)) | (mb_type>>4); //(mb_type & (MB_TYPE_16x16 | MB_TYPE_8x16)) ? 3 : (mb_type & MB_TYPE_16x8) ? 1 : 0;
             int mask_edge0 = 3*((mask_edge1>>1) & ((5*left_type)>>5)&1); // (mb_type & (MB_TYPE_16x16 | MB_TYPE_8x16)) && (h->left_type[LTOP] & (MB_TYPE_16x16 | MB_TYPE_8x16)) ? 3 : 0;
             int step =  1+(mb_type>>24); //IS_8x8DCT(mb_type) ? 2 : 1;
-            edges = 4 - 3*((mb_type>>3) & !(h->cbp & 15)); //(mb_type & MB_TYPE_16x16) && !(h->cbp & 15) ? 1 : 4;
+            edges = 4 - 3*((mb_type>>3) & !(sl->cbp & 15)); //(mb_type & MB_TYPE_16x16) && !(h->cbp & 15) ? 1 : 4;
             h->h264dsp.h264_loop_filter_strength(bS, sl->non_zero_count_cache, sl->ref_cache, sl->mv_cache,
                                                  sl->list_count==2, edges, step, mask_edge0, mask_edge1, FIELD_PICTURE(h));
         }
@@ -485,7 +485,7 @@ static av_always_inline void filter_mb_dir(H264Context *h, H264SliceContext *sl,
     static const uint8_t mask_edge_tab[2][8]={{0,3,3,3,1,1,1,1},
                                               {0,3,1,1,3,3,3,3}};
     const int mask_edge = mask_edge_tab[dir][(mb_type>>3)&7];
-    const int edges = mask_edge== 3 && !(h->cbp&15) ? 1 : 4;
+    const int edges = mask_edge== 3 && !(sl->cbp&15) ? 1 : 4;
 
     // how often to recheck mv-based bS when iterating along each edge
     const int mask_par0 = mb_type & (MB_TYPE_16x16 | (MB_TYPE_8x16 >> dir));
@@ -725,8 +725,8 @@ void ff_h264_filter_mb(H264Context *h, H264SliceContext *sl,
     int first_vertical_edge_done = 0;
     int chroma = CHROMA(h) && !(CONFIG_GRAY && (h->flags&CODEC_FLAG_GRAY));
     int qp_bd_offset = 6 * (h->sps.bit_depth_luma - 8);
-    int a = 52 + h->slice_alpha_c0_offset - qp_bd_offset;
-    int b = 52 + h->slice_beta_offset - qp_bd_offset;
+    int a = 52 + sl->slice_alpha_c0_offset - qp_bd_offset;
+    int b = 52 + sl->slice_beta_offset - qp_bd_offset;
 
     if (FRAME_MBAFF(h)
             // and current and left pair do not have the same interlaced type
@@ -757,9 +757,9 @@ void ff_h264_filter_mb(H264Context *h, H264SliceContext *sl,
                     {3+4*0, 3+4*1, 3+4*2, 3+4*3, 3+4*0, 3+4*1, 3+4*2, 3+4*3},
                 }
             };
-            const uint8_t *off= offset[MB_FIELD(h)][mb_y&1];
+            const uint8_t *off= offset[MB_FIELD(sl)][mb_y&1];
             for( i = 0; i < 8; i++ ) {
-                int j= MB_FIELD(h) ? i>>2 : i&1;
+                int j= MB_FIELD(sl) ? i>>2 : i&1;
                 int mbn_xy = sl->left_mb_xy[LEFT(j)];
                 int mbn_type = sl->left_type[LEFT(j)];
 
@@ -768,7 +768,7 @@ void ff_h264_filter_mb(H264Context *h, H264SliceContext *sl,
                 else{
                     bS[i] = 1 + !!(sl->non_zero_count_cache[12+8*(i>>1)] |
                          ((!h->pps.cabac && IS_8x8DCT(mbn_type)) ?
-                            (h->cbp_table[mbn_xy] & (((MB_FIELD(h) ? (i&2) : (mb_y&1)) ? 8 : 2) << 12))
+                            (h->cbp_table[mbn_xy] & (((MB_FIELD(sl) ? (i&2) : (mb_y&1)) ? 8 : 2) << 12))
                                                                        :
                             h->non_zero_count[mbn_xy][ off[i] ]));
                 }
@@ -792,7 +792,7 @@ void ff_h264_filter_mb(H264Context *h, H264SliceContext *sl,
         /* Filter edge */
         tprintf(h->avctx, "filter mb:%d/%d MBAFF, QPy:%d/%d, QPb:%d/%d QPr:%d/%d ls:%d uvls:%d", mb_x, mb_y, qp[0], qp[1], bqp[0], bqp[1], rqp[0], rqp[1], linesize, uvlinesize);
         { int i; for (i = 0; i < 8; i++) tprintf(h->avctx, " bS[%d]:%d", i, bS[i]); tprintf(h->avctx, "\n"); }
-        if (MB_FIELD(h)) {
+        if (MB_FIELD(sl)) {
             filter_mb_mbaff_edgev ( h, img_y                ,   linesize, bS  , 1, qp [0], a, b, 1 );
             filter_mb_mbaff_edgev ( h, img_y  + 8*  linesize,   linesize, bS+4, 1, qp [1], a, b, 1 );
             if (chroma){