]> granicus.if.org Git - libvpx/commitdiff
minor fix to eob check for setting CONTEXT
authorYaowu Xu <yaowu@google.com>
Thu, 29 Nov 2012 01:34:02 +0000 (17:34 -0800)
committerYaowu Xu <yaowu@google.com>
Thu, 29 Nov 2012 17:10:15 +0000 (09:10 -0800)
Previously, the "!=" check is logically incorrect when eob is at 0 and
effective coefficient starting position is 1. This commit should have
no effect on bitstream.

Change-Id: I6ce3a847c7e72bfbe4f7c74f88e3310c6b9b6d30

vp9/decoder/vp9_detokenize.c
vp9/encoder/vp9_encodemb.c
vp9/encoder/vp9_rdopt.c
vp9/encoder/vp9_tokenize.c

index 1a7a08fa44ffeec6731e030e1b8ca54f85ac26cf..0f729283b227e7264398b8c5cda4e038fd57461e 100644 (file)
@@ -243,7 +243,7 @@ SKIP_START:
   if (c < seg_eob)
     coef_counts[coef_bands[c]][pt][DCT_EOB_TOKEN]++;
 
-  a[0] = l[0] = (c != !type);
+  a[0] = l[0] = (c > !type);
 
   return c;
 }
@@ -291,11 +291,8 @@ static int vp9_decode_mb_tokens_16x16(VP9D_COMP* const pbi,
     l[1] = l[0];
     eobtotal += c;
   }
-
-  // no Y2 block
-  vpx_memset(&A[8], 0, sizeof(A[8]));
-  vpx_memset(&L[8], 0, sizeof(L[8]));
-
+  A[8] = 0;
+  L[8] = 0;
   return eobtotal;
 }
 
index 1a7a38261f3bd0fbe5e64fa4021d1e424c2c599d..bcec0923a08735e7db890e50113483055d6547fd 100644 (file)
@@ -491,7 +491,7 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
   final_eob++;
 
   d->eob = final_eob;
-  *a = *l = (d->eob != !type);
+  *a = *l = (d->eob > !type);
 }
 
 /**************************************************************************
@@ -854,7 +854,7 @@ static void optimize_b_16x16(MACROBLOCK *mb, int i, PLANE_TYPE type,
   final_eob++;
 
   d->eob = final_eob;
-  *a = *l = (d->eob != !type);
+  *a = *l = (d->eob > !type);
 }
 
 void vp9_optimize_mby_16x16(MACROBLOCK *x) {
index 760593acb89992cfb705b0d0a147f4571917596c..9450ff4fd6963dee0904c9db03d23b4d8c25f4af 100644 (file)
@@ -539,8 +539,8 @@ static int cost_coeffs_2x2(MACROBLOCK *mb,
   if (c < 4)
     cost += mb->token_costs[TX_8X8][type][vp9_coef_bands[c]]
             [pt] [DCT_EOB_TOKEN];
-
-  pt = (c != !type); // is eob first coefficient;
+  // is eob first coefficient;
+  pt = (c > !type);
   *a = *l = pt;
   return cost;
 }
@@ -640,7 +640,8 @@ static int cost_coeffs(MACROBLOCK *mb, BLOCKD *b, PLANE_TYPE type,
           [pt][DCT_EOB_TOKEN];
   }
 
-  pt = (c != !type); // is eob first coefficient;
+  // is eob first coefficient;
+  pt = (c > !type);
   *a = *l = pt;
   return cost;
 }
index 41b7f0edfd6a88590e1375dc671acb88fdee3667..f36c2cdae5990d11429890790199f371600f0844 100644 (file)
@@ -212,7 +212,7 @@ static void tokenize_b(VP9_COMP *cpi,
   } while (c < eob && ++c < seg_eob);
 
   *tp = t;
-  *a = *l = (c != !type); /* 0 <-> all coeff data is zero */
+  *a = *l = (c > !type); /* 0 <-> all coeff data is zero */
 }
 
 int vp9_mby_is_skippable_4x4(MACROBLOCKD *xd, int has_y2_block) {
@@ -377,8 +377,8 @@ void vp9_tokenize_mb(VP9_COMP *cpi,
       A[vp9_block2above_8x8[b] + 1] = A[vp9_block2above_8x8[b]];
       L[vp9_block2left_8x8[b] + 1]  = L[vp9_block2left_8x8[b]];
     }
-    vpx_memset(&A[8], 0, sizeof(A[8]));
-    vpx_memset(&L[8], 0, sizeof(L[8]));
+    A[8] = 0;
+    L[8] = 0;
   } else if (tx_size == TX_8X8) {
     for (b = 0; b < 16; b += 4) {
       tokenize_b(cpi, xd, xd->block + b, t, plane_type,