[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec h264.c,1.112,1.113

Loren Merritt CVS lorenm
Sun Apr 24 23:06:25 CEST 2005


Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv6483

Modified Files:
	h264.c 
Log Message:
fix ref comparison in B-frame deblocker ('unused' and 'unavailable' were treated as different)


Index: h264.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/h264.c,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -d -r1.112 -r1.113
--- h264.c	24 Apr 2005 17:21:08 -0000	1.112
+++ h264.c	24 Apr 2005 21:06:22 -0000	1.113
@@ -6079,6 +6079,10 @@
     const int mb_xy= mb_x + mb_y*s->mb_stride;
     int first_vertical_edge_done = 0;
     int dir;
+    /* FIXME: A given frame may occupy more than one position in
+     * the reference list. So ref2frm should be populated with
+     * frame numbers, not indices. */
+    static const int ref2frm[18] = {-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
 
     if (h->mb_aff_frame
             // left mb is in picture
@@ -6110,13 +6114,10 @@
                 h->non_zero_count_cache[bn_idx] != 0 ) {
                 bS[i] = 2;
             } else {
-                /* FIXME: A given frame may occupy more than one position in
-                 * the reference list. So we should compare the frame numbers,
-                 * not the indices in the ref list. */
                 int l;
                 bS[i] = 0;
                 for( l = 0; l < 1 + (h->slice_type == B_TYPE); l++ ) {
-                    if( h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] ||
+                    if( ref2frm[h->ref_cache[l][b_idx]+2] != ref2frm[h->ref_cache[l][bn_idx]+2] ||
                         ABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
                         ABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= 4 ) {
                         bS[i] = 1;
@@ -6249,13 +6250,10 @@
                     }
                     else
                     {
-                        /* FIXME: A given frame may occupy more than one position in
-                         * the reference list. So we should compare the frame numbers,
-                         * not the indices in the ref list. */
                         int l;
                         bS[i] = 0;
                         for( l = 0; l < 1 + (h->slice_type == B_TYPE); l++ ) {
-                            if( h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] ||
+                            if( ref2frm[h->ref_cache[l][b_idx]+2] != ref2frm[h->ref_cache[l][bn_idx]+2] ||
                                 ABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
                                 ABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= 4 ) {
                                 bS[i] = 1;





More information about the ffmpeg-cvslog mailing list