diff h264_loopfilter.c @ 10913:497929e9d912 libavcodec

Perform reference remapping at fill_cache() time instead of in the loop filter. This removes one obstacle of getting ff_h264_filter_mb_fast() bitexact. code is maybe 0.1% faster
author michael
date Mon, 18 Jan 2010 05:15:31 +0000
parents 7cecaa3a6b38
children edd918a4c0b8
line wrap: on
line diff
--- a/h264_loopfilter.c	Mon Jan 18 00:34:28 2010 +0000
+++ b/h264_loopfilter.c	Mon Jan 18 05:15:31 2010 +0000
@@ -445,8 +445,6 @@
     int edge;
     const int mbm_xy = dir == 0 ? mb_xy -1 : h->top_mb_xy;
     const int mbm_type = s->current_picture.mb_type[mbm_xy];
-    int (*ref2frm) [64] = h->ref2frm[ h->slice_num          &(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
-    int (*ref2frmm)[64] = h->ref2frm[ h->slice_table[mbm_xy]&(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
     int start = h->slice_table[mbm_xy] == 0xFFFF ? 1 : 0;
 
     const int edges = (mb_type & (MB_TYPE_16x16|MB_TYPE_SKIP))
@@ -513,7 +511,6 @@
         /* mbn_xy: neighbor macroblock */
         const int mbn_xy = edge > 0 ? mb_xy : mbm_xy;
         const int mbn_type = s->current_picture.mb_type[mbn_xy];
-        int (*ref2frmn)[64] = edge > 0 ? ref2frm : ref2frmm;
         int16_t bS[4];
         int qp;
 
@@ -553,7 +550,7 @@
                 int v = 0;
 
                 for( l = 0; !v && l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
-                    v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] |
+                    v |= h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] |
                          h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] + 3 >= 7U |
                          FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit;
                 }
@@ -562,7 +559,7 @@
                     v=0;
                     for( l = 0; !v && l < 2; l++ ) {
                         int ln= 1-l;
-                        v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] |
+                        v |= h->ref_cache[l][b_idx] != h->ref_cache[ln][bn_idx] |
                             h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] + 3 >= 7U |
                             FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit;
                     }
@@ -588,7 +585,7 @@
                 {
                     bS[i] = 0;
                     for( l = 0; l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
-                        if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] |
+                        if( h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] |
                             h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] + 3 >= 7U |
                             FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit ) {
                             bS[i] = 1;
@@ -600,7 +597,7 @@
                         bS[i] = 0;
                         for( l = 0; l < 2; l++ ) {
                             int ln= 1-l;
-                            if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] |
+                            if( h->ref_cache[l][b_idx] != h->ref_cache[ln][bn_idx] |
                                 h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] + 3 >= 7U |
                                 FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit ) {
                                 bS[i] = 1;