shithub: aacenc

Download patch

ref: 6fb9f675c8b2a6133e6d5a01f1e01365145aa8ed
parent: 01042b1b8cdb7571ffb5a51a73765fab8463a81b
author: menno <menno>
date: Fri Jun 5 12:16:06 EDT 2009

Fix in huffman scalefactor coding when difference was out of bound for the table.

--- a/libfaac/huffman.c
+++ b/libfaac/huffman.c
@@ -23,7 +23,7 @@
 
 ***********/
 /*
- * $Id: huffman.c,v 1.11 2005/02/02 07:53:20 sur Exp $
+ * $Id: huffman.c,v 1.12 2009/06/05 16:16:06 menno Exp $
  */
 
 #include <math.h>
@@ -1197,8 +1197,19 @@
                 /* only send scalefactors if using non-zero codebooks */
                 diff = scale_factors[index] - previous_is_factor;
                 if ((diff < 60)&&(diff >= -60))
-                    length = huff12[diff+60][FIRSTINTAB];
-                else length = 0;
+				{
+					length = huff12[diff+60][FIRSTINTAB];
+				}
+                else if ( diff >= 60 ) // frank 30.Oct.2007 added this because faad2 decoder and QuickTime choke when nothing is written and the codebook says a number is expected.
+				{
+					diff = 59;
+					length = huff12[119][FIRSTINTAB]; //max
+				}
+                else 
+				{
+					diff = -60;
+					length = huff12[0][FIRSTINTAB]; // min
+				}
                 bit_count+=length;
                 previous_is_factor = scale_factors[index];
                 if (writeFlag == 1 ) {
@@ -1209,8 +1220,19 @@
                 /* only send scalefactors if using non-zero codebooks */
                 diff = scale_factors[index] - previous_scale_factor;
                 if ((diff < 60)&&(diff >= -60))
-                    length = huff12[diff+60][FIRSTINTAB];
-                else length = 0;
+				{
+					length = huff12[diff+60][FIRSTINTAB];
+				}
+                else if ( diff >= 60 ) // frank 30.Oct.2007 added this because faad2 decoder and QuickTime choke when nothing is written and the codebook says a number is expected.
+				{
+					diff = 59;
+					length = huff12[119][FIRSTINTAB]; //max
+				}
+                else 
+				{
+					diff = -60;
+					length = huff12[0][FIRSTINTAB]; //min
+				}
                 bit_count+=length;
                 previous_scale_factor = scale_factors[index];
                 if (writeFlag == 1 ) {