]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/atrac3plus_data.h
lavc: split LSCR decoder out of PNG decoder
[ffmpeg] / libavcodec / atrac3plus_data.h
index 6b9109cb7028b105c08db5adc7dec5e71d6964bb..05ae2b78a9ba8736583a5cac078c5d7538afd23d 100644 (file)
 #include <stdint.h>
 
 /** VLC tables for wordlen */
-static const uint8_t atrac3p_wl_huff1[3][2] = {
-    { 0, 1 }, { 1, 2 }, { 7, 2 },
-};
-
-static const uint8_t atrac3p_wl_huff2[5][2] = {
-    { 0, 1 }, { 1, 3 }, { 2, 3 }, { 6, 3 }, { 7, 3 },
-};
-
-static const uint8_t atrac3p_wl_huff3[8][2] = {
-    { 0, 1 }, { 1, 3 }, { 7, 3 }, { 2, 4 }, { 5, 4 }, { 6, 4 }, { 3, 5 },
-    { 4, 5 },
-};
-
-static const uint8_t atrac3p_wl_huff4[8][2] = {
-    { 0, 1 }, { 1, 3 }, { 7, 3 }, { 2, 4 }, { 3, 4 }, { 6, 4 }, { 4, 5 },
-    { 5, 5 },
-};
-
-/** VLC tables for scale factor indexes */
-static const uint8_t atrac3p_sf_huff1[64][2] = {
-    {  0,  2 }, {  1,  3 }, { 61,  3 }, { 62,  3 }, { 63,  3 }, {  2,  4 },
-    { 60,  4 }, {  3,  8 }, {  4,  8 }, {  5,  8 }, {  6,  8 }, { 57,  8 },
-    { 58,  8 }, { 59,  8 }, {  7,  9 }, {  8,  9 }, {  9,  9 }, { 10,  9 },
-    { 11,  9 }, { 12,  9 }, { 13,  9 }, { 14,  9 }, { 15,  9 }, { 16,  9 },
-    { 17,  9 }, { 18,  9 }, { 19,  9 }, { 20,  9 }, { 21,  9 }, { 22,  9 },
-    { 23,  9 }, { 24,  9 }, { 25,  9 }, { 26,  9 }, { 27,  9 }, { 28,  9 },
-    { 29,  9 }, { 30,  9 }, { 31,  9 }, { 32,  9 }, { 33,  9 }, { 34,  9 },
-    { 35,  9 }, { 36,  9 }, { 37,  9 }, { 38,  9 }, { 39,  9 }, { 40,  9 },
-    { 41,  9 }, { 42,  9 }, { 43,  9 }, { 44,  9 }, { 45,  9 }, { 46,  9 },
-    { 47,  9 }, { 48,  9 }, { 49,  9 }, { 50,  9 }, { 51,  9 }, { 52,  9 },
-    { 53,  9 }, { 54,  9 }, { 55,  9 }, { 56,  9 },
-};
-
-static const uint8_t atrac3p_sf_huff2[64][2] = {
-    {  0,  2 }, {  1,  3 }, {  2,  3 }, { 62,  3 }, { 63,  3 }, {  3,  4 },
-    { 61,  4 }, {  4,  8 }, {  5,  8 }, {  6,  8 }, { 57,  8 }, { 58,  8 },
-    { 59,  8 }, { 60,  8 }, {  7,  9 }, {  8,  9 }, {  9,  9 }, { 10,  9 },
-    { 11,  9 }, { 12,  9 }, { 13,  9 }, { 14,  9 }, { 15,  9 }, { 16,  9 },
-    { 17,  9 }, { 18,  9 }, { 19,  9 }, { 20,  9 }, { 21,  9 }, { 22,  9 },
-    { 23,  9 }, { 24,  9 }, { 25,  9 }, { 26,  9 }, { 27,  9 }, { 28,  9 },
-    { 29,  9 }, { 30,  9 }, { 31,  9 }, { 32,  9 }, { 33,  9 }, { 34,  9 },
-    { 35,  9 }, { 36,  9 }, { 37,  9 }, { 38,  9 }, { 39,  9 }, { 40,  9 },
-    { 41,  9 }, { 42,  9 }, { 43,  9 }, { 44,  9 }, { 45,  9 }, { 46,  9 },
-    { 47,  9 }, { 48,  9 }, { 49,  9 }, { 50,  9 }, { 51,  9 }, { 52,  9 },
-    { 53,  9 }, { 54,  9 }, { 55,  9 }, { 56,  9 },
-};
-
-static const uint8_t atrac3p_sf_huff3[64][2] = {
-    {  0,  1 }, {  1,  3 }, { 63,  3 }, {  2,  5 }, {  3,  5 }, { 61,  5 },
-    { 62,  5 }, {  4,  7 }, { 60,  7 }, { 59,  8 }, {  5,  9 }, {  6,  9 },
-    {  7,  9 }, {  8,  9 }, {  9,  9 }, { 10,  9 }, { 11,  9 }, { 12,  9 },
-    { 13,  9 }, { 14,  9 }, { 15,  9 }, { 16,  9 }, { 17,  9 }, { 18,  9 },
-    { 19,  9 }, { 20,  9 }, { 21,  9 }, { 22,  9 }, { 23,  9 }, { 24,  9 },
-    { 25,  9 }, { 26,  9 }, { 27,  9 }, { 28,  9 }, { 29,  9 }, { 30,  9 },
-    { 31,  9 }, { 32,  9 }, { 33,  9 }, { 34,  9 }, { 35,  9 }, { 36,  9 },
-    { 37,  9 }, { 38,  9 }, { 39,  9 }, { 40,  9 }, { 41,  9 }, { 42,  9 },
-    { 43,  9 }, { 44,  9 }, { 45,  9 }, { 46,  9 }, { 47,  9 }, { 48,  9 },
-    { 49,  9 }, { 50,  9 }, { 51,  9 }, { 52,  9 }, { 53,  9 }, { 54,  9 },
-    { 55,  9 }, { 56,  9 }, { 57,  9 }, { 58,  9 },
-};
-
-static const uint8_t atrac3p_sf_huff4[64][2] = {
-    {  0,  2 }, {  1,  3 }, {  2,  3 }, { 62,  3 }, { 63,  3 }, {  3,  5 },
-    {  4,  5 }, { 60,  5 }, { 61,  5 }, {  5,  7 }, { 58,  7 }, { 59,  7 },
-    {  6,  9 }, {  7,  9 }, {  8,  9 }, {  9,  9 }, { 10,  9 }, { 11,  9 },
-    { 12,  9 }, { 13,  9 }, { 14,  9 }, { 15,  9 }, { 16,  9 }, { 17,  9 },
-    { 18,  9 }, { 19,  9 }, { 20,  9 }, { 21,  9 }, { 22,  9 }, { 23,  9 },
-    { 24,  9 }, { 25,  9 }, { 26,  9 }, { 27,  9 }, { 28,  9 }, { 29,  9 },
-    { 30,  9 }, { 31,  9 }, { 32,  9 }, { 33,  9 }, { 34,  9 }, { 35,  9 },
-    { 36,  9 }, { 37,  9 }, { 38,  9 }, { 39,  9 }, { 40,  9 }, { 41,  9 },
-    { 42,  9 }, { 43,  9 }, { 44,  9 }, { 45,  9 }, { 46,  9 }, { 47,  9 },
-    { 48,  9 }, { 49,  9 }, { 50,  9 }, { 51,  9 }, { 52,  9 }, { 53,  9 },
-    { 54,  9 }, { 55,  9 }, { 56,  9 }, { 57,  9 },
-};
-
-static const uint8_t atrac3p_sf_huff5[15][2] = {
-    {  0,  2 }, {  1,  3 }, { 13,  3 }, { 14,  3 }, { 15,  3 }, {  2,  4 },
-    { 12,  4 }, {  3,  6 }, {  4,  6 }, {  5,  6 }, {  6,  6 }, {  7,  6 },
-    {  9,  6 }, { 10,  6 }, { 11,  6 },
-};
-
-static const uint8_t atrac3p_sf_huff6[15][2] = {
-    {  0,  2 }, {  1,  3 }, {  2,  3 }, { 14,  3 }, { 15,  3 }, {  3,  4 },
-    { 13,  4 }, {  4,  6 }, {  5,  6 }, {  6,  6 }, {  7,  6 }, {  9,  6 },
-    { 10,  6 }, { 11,  6 }, { 12,  6 },
-};
-
-static const uint8_t atrac3p_sf_huff7[15][2] = {
-    {  0,  1 }, {  1,  3 }, { 15,  3 }, {  2,  4 }, { 14,  4 }, {  3,  5 },
-    { 13,  5 }, {  4,  7 }, {  5,  7 }, {  6,  7 }, {  7,  7 }, {  9,  7 },
-    { 10,  7 }, { 11,  7 }, { 12,  7 },
-};
-
-static const uint8_t atrac3p_sf_huff8[15][2] = {
-    {  0,  2 }, {  1,  3 }, {  2,  3 }, { 14,  3 }, { 15,  3 }, {  3,  4 },
-    { 13,  4 }, {  4,  5 }, { 12,  5 }, {  5,  6 }, { 11,  6 }, {  6,  7 },
-    {  7,  7 }, {  9,  7 }, { 10,  7 },
+static const uint8_t atrac3p_wl_cbs[][12] = {
+    {  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+    {  1,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+    {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
+    {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
 };
 
 /** VLC tables for code table indexes */
-static const uint8_t atrac3p_ct_huff1[4][2] = {
-    { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 3 },
+static const uint8_t atrac3p_ct_cbs[][12] = {
+    {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
+    {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
+    {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
+    {  1,  0,  1,  6,  0,  0,  0,  0,  0,  0,  0,  0 },
 };
-
-static const uint8_t atrac3p_ct_huff2[8][2] = {
-    { 0, 2 }, { 1, 3 }, { 2, 3 }, { 3, 3 }, { 4, 3 }, { 5, 3 }, { 6, 4 },
-    { 7, 4 },
+/* Symbols for wordlen interleaved with symbols for code table */
+static const uint8_t atrac3p_wl_ct_xlats[] = {
+    /* wordlen table 1 - 3 entries */
+    0,  1,  7,
+    /* code table 1    - 4 entries */
+    0,  1,  2,  3,
+    /* wordlen table 2 - 5 entries */
+    0,  1,  2,  6,  7,
+    /* code table 2    - 8 entries */
+    0,  1,  2,  3,  4,  5,  6,  7,
+    /* wordlen table 3 - 8 entries */
+    0,  1,  7,  2,  5,  6,  3,  4,
+    /* code table 3    - 8 entries */
+    0,  1,  2,  3,  6,  7,  4,  5,
+    /* wordlen table 4 - 8 entries */
+    0,  1,  7,  2,  3,  6,  4,  5,
+    /* code table 4    - 8 entries */
+    0,  1,  2,  3,  4,  5,  6,  7,
 };
 
-static const uint8_t atrac3p_ct_huff3[8][2] = {
-    { 0, 2 }, { 1, 3 }, { 2, 3 }, { 3, 3 }, { 6, 3 }, { 7, 3 }, { 4, 4 },
-    { 5, 4 },
+/** VLC tables for scale factor indexes */
+static const uint8_t atrac3p_sf_cbs[][12] = {
+    {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
+    {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
+    {  1,  0,  2,  0,  4,  0,  2,  1, 54,  0,  0,  0 },
+    {  0,  1,  4,  0,  4,  0,  3,  0, 52,  0,  0,  0 },
+    {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
+    {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
+    {  1,  0,  2,  2,  2,  0,  8,  0,  0,  0,  0,  0 },
+    {  0,  1,  4,  2,  2,  2,  4,  0,  0,  0,  0,  0 },
 };
 
-static const uint8_t atrac3p_ct_huff4[8][2] = {
-    { 0, 1 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 4 }, { 5, 4 }, { 6, 4 },
-    { 7, 4 },
+static const uint8_t atrac3p_sf_xlats[] = {
+    /* Scale factor index 1 - 64 entries */
+     0,  1, 61, 62, 63,  2, 60,  3,  4,  5,  6, 57, 58, 59,  7,  8,
+     9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+    25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+    /* Scale factor index 2 - 64 entries */
+     0,  1,  2, 62, 63,  3, 61,  4,  5,  6, 57, 58, 59, 60,  7,  8,
+     9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+    25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+    /* Scale factor index 3 - 64 entries */
+     0,  1, 63,  2,  3, 61, 62,  4, 60, 59,  5,  6,  7,  8,  9, 10,
+    11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+    27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+    43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+    /* Scale factor index 4 - 64 entries */
+     0,  1,  2, 62, 63,  3,  4, 60, 61,  5, 58, 59,  6,  7,  8,  9,
+    10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+    42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+    /* Scale factor index 5 - 15 entries */
+     0,  1, 13, 14, 15,  2, 12,  3,  4,  5,  6,  7,  9, 10, 11,
+    /* Scale factor index 6 - 15 entries */
+     0,  1,  2, 14, 15,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
+    /* Scale factor index 7 - 15 entries */
+     0,  1, 15,  2, 14,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
+    /* Scale factor index 8 - 15 entries */
+     0,  1,  2, 14, 15,  3, 13,  4, 12,  5, 11,  6,  7,  9, 10,
 };
 
 /* weights for quantized word lengths */
@@ -416,7 +374,7 @@ static const uint8_t atrac3p_ct_restricted_to_full[2][7][4] = {
 
 /* If the first entry of a subtable is negative, it means
  * that another VLC is to be reused. */
-static int8_t atrac3p_spectra_cbs[][12] = {
+static const int8_t atrac3p_spectra_cbs[][12] = {
     {  1,  0,  0,  1,  7,  0, 19,  5, 13, 21,  6,  8 },
     {  0,  1,  0,  4, 11,  0,  1, 29,  6, 20,  7,  2 },
     {  0,  0,  1,  8,  0, 13, 18,  7,  2,  0,  0,  0 },