add libdca
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 22 Mar 2010 10:43:34 +0000 (11:43 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Mon, 22 Mar 2010 12:03:24 +0000 (13:03 +0100)
conf/checksums.ini
recipes/libdca/files/r83-mark-tables-as-static-constants.patch [new file with mode: 0644]
recipes/libdca/files/r84-normalisation-factor-sqrt2+output-bias.patch [new file with mode: 0644]
recipes/libdca/files/r87-sanity-check-for-subframes-and-prim_channels.patch [new file with mode: 0644]
recipes/libdca/files/r88-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch [new file with mode: 0644]
recipes/libdca/files/r89-avoid-crashing-with-invalid-frames.patch [new file with mode: 0644]
recipes/libdca/libdca_0.0.5.bb [new file with mode: 0644]

index a3e8bcc..e997677 100644 (file)
@@ -15378,6 +15378,10 @@ sha256=5ae76aff042249750437ab7e490ae7d9e19a10f0005cd9bb525106365998aca8
 md5=4de79b323162a5a7652b65b608eca6cd
 sha256=4ab9944398ce769c0deeb64d2f73555c67bc25ccd2ade1ccf552226c7b2acf72
 
+[http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2]
+md5=dab6b2795c66a82a6fcd4f8343343021
+sha256=dba022e022109a5bacbe122d50917769ff27b64a7bba104bd38ced8de8510642
+
 [http://nchipin.kos.to/libddmpeg/libddmpeg_1.5.orig.tar.gz]
 md5=89e59638d31384987d912741986398b6
 sha256=9422e73c55aa921fbbce06e5e01bba0b98bb7a0f1640c27cfd307c290dba792c
diff --git a/recipes/libdca/files/r83-mark-tables-as-static-constants.patch b/recipes/libdca/files/r83-mark-tables-as-static-constants.patch
new file mode 100644 (file)
index 0000000..bdc49b0
--- /dev/null
@@ -0,0 +1,714 @@
+r83 | gbazin | 2008-05-26 12:48:45 +0000 (Mon, 26 May 2008) | 1 line
+Mark tables as static constants. Patch by Diego Flameeyes Petten?\195?\178
+
+--- libdca.orig/libdca/tables_fir.h
++++ libdca/libdca/tables_fir.h
+@@ -21,7 +21,7 @@
+  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+  */
+-double fir_32bands_perfect[] =
++static const double fir_32bands_perfect[] =
+ {
+ +1.135985195E-010,
+ -6.022448247E-007,
+@@ -537,7 +537,7 @@
+ -1.135985195E-010
+ };
+-double fir_32bands_nonperfect[] =
++static const double fir_32bands_nonperfect[] =
+ {
+ -1.390191784E-007,
+ -1.693738625E-007,
+@@ -1053,7 +1053,7 @@
+ +1.390191784E-007
+ };
+-double lfe_fir_64[] =
++static const double lfe_fir_64[] =
+ {
+ 2.6584343868307770E-004,
+ 8.1793652498163280E-005,
+@@ -1569,7 +1569,7 @@
+ 2.6584343868307770E-004
+ };
+-double lfe_fir_128[] =
++static const double lfe_fir_128[] =
+ {
+ 0.00053168571,
+ 0.00016358691,
+--- libdca.orig/libdca/tables_huffman.h
++++ libdca/libdca/tables_huffman.h
+@@ -29,7 +29,7 @@
+ } huff_entry_t;
+-huff_entry_t bitalloc_a_12[] =
++static const huff_entry_t bitalloc_a_12[] =
+ {
+   { 1,     0,  1}, { 2,     2,  2}, { 3,     6,  3}, { 4,    14,  4}, 
+   { 5,    30,  5}, { 6,    62,  6}, { 8,   255,  7}, { 8,   254,  8}, 
+@@ -37,7 +37,7 @@
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_12[] =
++static const huff_entry_t bitalloc_b_12[] =
+ {
+   { 1,     1,  1}, { 2,     0,  2}, { 3,     2,  3}, { 5,    15,  4}, 
+   { 5,    12,  5}, { 6,    29,  6}, { 7,    57,  7}, { 7,    56,  8}, 
+@@ -45,7 +45,7 @@
+   { 0,     0,  0}  
+ };
+-huff_entry_t bitalloc_c_12[] =
++static const huff_entry_t bitalloc_c_12[] =
+ {
+   { 2,     0,  1}, { 3,     7,  2}, { 3,     5,  3}, { 3,     4,  4}, 
+   { 3,     2,  5}, { 4,    13,  6}, { 4,    12,  7}, { 4,     6,  8}, 
+@@ -53,7 +53,7 @@
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_12[] =
++static const huff_entry_t bitalloc_d_12[] =
+ {
+   { 2,     3,  1}, { 2,     2,  2}, { 2,     0,  3}, { 3,     2,  4}, 
+   { 4,     6,  5}, { 5,    14,  6}, { 6,    30,  7}, { 7,    62,  8}, 
+@@ -61,7 +61,7 @@
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_12[] =
++static const huff_entry_t bitalloc_e_12[] =
+ {
+   { 1,     1,  1}, { 2,     0,  2}, { 3,     2,  3}, { 4,     6,  4}, 
+   { 5,    14,  5}, { 7,    63,  6}, { 7,    61,  7}, { 8,   124,  8}, 
+@@ -69,7 +69,7 @@
+   { 0,     0,  0}
+ };
+-huff_entry_t *bitalloc_12[] =
++static const huff_entry_t *const bitalloc_12[] =
+ {
+   bitalloc_a_12,
+   bitalloc_b_12,
+@@ -78,7 +78,7 @@
+   bitalloc_e_12
+ };
+-huff_entry_t scales_a_129[] =
++static const huff_entry_t scales_a_129[] =
+ {
+   { 2,     1,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     0,  2}, 
+   { 4,    15, -2}, { 4,     8,  3}, { 4,     3, -3}, { 5,    28,  4}, 
+@@ -115,7 +115,7 @@
+   {14, 15024,-64}, { 0,     0,  0}
+ };
+-huff_entry_t scales_b_129[] =
++static const huff_entry_t scales_b_129[] =
+ {
+   { 3,     3,  0}, { 3,     2,  1}, { 3,     1, -1}, { 4,    15,  2}, 
+   { 4,    14, -2}, { 4,    12,  3}, { 4,    11, -3}, { 4,    10,  4}, 
+@@ -152,7 +152,7 @@
+   {15,  3936,-64}, { 0,     0,  0}
+ };
+-huff_entry_t scales_c_129[] =
++static const huff_entry_t scales_c_129[] =
+ {
+   { 3,     4,  0}, { 3,     1,  1}, { 3,     0, -1}, { 4,    13,  2}, 
+   { 4,    12, -2}, { 4,     7,  3}, { 4,     6, -3}, { 5,    31,  4}, 
+@@ -189,7 +189,7 @@
+   {15, 20944,-64}, { 0,     0,  0}
+ };
+-huff_entry_t scales_d_129[] =
++static const huff_entry_t scales_d_129[] =
+ {
+   { 2,     0,  0}, { 3,     5,  1}, { 3,     4, -1}, { 4,    15,  2}, 
+   { 4,    14, -2}, { 4,     7,  3}, { 4,     6, -3}, { 5,    26,  4}, 
+@@ -226,7 +226,7 @@
+   {15, 28516,-64}, { 0,     0,  0}
+ };
+-huff_entry_t scales_e_129[] =
++static const huff_entry_t scales_e_129[] =
+ {
+   { 4,    14,  0}, { 4,    11,  1}, { 4,    10, -1}, { 4,     7,  2}, 
+   { 4,     6, -2}, { 4,     3,  3}, { 4,     2, -3}, { 5,    31,  4}, 
+@@ -263,7 +263,7 @@
+   {16, 57172,-64}, { 0,     0,  0}
+ };
+-huff_entry_t *scales_129[] =
++static const huff_entry_t *const scales_129[] =
+ {
+   scales_a_129,
+   scales_b_129,
+@@ -272,36 +272,36 @@
+   scales_e_129
+ };
+-huff_entry_t bitalloc_a_3[] =
++static const huff_entry_t bitalloc_a_3[] =
+ {
+   { 1,     0,  0}, { 2,     2,  1}, { 2,     3, -1}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_4[] =
++static const huff_entry_t bitalloc_a_4[] =
+ {
+   { 1,     0,  0}, { 2,     2,  1}, { 3,     6,  2}, { 3,     7,  3}, 
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_4[] =
++static const huff_entry_t bitalloc_b_4[] =
+ {
+   { 2,     2,  0}, { 3,     6,  1}, { 3,     7,  2}, { 1,     0,  3}, 
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_4[] =
++static const huff_entry_t bitalloc_c_4[] =
+ {
+   { 3,     6,  0}, { 3,     7,  1}, { 1,     0,  2}, { 2,     2,  3}, 
+   { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_4[] =
++static const huff_entry_t bitalloc_d_4[] =
+ {
+   { 2,     0,  0}, { 2,     1,  1}, { 2,     2,  2}, { 2,     3,  3}, 
+   { 0,     0,  0}
+ };
+-huff_entry_t *tmode[] =
++static const huff_entry_t *const tmode[] =
+ {
+   bitalloc_a_4,
+   bitalloc_b_4,
+@@ -309,64 +309,64 @@
+   bitalloc_d_4
+ };
+-huff_entry_t bitalloc_a_5[] =
++static const huff_entry_t bitalloc_a_5[] =
+ {
+   { 1,     0,  0}, { 2,     2,  1}, { 3,     6, -1}, { 4,    14,  2}, 
+   { 4,    15, -2}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_5[] =
++static const huff_entry_t bitalloc_b_5[] =
+ {
+   { 2,     2,  0}, { 2,     0,  1}, { 2,     1, -1}, { 3,     6,  2}, 
+   { 3,     7, -2}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_5[] =
++static const huff_entry_t bitalloc_c_5[] =
+ {
+   { 1,     0,  0}, { 3,     4,  1}, { 3,     5, -1}, { 3,     6,  2}, 
+   { 3,     7, -2}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_7[] =
++static const huff_entry_t bitalloc_a_7[] =
+ {
+   { 1,     0,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     4,  2}, 
+   { 4,    14, -2}, { 5,    31,  3}, { 5,    30, -3}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_7[] =
++static const huff_entry_t bitalloc_b_7[] =
+ {
+   { 2,     3,  0}, { 2,     1,  1}, { 2,     0, -1}, { 3,     4,  2}, 
+   { 4,    11, -2}, { 5,    21,  3}, { 5,    20, -3}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_7[] =
++static const huff_entry_t bitalloc_c_7[] =
+ {
+   { 2,     3,  0}, { 2,     2,  1}, { 2,     1, -1}, { 4,     3,  2}, 
+   { 4,     2, -2}, { 4,     1,  3}, { 4,     0, -3}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_9[] =
++static const huff_entry_t bitalloc_a_9[] =
+ {
+   { 1,     0,  0}, { 3,     7,  1}, { 3,     5, -1}, { 4,    13,  2}, 
+   { 4,     9, -2}, { 4,     8,  3}, { 5,    25, -3}, { 6,    49,  4}, 
+   { 6,    48, -4}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_9[] =
++static const huff_entry_t bitalloc_b_9[] =
+ {
+   { 2,     2,  0}, { 2,     0,  1}, { 3,     7, -1}, { 3,     3,  2}, 
+   { 3,     2, -2}, { 5,    27,  3}, { 5,    26, -3}, { 5,    25,  4}, 
+   { 5,    24, -4}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_9[] =
++static const huff_entry_t bitalloc_c_9[] =
+ {
+   { 2,     2,  0}, { 2,     0,  1}, { 3,     7, -1}, { 3,     6,  2}, 
+   { 3,     2, -2}, { 4,     6,  3}, { 5,    15, -3}, { 6,    29,  4}, 
+   { 6,    28, -4}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_13[] =
++static const huff_entry_t bitalloc_a_13[] =
+ {
+   { 1,     0,  0}, { 3,     4,  1}, { 4,    15, -1}, { 4,    13,  2}, 
+   { 4,    12, -2}, { 4,    10,  3}, { 5,    29, -3}, { 5,    22,  4}, 
+@@ -374,7 +374,7 @@
+   { 7,   112, -6}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_13[] =
++static const huff_entry_t bitalloc_b_13[] =
+ {
+   { 2,     0,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     2,  2}, 
+   { 4,    15, -2}, { 4,     9,  3}, { 4,     7, -3}, { 4,     6,  4}, 
+@@ -382,7 +382,7 @@
+   { 6,    56, -6}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_13[] =
++static const huff_entry_t bitalloc_c_13[] =
+ {
+   { 3,     5,  0}, { 3,     4,  1}, { 3,     3, -1}, { 3,     2,  2}, 
+   { 3,     0, -2}, { 4,    15,  3}, { 4,    14, -3}, { 4,    12,  4}, 
+@@ -390,7 +390,7 @@
+   { 5,     4, -6}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_17[] =
++static const huff_entry_t bitalloc_a_17[] =
+ {
+   { 2,     1,  0}, { 3,     7,  1}, { 3,     6, -1}, { 3,     4,  2}, 
+   { 3,     1, -2}, { 4,    11,  3}, { 4,    10, -3}, { 4,     0,  4}, 
+@@ -399,7 +399,7 @@
+   {12,   340, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_17[] =
++static const huff_entry_t bitalloc_b_17[] =
+ {
+   { 2,     0,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     2,  2}, 
+   { 4,    15, -2}, { 4,     9,  3}, { 4,     8, -3}, { 5,    29,  4}, 
+@@ -408,7 +408,7 @@
+   { 8,   124, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_17[] =
++static const huff_entry_t bitalloc_c_17[] =
+ {
+   { 3,     6,  0}, { 3,     4,  1}, { 3,     3, -1}, { 3,     0,  2}, 
+   { 4,    15, -2}, { 4,    11,  3}, { 4,    10, -3}, { 4,     4,  4}, 
+@@ -417,7 +417,7 @@
+   { 7,    44, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_17[] =
++static const huff_entry_t bitalloc_d_17[] =
+ {
+   { 1,     0,  0}, { 3,     7,  1}, { 3,     6, -1}, { 4,    11,  2}, 
+   { 4,    10, -2}, { 5,    19,  3}, { 5,    18, -3}, { 6,    35,  4}, 
+@@ -426,7 +426,7 @@
+   { 9,   256, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_17[] =
++static const huff_entry_t bitalloc_e_17[] =
+ {
+   { 1,     0,  0}, { 3,     5,  1}, { 3,     4, -1}, { 4,    12,  2}, 
+   { 5,    31, -2}, { 5,    28,  3}, { 5,    27, -3}, { 6,    60,  4}, 
+@@ -435,7 +435,7 @@
+   { 8,   232, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_f_17[] =
++static const huff_entry_t bitalloc_f_17[] =
+ {
+   { 3,     6,  0}, { 3,     5,  1}, { 3,     4, -1}, { 3,     2,  2}, 
+   { 3,     1, -2}, { 4,    15,  3}, { 4,    14, -3}, { 4,     6,  4}, 
+@@ -444,7 +444,7 @@
+   { 8,     4, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_g_17[] =
++static const huff_entry_t bitalloc_g_17[] =
+ {
+   { 2,     2,  0}, { 3,     7,  1}, { 3,     6, -1}, { 3,     1,  2}, 
+   { 3,     0, -2}, { 4,     5,  3}, { 4,     4, -3}, { 5,    14,  4}, 
+@@ -453,7 +453,7 @@
+   { 8,    96, -8}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_25[] =
++static const huff_entry_t bitalloc_a_25[] =
+ {
+   { 3,     6,  0}, { 3,     4,  1}, { 3,     3, -1}, { 3,     1,  2}, 
+   { 3,     0, -2}, { 4,    15,  3}, { 4,    14, -3}, { 4,     5,  4}, 
+@@ -464,7 +464,7 @@
+   {14, 10324,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_25[] =
++static const huff_entry_t bitalloc_b_25[] =
+ {
+   { 3,     5,  0}, { 3,     2,  1}, { 3,     1, -1}, { 4,    15,  2}, 
+   { 4,    14, -2}, { 4,     9,  3}, { 4,     8, -3}, { 4,     6,  4}, 
+@@ -475,7 +475,7 @@
+   { 9,    28,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_25[] =
++static const huff_entry_t bitalloc_c_25[] =
+ {
+   { 3,     1,  0}, { 4,    15,  1}, { 4,    14, -1}, { 4,    12,  2}, 
+   { 4,    11, -2}, { 4,     9,  3}, { 4,     8, -3}, { 4,     6,  4}, 
+@@ -486,7 +486,7 @@
+   { 8,    76,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_25[] =
++static const huff_entry_t bitalloc_d_25[] =
+ {
+   { 2,     2,  0}, { 3,     7,  1}, { 3,     6, -1}, { 3,     1,  2}, 
+   { 3,     0, -2}, { 4,     5,  3}, { 4,     4, -3}, { 5,    13,  4}, 
+@@ -497,7 +497,7 @@
+   {12,  1920,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_25[] =
++static const huff_entry_t bitalloc_e_25[] =
+ {
+   { 2,     3,  0}, { 3,     3,  1}, { 3,     2, -1}, { 4,    11,  2}, 
+   { 4,    10, -2}, { 4,     1,  3}, { 4,     0, -3}, { 5,    17,  4}, 
+@@ -508,7 +508,7 @@
+   { 8,    60,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_f_25[] =
++static const huff_entry_t bitalloc_f_25[] =
+ {
+   { 3,     1,  0}, { 3,     0,  1}, { 4,    15, -1}, { 4,    14,  2}, 
+   { 4,    13, -2}, { 4,    11,  3}, { 4,    10, -3}, { 4,     8,  4}, 
+@@ -519,7 +519,7 @@
+   {10,   804,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_g_25[] =
++static const huff_entry_t bitalloc_g_25[] =
+ {
+   { 2,     1,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     0,  2}, 
+   { 4,    15, -2}, { 4,     8,  3}, { 4,     3, -3}, { 5,    28,  4}, 
+@@ -530,7 +530,7 @@
+   {10,   936,-12}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_33[] =
++static const huff_entry_t bitalloc_a_33[] =
+ {
+   { 3,     2,  0}, { 3,     1,  1}, { 3,     0, -1}, { 4,    14,  2}, 
+   { 4,    13, -2}, { 4,    12,  3}, { 4,    11, -3}, { 4,     9,  4}, 
+@@ -543,7 +543,7 @@
+   {13,  5504,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_33[] =
++static const huff_entry_t bitalloc_b_33[] =
+ {
+   { 3,     1,  0}, { 4,    15,  1}, { 4,    14, -1}, { 4,    11,  2}, 
+   { 4,    10, -2}, { 4,     8,  3}, { 4,     7, -3}, { 4,     4,  4}, 
+@@ -556,7 +556,7 @@
+   {10,   780,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_33[] =
++static const huff_entry_t bitalloc_c_33[] =
+ {
+   { 4,    13,  0}, { 4,    11,  1}, { 4,    10, -1}, { 4,     8,  2}, 
+   { 4,     7, -2}, { 4,     4,  3}, { 4,     3, -3}, { 4,     2,  4}, 
+@@ -569,7 +569,7 @@
+   { 9,   204,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_33[] =
++static const huff_entry_t bitalloc_d_33[] =
+ {
+   { 2,     1,  0}, { 3,     6,  1}, { 3,     5, -1}, { 3,     0,  2}, 
+   { 4,    15, -2}, { 4,     8,  3}, { 4,     3, -3}, { 5,    28,  4}, 
+@@ -582,7 +582,7 @@
+   {14, 15096,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_33[] =
++static const huff_entry_t bitalloc_e_33[] =
+ {
+   { 2,     2,  0}, { 3,     2,  1}, { 3,     1, -1}, { 4,    12,  2}, 
+   { 4,     7, -2}, { 4,     0,  3}, { 5,    31, -3}, { 5,    27,  4}, 
+@@ -595,7 +595,7 @@
+   { 9,   456,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_f_33[] =
++static const huff_entry_t bitalloc_f_33[] =
+ {
+   { 4,    13,  0}, { 4,    12,  1}, { 4,    11, -1}, { 4,     9,  2}, 
+   { 4,     8, -2}, { 4,     7,  3}, { 4,     6, -3}, { 4,     4,  4}, 
+@@ -608,7 +608,7 @@
+   {11,  1828,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_g_33[] =
++static const huff_entry_t bitalloc_g_33[] =
+ {
+   { 3,     6,  0}, { 3,     3,  1}, { 3,     2, -1}, { 4,    15,  2}, 
+   { 4,    14, -2}, { 4,     9,  3}, { 4,     8, -3}, { 4,     1,  4}, 
+@@ -621,7 +621,7 @@
+   {10,   644,-16}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_65[] =
++static const huff_entry_t bitalloc_a_65[] =
+ {
+   { 4,     6,  0}, { 4,     5,  1}, { 4,     4, -1}, { 4,     2,  2}, 
+   { 4,     1, -2}, { 4,     0,  3}, { 5,    31, -3}, { 5,    29,  4}, 
+@@ -642,7 +642,7 @@
+   {16, 40540,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_65[] =
++static const huff_entry_t bitalloc_b_65[] =
+ {
+   { 4,     4,  0}, { 4,     2,  1}, { 4,     1, -1}, { 5,    30,  2}, 
+   { 5,    29, -2}, { 5,    26,  3}, { 5,    25, -3}, { 5,    23,  4}, 
+@@ -663,7 +663,7 @@
+   {12,  2700,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_65[] =
++static const huff_entry_t bitalloc_c_65[] =
+ {
+   { 5,    28,  0}, { 5,    25,  1}, { 5,    24, -1}, { 5,    23,  2}, 
+   { 5,    22, -2}, { 5,    19,  3}, { 5,    18, -3}, { 5,    16,  4}, 
+@@ -684,7 +684,7 @@
+   {11,  1116,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_65[] =
++static const huff_entry_t bitalloc_d_65[] =
+ {
+   { 3,     4,  0}, { 3,     1,  1}, { 3,     0, -1}, { 4,    13,  2}, 
+   { 4,    12, -2}, { 4,     7,  3}, { 4,     6, -3}, { 5,    31,  4}, 
+@@ -705,7 +705,7 @@
+   {15, 28848,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_65[] =
++static const huff_entry_t bitalloc_e_65[] =
+ {
+   { 3,     4,  0}, { 3,     0,  1}, { 4,    15, -1}, { 4,     7,  2}, 
+   { 4,     6, -2}, { 5,    29,  3}, { 5,    28, -3}, { 5,    23,  4}, 
+@@ -726,7 +726,7 @@
+   {10,   812,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_f_65[] =
++static const huff_entry_t bitalloc_f_65[] =
+ {
+   { 3,     6,  0}, { 3,     3,  1}, { 3,     2, -1}, { 4,    15,  2}, 
+   { 4,    14, -2}, { 4,     9,  3}, { 4,     8, -3}, { 4,     1,  4}, 
+@@ -747,7 +747,7 @@
+   {14,  4064,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_g_65[] =
++static const huff_entry_t bitalloc_g_65[] =
+ {
+   { 4,    14,  0}, { 4,    11,  1}, { 4,    10, -1}, { 4,     8,  2}, 
+   { 4,     6, -2}, { 4,     4,  3}, { 4,     3, -3}, { 4,     0,  4}, 
+@@ -768,7 +768,7 @@
+   {11,   268,-32}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_a_129[] =
++static const huff_entry_t bitalloc_a_129[] =
+ {
+   { 4,     8,  0}, { 4,    10,  1}, { 4,     9, -1}, { 4,     0,  2}, 
+   { 5,    31, -2}, { 5,    24,  3}, { 5,    23, -3}, { 5,    12,  4}, 
+@@ -805,7 +805,7 @@
+   {11,  1632,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_b_129[] =
++static const huff_entry_t bitalloc_b_129[] =
+ {
+   { 5,    10,  0}, { 5,     7,  1}, { 5,     6, -1}, { 5,     4,  2}, 
+   { 5,     3, -2}, { 5,     0,  3}, { 6,    63, -3}, { 6,    60,  4}, 
+@@ -842,7 +842,7 @@
+   {14, 10716,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_c_129[] =
++static const huff_entry_t bitalloc_c_129[] =
+ {
+   { 6,    58,  0}, { 6,    55,  1}, { 6,    54, -1}, { 6,    52,  2}, 
+   { 6,    51, -2}, { 6,    49,  3}, { 6,    48, -3}, { 6,    46,  4}, 
+@@ -879,7 +879,7 @@
+   {13,  3676,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_d_129[] =
++static const huff_entry_t bitalloc_d_129[] =
+ {
+   { 4,     9,  0}, { 4,     6,  1}, { 4,     5, -1}, { 4,     2,  2}, 
+   { 4,     1, -2}, { 5,    30,  3}, { 5,    29, -3}, { 5,    26,  4}, 
+@@ -916,7 +916,7 @@
+   {16, 42392,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_e_129[] =
++static const huff_entry_t bitalloc_e_129[] =
+ {
+   { 5,    12,  0}, { 5,    11,  1}, { 5,    10, -1}, { 5,     9,  2}, 
+   { 5,     8, -2}, { 5,     7,  3}, { 5,     6, -3}, { 5,     4,  4}, 
+@@ -953,7 +953,7 @@
+   {16, 41276,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_f_129[] =
++static const huff_entry_t bitalloc_f_129[] =
+ {
+   { 6,    56,  0}, { 6,    55,  1}, { 6,    54, -1}, { 6,    52,  2}, 
+   { 6,    51, -2}, { 6,    50,  3}, { 6,    49, -3}, { 6,    48,  4}, 
+@@ -990,7 +990,7 @@
+   {15, 30252,-64}, { 0,     0,  0}
+ };
+-huff_entry_t bitalloc_g_129[] =
++static const huff_entry_t bitalloc_g_129[] =
+ {
+   { 4,     0,  0}, { 5,    29,  1}, { 5,    28, -1}, { 5,    25,  2}, 
+   { 5,    24, -2}, { 5,    21,  3}, { 5,    20, -3}, { 5,    17,  4}, 
+@@ -1027,7 +1027,7 @@
+   {13,  7712,-64}, { 0,     0,  0}
+ };
+-huff_entry_t *bitalloc_select[11][8] =
++static const huff_entry_t *const bitalloc_select[11][8] =
+ {
+   { 0 },
+   { bitalloc_a_3, 0 },
+@@ -1047,7 +1047,7 @@
+     bitalloc_e_129, bitalloc_f_129, bitalloc_g_129, 0 },
+ };
+-static int InverseQ( dca_state_t * state, huff_entry_t * huff )
++static int InverseQ( dca_state_t * state, const huff_entry_t * huff )
+ {
+     int value = 0;
+     int length = 0, j;
+--- libdca.orig/libdca/tables_quantization.h
++++ libdca/libdca/tables_quantization.h
+@@ -21,7 +21,7 @@
+  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+  */
+-int scale_factor_quant6[] =
++static const int scale_factor_quant6[] =
+ {
+         1,       2,       2,       3,       3,       4,       6,       7, 
+        10,      12,      16,      20,      26,      34,      44,      56, 
+@@ -33,7 +33,7 @@
+   1819701, 2344229, 3019952, 3890451, 5011872, 6456542, 8317638,       0
+ };
+-int scale_factor_quant7[] =
++static const int scale_factor_quant7[] =
+ {
+         1,       1,       2,       2,       2,       2,       3,       3, 
+         3,       4,       4,       5,       6,       7,       7,       8, 
+@@ -54,7 +54,7 @@
+ };
+ /* 20bits unsigned fractional binary codes */
+-int lossy_quant[] =
++static const int lossy_quant[] =
+ {
+         0, 6710886, 4194304, 3355443, 2474639, 2097152, 1761608, 1426063, 
+    796918,  461373,  251658,  146801,   79692,   46137,   27263,   16777, 
+@@ -62,7 +62,7 @@
+        84,      42,      21,       0,       0,       0,       0,       0
+ };
+-double lossy_quant_d[] =
++static const double lossy_quant_d[] =
+ {
+           0,     1.6,      1.0,     0.8,    0.59,    0.50,    0.42,    0.34, 
+        0.19,    0.11,     0.06,   0.035,   0.019,   0.011,  0.0065,  0.0040, 
+@@ -71,7 +71,7 @@
+ };
+ /* 20bits unsigned fractional binary codes */
+-int lossless_quant[] =
++static const int lossless_quant[] =
+ {
+         0, 4194304, 2097152, 1384120, 1048576,  696254,  524288,  348127, 
+    262144,  131072,   65431,   33026,   16450,    8208,    4100,    2049, 
+@@ -79,7 +79,7 @@
+         4,       2,       1,       0,       0,       0,       0,       0
+ };
+-double lossless_quant_d[] =
++static const double lossless_quant_d[] =
+ {
+     0,             1.0,      0.5,     0.33,     0.25,    0.166,    0.125,
+     0.083,      0.0625,  0.03125,   0.0156, 7.874E-3, 3.922E-3, 1.957E-3,
+--- libdca.orig/libdca/parse.c
++++ libdca/libdca/parse.c
+@@ -548,7 +548,7 @@
+     /* Scale factors */
+     for (j = 0; j < state->prim_channels; j++)
+     {
+-        int *scale_table;
++        const int *scale_table;
+         int scale_sum;
+         for (k = 0; k < state->subband_activity[j]; k++)
+@@ -761,7 +761,7 @@
+     int k, l;
+     int subsubframe = state->current_subsubframe;
+-    double *quant_step_table;
++    const double *quant_step_table;
+     /* FIXME */
+     double subband_samples[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
+@@ -1145,7 +1145,7 @@
+                              double samples_in[32][8], sample_t *samples_out,
+                              double scale, sample_t bias)
+ {
+-    double *prCoeff;
++    const double *prCoeff;
+     int i, j, k;
+     double raXin[32];
+@@ -1236,7 +1236,7 @@
+      */
+     int nDeciFactor, k, J;
+-    double *prCoeff;
++    const double *prCoeff;
+     int NumFIRCoef = 512; /* Number of FIR coefficients */
+     int nInterpIndex = 0; /* Index to the interpolated samples */
diff --git a/recipes/libdca/files/r84-normalisation-factor-sqrt2+output-bias.patch b/recipes/libdca/files/r84-normalisation-factor-sqrt2+output-bias.patch
new file mode 100644 (file)
index 0000000..acdb9f0
--- /dev/null
@@ -0,0 +1,107 @@
+r84 | gbazin | 2008-06-01 16:13:33 +0000 (Sun, 01 Jun 2008) | 3 lines
+  * libdca/parse.c: Change output normalisation factor from 3/2 to sqrt(2).
+    Thanks to Alexander E. Patrakov for finding that this is the proper normalisation factor.
+    Fixed a bug where the output bias wasn't applied when downmixing wasn't being done.
+
+--- libdca.orig/libdca/parse.c
++++ libdca/libdca/parse.c
+@@ -59,12 +59,11 @@
+ static int decode_blockcode (int code, int levels, int *values);
+ static void qmf_32_subbands (dca_state_t * state, int chans,
+-                             double samples_in[32][8], sample_t *samples_out,
+-                             double rScale, sample_t bias);
++                             double samples_in[32][8], sample_t *samples_out);
+ static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
+                                    double *samples_in, sample_t *samples_out,
+-                                   double rScale, sample_t bias );
++                                   sample_t bias);
+ static void pre_calc_cosmod( dca_state_t * state );
+@@ -123,7 +122,9 @@
+     bitstream_get (state, 1);
+     *frame_length = (bitstream_get (state, 7) + 1) * 32;
++    if (*frame_length < 6 * 32) return 0;
+     frame_size = bitstream_get (state, 14) + 1;
++    if (frame_size < 96) return 0;
+     if (!state->word_mode) frame_size = frame_size * 8 / 14 * 2;
+     /* Audio channel arrangement */
+@@ -981,14 +982,7 @@
+     /* 32 subbands QMF */
+     for (k = 0; k < state->prim_channels; k++)
+     {
+-        /*static double pcm_to_float[8] =
+-            {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
+-
+-        qmf_32_subbands (state, k,
+-                         subband_samples[k],
+-                         &state->samples[256*k],
+-          /*WTF ???*/    32768.0*3/2/*pcm_to_float[state->source_pcm_res]*/,
+-                         0/*state->bias*/);
++        qmf_32_subbands (state, k, subband_samples[k], &state->samples[256*k]);
+     }
+     /* Down/Up mixing */
+@@ -1000,6 +994,10 @@
+     {
+         dca_downmix (state->samples, state->amode, state->output, state->bias,
+                      state->clev, state->slev);
++    } else if (state->bias)
++    {
++        for ( k = 0; k < 256*state->prim_channels; k++ )
++            state->samples[k] += state->bias;
+     }
+     /* Generate LFE samples for this subsubframe FIXME!!! */
+@@ -1011,8 +1009,7 @@
+         lfe_interpolation_fir (state->lfe, 2 * state->lfe,
+                                state->lfe_data + lfe_samples +
+                                2 * state->lfe * subsubframe,
+-                               &state->samples[256*i_channels],
+-                               8388608.0, state->bias);
++                               &state->samples[256*i_channels], state->bias);
+         /* Outputs 20bits pcm samples */
+     }
+@@ -1142,9 +1139,9 @@
+ }
+ static void qmf_32_subbands (dca_state_t * state, int chans,
+-                             double samples_in[32][8], sample_t *samples_out,
+-                             double scale, sample_t bias)
++                             double samples_in[32][8], sample_t *samples_out)
+ {
++    static const double scale = 1.4142135623730951 /* sqrt(2) */ * 32768.0;
+     const double *prCoeff;
+     int i, j, k;
+     double raXin[32];
+@@ -1211,7 +1208,7 @@
+         /* Create 32 PCM output samples */
+         for (i=0;i<32;i++)
+-            samples_out[nChIndex++] = subband_fir_hist2[i] / scale + bias;
++            samples_out[nChIndex++] = subband_fir_hist2[i] / scale;
+         /* Update working arrays */
+         for (i=511;i>=32;i--)
+@@ -1225,7 +1222,7 @@
+ static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
+                                    double *samples_in, sample_t *samples_out,
+-                                   double scale, sample_t bias)
++                                   sample_t bias)
+ {
+     /* samples_in: An array holding decimated samples.
+      *   Samples in current subframe starts from samples_in[0],
+@@ -1235,6 +1232,7 @@
+      * samples_out: An array holding interpolated samples
+      */
++    static const double scale = 8388608.0;
+     int nDeciFactor, k, J;
+     const double *prCoeff;
diff --git a/recipes/libdca/files/r87-sanity-check-for-subframes-and-prim_channels.patch b/recipes/libdca/files/r87-sanity-check-for-subframes-and-prim_channels.patch
new file mode 100644 (file)
index 0000000..af1a998
--- /dev/null
@@ -0,0 +1,22 @@
+r87 | sam | 2008-07-18 19:22:47 +0000 (Fri, 18 Jul 2008) | 2 lines
+  * parse.c: sanity check for subframes and prim_channels to avoid crashes
+    with invalid streams.
+
+--- libdca.orig/libdca/parse.c
++++ libdca/libdca/parse.c
+@@ -305,8 +305,15 @@
+     /* Primary audio coding header */
+     state->subframes = bitstream_get (state, 4) + 1;
++
++    if (state->subframes > DCA_SUBFRAMES_MAX)
++        state->subframes = DCA_SUBFRAMES_MAX;
++
+     state->prim_channels = bitstream_get (state, 3) + 1;
++    if (state->prim_channels > DCA_PRIM_CHANNELS_MAX)
++        state->prim_channels = DCA_PRIM_CHANNELS_MAX;
++
+ #ifdef DEBUG
+     fprintf (stderr, "subframes: %i\n", state->subframes);
+     fprintf (stderr, "prim channels: %i\n", state->prim_channels);
diff --git a/recipes/libdca/files/r88-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch b/recipes/libdca/files/r88-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch
new file mode 100644 (file)
index 0000000..e36b48b
--- /dev/null
@@ -0,0 +1,43 @@
+r88 | sam | 2008-07-19 22:26:13 +0000 (Sat, 19 Jul 2008) | 2 lines
+  * bitstream.c: fix random crashes caused by invalid 32-bit shifts on 32-bit
+    values.
+
+--- libdca.orig/libdca/bitstream.c
++++ libdca/libdca/bitstream.c
+@@ -25,6 +25,7 @@
+ #include "config.h"
++#include <stdio.h>
+ #include <inttypes.h>
+ #include "dca.h"
+@@ -46,7 +47,7 @@
+     state->bigendian_mode = bigendian_mode;
+     bitstream_get (state, align * 8);
+ }
+-#include<stdio.h>
++
+ static inline void bitstream_fill_current (dca_state_t * state)
+ {
+     uint32_t tmp;
+@@ -76,12 +77,14 @@
+ uint32_t dca_bitstream_get_bh (dca_state_t * state, uint32_t num_bits)
+ {
+-    uint32_t result;
+-
+-    num_bits -= state->bits_left;
++    uint32_t result = 0;
+-    result = ((state->current_word << (32 - state->bits_left)) >>
+-            (32 - state->bits_left));
++    if (state->bits_left)
++    {
++      num_bits -= state->bits_left;
++        result = ((state->current_word << (32 - state->bits_left)) >>
++                (32 - state->bits_left));
++    }
+     if ( !state->word_mode && num_bits > 28 ) {
+         bitstream_fill_current (state);
diff --git a/recipes/libdca/files/r89-avoid-crashing-with-invalid-frames.patch b/recipes/libdca/files/r89-avoid-crashing-with-invalid-frames.patch
new file mode 100644 (file)
index 0000000..53734e1
--- /dev/null
@@ -0,0 +1,26 @@
+r89 | sam | 2008-07-19 22:26:17 +0000 (Sat, 19 Jul 2008) | 2 lines
+  * parse.c: avoid crashing with invalid frames setting a bitalloc_huffman
+    component to 7.
+
+--- libdca.orig/libdca/parse.c
++++ libdca/libdca/parse.c
+@@ -364,7 +364,10 @@
+     for (i = 0; i < state->prim_channels; i++)
+     {
+         state->bitalloc_huffman[i] = bitstream_get (state, 3);
+-        /* if (state->bitalloc_huffman[i] == 7) bailout */
++        /* There might be a way not to trash the whole frame, but for
++         * now we must bail out or we will buffer overflow later. */
++        if (state->bitalloc_huffman[i] == 7)
++            return 1;
+ #ifdef DEBUG
+         fprintf (stderr, "bit allocation quantizer: %i\n",
+                  state->bitalloc_huffman[i]);
+@@ -541,6 +544,7 @@
+                 k < state->vq_start_subband[j] &&
+                 state->bitalloc[j][k] > 0)
+             {
++                /* tmode cannot overflow since transient_huffman[j] < 4 */
+                 state->transition_mode[j][k] = InverseQ (state,
+                     tmode[state->transient_huffman[j]]);
+             }
diff --git a/recipes/libdca/libdca_0.0.5.bb b/recipes/libdca/libdca_0.0.5.bb
new file mode 100644 (file)
index 0000000..8470138
--- /dev/null
@@ -0,0 +1,32 @@
+DESCRIPTION = "Library for decoding dts audio to wav"
+LICENSE = "GPL"
+SECTION = "libs"
+PRIORITY = "optional"
+PR = "r0"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2 \
+       file://r83-mark-tables-as-static-constants.patch;patch=1 \
+       file://r84-normalisation-factor-sqrt2+output-bias.patch;patch=1 \
+       file://r87-sanity-check-for-subframes-and-prim_channels.patch;patch=1 \
+       file://r88-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch;patch=1 \
+       file://r89-avoid-crashing-with-invalid-frames.patch;patch=1 \
+"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+EXTRA_OECONF = " --with-gnu-ld"
+
+PACKAGES =+ "dcadec dcadec-doc"
+
+FILES_${PN} = " ${libdir}/libdca.s* "
+FILES_${PN}-dev = " ${includedir}/*.h ${libdir}/libdca.* ${libdir}/pkgconfig/* "
+FILES_${PN}-dbg += " ${libdir}/.debug/*"
+FILES_dcadec = " ${bindir}/* "
+FILES_dcadec-dbg += " ${bindir}/.debug/* "
+FILES_dcadec-doc = " ${mandir}/man1/* "
+
+do_stage() {
+       autotools_stage_all
+}