]> granicus.if.org Git - libvpx/commitdiff
Correct zbinboost lookup for 8x8 quantizer
authorYaowu Xu <yaowu@google.com>
Tue, 28 Feb 2012 22:19:38 +0000 (14:19 -0800)
committerYaowu Xu <yaowu@google.com>
Wed, 29 Feb 2012 01:17:47 +0000 (17:17 -0800)
The commit fixed a problem where 8x8 regular quantizer was using the
4x4 zbinboost lookup table that only has 16 entries at each Q. The
commit assigned a uniform zbin boost value for all cases that there
are more than 16 consective zeros. The change only affects MBs using
8x8 transform. The fix has a slightly positive impact on quality.

Test results:
http://www.corp.google.com/~yaowu/no_crawl/hd_fixzbinb.html
(avg psnr: .26% glb psnr: .21% ssim: .28%)

Results on cif size clip are also positive even though gain is smaller
http://www.corp.google.com/~yaowu/no_crawl/derf_fixzbinb.html

Change-Id: Ibe8f6da181d1fb377fbd0d3b5feb15be0cfa2017

vp8/encoder/quantize.c

index b14f8c4cc657870144caeec5e691790def6243c4..3d1c2ff35dd0a400e3c0b52cf21e81dcc20e7156 100644 (file)
@@ -609,8 +609,10 @@ void vp8_regular_quantize_b_8x8(BLOCK *b, BLOCKD *d)
 
     //zbin = (zbin_ptr[rc!=0] + *zbin_boost_ptr + zbin_oq_value)/q1st;
     zbin = (zbin_ptr[rc!=0] + *zbin_boost_ptr + zbin_oq_value);
+    //TODO: 8x8 zbin boost needs be done properly
+    if(zbin_boost_ptr < &b->zrun_zbin_boost[15])
+        zbin_boost_ptr ++;
 
-    zbin_boost_ptr ++;
     sz = (z >> 31);                                 // sign of z
     x  = (z ^ sz) - sz;                             // x = abs(z)
 
@@ -693,7 +695,6 @@ void vp8_strict_quantize_b_2x2(BLOCK *b, BLOCKD *d)
         eob = i;
     }
   }
-
   d->eob = eob + 1;
 }