changeset 12323:df22caaab59e libavcodec

Combine calc_rice_params_fixed() and calc_rice_params_lpc() into a single function.
author jbr
date Sat, 31 Jul 2010 17:06:10 +0000
parents 530bf62f3940
children 549a40628c70
files flacenc.c
diffstat 1 files changed, 14 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/flacenc.c	Sat Jul 31 16:50:27 2010 +0000
+++ b/flacenc.c	Sat Jul 31 17:06:10 2010 +0000
@@ -606,27 +606,16 @@
 }
 
 
-static uint32_t calc_rice_params_fixed(RiceContext *rc, int pmin, int pmax,
-                                       int32_t *data, int n, int pred_order,
-                                       int bps)
+static uint32_t find_subblock_rice_params(RiceContext *rc, int pmin, int pmax,
+                                          int32_t *data, int n, int pred_order,
+                                          int bps, int precision)
 {
     uint32_t bits;
     pmin  = get_max_p_order(pmin, n, pred_order);
     pmax  = get_max_p_order(pmax, n, pred_order);
     bits  = pred_order * bps + 6;
-    bits += calc_rice_params(rc, pmin, pmax, data, n, pred_order);
-    return bits;
-}
-
-
-static uint32_t calc_rice_params_lpc(RiceContext *rc, int pmin, int pmax,
-                                     int32_t *data, int n, int pred_order,
-                                     int bps, int precision)
-{
-    uint32_t bits;
-    pmin  = get_max_p_order(pmin, n, pred_order);
-    pmax  = get_max_p_order(pmax, n, pred_order);
-    bits  = pred_order*bps + 4 + 5 + pred_order*precision + 6;
+    if (precision > 0)
+        bits += 4 + 5 + pred_order * precision;
     bits += calc_rice_params(rc, pmin, pmax, data, n, pred_order);
     return bits;
 }
@@ -838,8 +827,9 @@
         bits[0]   = UINT32_MAX;
         for (i = min_order; i <= max_order; i++) {
             encode_residual_fixed(res, smp, n, i);
-            bits[i] = calc_rice_params_fixed(&sub->rc, min_porder, max_porder, res,
-                                             n, i, sub->obits);
+            bits[i] = find_subblock_rice_params(&sub->rc, min_porder,
+                                                max_porder, res, n, i,
+                                                sub->obits, 0);
             if (bits[i] < bits[opt_order])
                 opt_order = i;
         }
@@ -848,8 +838,8 @@
         sub->type_code = sub->type | sub->order;
         if (sub->order != max_order) {
             encode_residual_fixed(res, smp, n, sub->order);
-            return calc_rice_params_fixed(&sub->rc, min_porder, max_porder, res, n,
-                                          sub->order, sub->obits);
+            return find_subblock_rice_params(&sub->rc, min_porder, max_porder,
+                                             res, n, sub->order, sub->obits, 0);
         }
         return bits[sub->order];
     }
@@ -874,7 +864,7 @@
             if (order < 0)
                 order = 0;
             encode_residual_lpc(res, smp, n, order+1, coefs[order], shift[order]);
-            bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
+            bits[i] = find_subblock_rice_params(&sub->rc, min_porder, max_porder,
                                            res, n, order+1, sub->obits, precision);
             if (bits[i] < bits[opt_index]) {
                 opt_index = i;
@@ -889,7 +879,7 @@
         bits[0]   = UINT32_MAX;
         for (i = min_order-1; i < max_order; i++) {
             encode_residual_lpc(res, smp, n, i+1, coefs[i], shift[i]);
-            bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
+            bits[i] = find_subblock_rice_params(&sub->rc, min_porder, max_porder,
                                            res, n, i+1, sub->obits, precision);
             if (bits[i] < bits[opt_order])
                 opt_order = i;
@@ -908,7 +898,7 @@
                 if (i < min_order-1 || i >= max_order || bits[i] < UINT32_MAX)
                     continue;
                 encode_residual_lpc(res, smp, n, i+1, coefs[i], shift[i]);
-                bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
+                bits[i] = find_subblock_rice_params(&sub->rc, min_porder, max_porder,
                                                res, n, i+1, sub->obits,
                                                precision);
                 if (bits[i] < bits[opt_order])
@@ -927,7 +917,7 @@
 
     encode_residual_lpc(res, smp, n, sub->order, sub->coefs, sub->shift);
 
-    return calc_rice_params_lpc(&sub->rc, min_porder, max_porder, res, n,
+    return find_subblock_rice_params(&sub->rc, min_porder, max_porder, res, n,
                                 sub->order, sub->obits, precision);
 }