changeset 9503:1997b5b2a40e libavcodec

mlpdec: Check for {matrix,filter}_changed as soon as they are incremented.
author ramiro
date Sat, 18 Apr 2009 18:51:43 +0000
parents 56f844aec27b
children dc643c3c285e
files mlpdec.c
diffstat 1 files changed, 9 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/mlpdec.c	Sat Apr 18 18:51:01 2009 +0000
+++ b/mlpdec.c	Sat Apr 18 18:51:43 2009 +0000
@@ -446,7 +446,10 @@
     // Filter is 0 for FIR, 1 for IIR.
     assert(filter < 2);
 
-    m->filter_changed[channel][filter]++;
+    if (m->filter_changed[channel][filter]++ > 1) {
+        av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
+        return -1;
+    }
 
     order = get_bits(gbp, 4);
     if (order > max_order) {
@@ -508,8 +511,12 @@
 {
     unsigned int mat, ch;
 
+    if (m->matrix_changed++ > 1) {
+        av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
+        return -1;
+    }
+
     s->num_primitive_matrices = get_bits(gbp, 4);
-    m->matrix_changed++;
 
     for (mat = 0; mat < s->num_primitive_matrices; mat++) {
         int frac_bits, max_chan;
@@ -1013,8 +1020,6 @@
 
         s->blockpos = 0;
         do {
-            unsigned int ch;
-
             if (get_bits1(&gb)) {
                 if (get_bits1(&gb)) {
                     /* A restart header should be present. */
@@ -1031,17 +1036,6 @@
                     goto next_substr;
             }
 
-            if (m->matrix_changed > 1) {
-                av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
-                goto next_substr;
-            }
-            for (ch = 0; ch < s->max_channel; ch++)
-                if (m->filter_changed[ch][FIR] > 1 ||
-                    m->filter_changed[ch][IIR] > 1) {
-                    av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
-                    goto next_substr;
-                }
-
             if (!s->restart_seen) {
                 goto next_substr;
             }