vp8e - fix coefficient costing
authorJim Bankoski <jimbankoski@google.com>
Mon, 5 Mar 2012 16:20:42 +0000 (08:20 -0800)
committerJim Bankoski <jimbankoski@google.com>
Mon, 5 Mar 2012 16:20:42 +0000 (08:20 -0800)
Coefficient costing failed to take account of the first branch
being skipped ( 0 vs eob) if the previous token is 0.

Fixed rd to account for slightly increased token cost & cleaned up
warning message

Change-Id: I56140635d9f48a28dded5a816964e973a53975ef

vp8/encoder/rdopt.c
vp8/encoder/treewriter.c
vp8/encoder/treewriter.h

index 80f1981..fdc7213 100644 (file)
@@ -137,9 +137,11 @@ static void fill_token_costs(
     for (i = 0; i < BLOCK_TYPES; i++)
         for (j = 0; j < COEF_BANDS; j++)
             for (k = 0; k < PREV_COEF_CONTEXTS; k++)
-
-                vp8_cost_tokens((int *)(c [i][j][k]), p [i][j][k], vp8_coef_tree);
-
+                // check for pt=0 and band > 1 if block type 0 and 0 if blocktype 1
+                if(k==0 && j>(i==0) )
+                    vp8_cost_tokens2((int *)(c [i][j][k]), p [i][j][k], vp8_coef_tree,2);
+                else
+                    vp8_cost_tokens((int *)(c [i][j][k]), p [i][j][k], vp8_coef_tree);
 }
 
 static int rd_iifactor [ 32 ] =  {    4,   4,   3,   2,   1,   0,   0,   0,
@@ -199,7 +201,7 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue)
     int q;
     int i;
     double capped_q = (Qvalue < 160) ? (double)Qvalue : 160.0;
-    double rdconst = 2.70;
+    double rdconst = 2.60;
 
     vp8_clear_system_state();  //__asm emms;
 
index 03967c8..ef25f67 100644 (file)
@@ -37,3 +37,7 @@ void vp8_cost_tokens(int *c, const vp8_prob *p, vp8_tree t)
 {
     cost(c, t, p, 0, 0);
 }
+void vp8_cost_tokens2(int *c, const vp8_prob *p, vp8_tree t,int start)
+{
+    cost(c, t, p, start, 0);
+}
index c28a0fa..0aa1943 100644 (file)
@@ -119,4 +119,8 @@ void vp8_cost_tokens(
     int *Costs, const vp8_prob *, vp8_tree
 );
 
+void vp8_cost_tokens2(
+    int *Costs, const vp8_prob *, vp8_tree, int
+);
+
 #endif