shithub: libvpx

Download patch

ref: 52128c5894b77dcde710aa606db6c3e3396fa1e9
parent: ccc0577ab27a5eee2603fa5063110295c8dba7df
author: Dmitry Kovalev <dkovalev@google.com>
date: Thu Apr 4 08:10:39 EDT 2013

Simplifying get_delta_q function.

Change-Id: I3a1e9cc5c3ed5be01ff75a84a6c82ec02c75af9c

--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -901,22 +901,18 @@
 #endif
 }
 
+static int get_delta_q(vp9_reader *r, int *dq) {
+  const int old_value = *dq;
 
-static int get_delta_q(vp9_reader *bc, int prev, int *q_update) {
-  int ret_val = 0;
-
-  if (vp9_read_bit(bc)) {
-    ret_val = vp9_read_literal(bc, 4);
-
-    if (vp9_read_bit(bc))
-      ret_val = -ret_val;
+  if (vp9_read_bit(r)) {  // Update bit
+    int value = vp9_read_literal(r, 4);
+    if (vp9_read_bit(r))  // Sign bit
+      value = -value;
+    *dq = value;
   }
 
   // Trigger a quantizer update if the delta-q value has changed
-  if (ret_val != prev)
-    *q_update = 1;
-
-  return ret_val;
+  return old_value != *dq;
 }
 
 #ifdef PACKET_TESTING
@@ -1716,9 +1712,9 @@
     pc->base_qindex = vp9_read_literal(&header_bc, QINDEX_BITS);
 
     // AC 1st order Q = default
-    pc->y1dc_delta_q = get_delta_q(&header_bc, pc->y1dc_delta_q, &q_update);
-    pc->uvdc_delta_q = get_delta_q(&header_bc, pc->uvdc_delta_q, &q_update);
-    pc->uvac_delta_q = get_delta_q(&header_bc, pc->uvac_delta_q, &q_update);
+    q_update = get_delta_q(&header_bc, &pc->y1dc_delta_q) |
+               get_delta_q(&header_bc, &pc->uvdc_delta_q) |
+               get_delta_q(&header_bc, &pc->uvac_delta_q);
 
     if (q_update)
       vp9_init_de_quantizer(pbi);