There is most likely a performance hit here but the current code is *undefined.*

Haters are welcome to send suggestions on how to do this without an if.
From 554be95192ad9803f51f00fec18bf6db9a562779 Mon Sep 17 00:00:00 2001
From: Alex Converse <[email protected]>
Date: Tue, 26 Apr 2011 09:07:43 -0700
Subject: [PATCH 2/4] aacdec: Guard undefined shifts with an if.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------1"

This is a multi-part message in MIME format.
--------------1
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit

---
 libavcodec/aacdec.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)


--------------1
Content-Type: text/x-patch; name="0002-aacdec-Guard-undefined-shifts-with-an-if.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0002-aacdec-Guard-undefined-shifts-with-an-if.patch"

diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index 0c6312f..c9f2afd 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -1083,8 +1083,11 @@ static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
                             GET_VLC(code, re, gb, vlc_tab, 8, 2);
                             cb_idx = cb_vector_idx[code];
                             nnz = cb_idx >> 8 & 15;
-                            bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
-                            LAST_SKIP_BITS(re, gb, nnz);
+                            if (nnz) {
+                                bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
+                                LAST_SKIP_BITS(re, gb, nnz);
+                            } else
+                                bits = 0;
                             cf = VMUL4S(cf, vq, cb_idx, bits, sf + idx);
                         } while (len -= 4);
                     }

--------------1--


_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to