[FFmpeg-cvslog] r18206 - trunk/libavcodec/mlpdec.c

ramiro subversion
Sat Mar 28 00:32:32 CET 2009


Author: ramiro
Date: Sat Mar 28 00:32:32 2009
New Revision: 18206

Log:
Split read_matrix_params() into its own function.

Modified:
   trunk/libavcodec/mlpdec.c

Modified: trunk/libavcodec/mlpdec.c
==============================================================================
--- trunk/libavcodec/mlpdec.c	Sat Mar 28 00:27:16 2009	(r18205)
+++ trunk/libavcodec/mlpdec.c	Sat Mar 28 00:32:32 2009	(r18206)
@@ -498,6 +498,53 @@ static int read_filter_params(MLPDecodeC
     return 0;
 }
 
+/** Read parameters for primitive matrices. */
+
+static int read_matrix_params(MLPDecodeContext *m, SubStream *s, GetBitContext *gbp)
+{
+    unsigned int mat, ch;
+
+    s->num_primitive_matrices = get_bits(gbp, 4);
+
+    for (mat = 0; mat < s->num_primitive_matrices; mat++) {
+        int frac_bits, max_chan;
+        s->matrix_out_ch[mat] = get_bits(gbp, 4);
+        frac_bits             = get_bits(gbp, 4);
+        s->lsb_bypass   [mat] = get_bits1(gbp);
+
+        if (s->matrix_out_ch[mat] > s->max_channel) {
+            av_log(m->avctx, AV_LOG_ERROR,
+                    "Invalid channel %d specified as output from matrix.\n",
+                    s->matrix_out_ch[mat]);
+            return -1;
+        }
+        if (frac_bits > 14) {
+            av_log(m->avctx, AV_LOG_ERROR,
+                    "Too many fractional bits specified.\n");
+            return -1;
+        }
+
+        max_chan = s->max_matrix_channel;
+        if (!s->noise_type)
+            max_chan+=2;
+
+        for (ch = 0; ch <= max_chan; ch++) {
+            int coeff_val = 0;
+            if (get_bits1(gbp))
+                coeff_val = get_sbits(gbp, frac_bits + 2);
+
+            s->matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
+        }
+
+        if (s->noise_type)
+            s->matrix_noise_shift[mat] = get_bits(gbp, 4);
+        else
+            s->matrix_noise_shift[mat] = 0;
+    }
+
+    return 0;
+}
+
 /** Read decoding parameters that change more often than those in the restart
  *  header. */
 
@@ -505,7 +552,7 @@ static int read_decoding_params(MLPDecod
                                 unsigned int substr)
 {
     SubStream *s = &m->substream[substr];
-    unsigned int mat, ch;
+    unsigned int ch;
 
     if (s->param_presence_flags & PARAM_PRESENCE)
     if (get_bits1(gbp))
@@ -523,43 +570,8 @@ static int read_decoding_params(MLPDecod
 
     if (s->param_presence_flags & PARAM_MATRIX)
         if (get_bits1(gbp)) {
-            s->num_primitive_matrices = get_bits(gbp, 4);
-
-            for (mat = 0; mat < s->num_primitive_matrices; mat++) {
-                int frac_bits, max_chan;
-                s->matrix_out_ch[mat] = get_bits(gbp, 4);
-                frac_bits             = get_bits(gbp, 4);
-                s->lsb_bypass   [mat] = get_bits1(gbp);
-
-                if (s->matrix_out_ch[mat] > s->max_channel) {
-                    av_log(m->avctx, AV_LOG_ERROR,
-                           "Invalid channel %d specified as output from matrix.\n",
-                           s->matrix_out_ch[mat]);
-                    return -1;
-                }
-                if (frac_bits > 14) {
-                    av_log(m->avctx, AV_LOG_ERROR,
-                           "Too many fractional bits specified.\n");
-                    return -1;
-                }
-
-                max_chan = s->max_matrix_channel;
-                if (!s->noise_type)
-                    max_chan+=2;
-
-                for (ch = 0; ch <= max_chan; ch++) {
-                    int coeff_val = 0;
-                    if (get_bits1(gbp))
-                        coeff_val = get_sbits(gbp, frac_bits + 2);
-
-                    s->matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
-                }
-
-                if (s->noise_type)
-                    s->matrix_noise_shift[mat] = get_bits(gbp, 4);
-                else
-                    s->matrix_noise_shift[mat] = 0;
-            }
+            if (read_matrix_params(m, s, gbp) < 0)
+                return -1;
         }
 
     if (s->param_presence_flags & PARAM_OUTSHIFT)



More information about the ffmpeg-cvslog mailing list