dts_parse.c
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:41k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.  * parse.c
  3.  * Copyright (C) 2004 Gildas Bazin <gbazin@videolan.org>
  4.  *
  5.  * This file is part of dtsdec, a free DTS Coherent Acoustics stream decoder.
  6.  * See http://www.videolan.org/dtsdec.html for updates.
  7.  *
  8.  * dtsdec is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * dtsdec is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21.  */
  22. #include "config.h"
  23. #include <stdio.h>
  24. //#include <stdlib.h>
  25. void    __cdecl free(void *);
  26. void *  __cdecl malloc(size_t);
  27. #include <string.h>
  28. #include <inttypes.h>
  29. #include <math.h>
  30. #ifndef M_PI
  31. #define M_PI 3.1415926535897932384626433832795029
  32. #endif
  33. #include "dts.h"
  34. #include "dts_internal.h"
  35. #include "bitstream.h"
  36. #include "tables.h"
  37. #include "tables_huffman.h"
  38. #include "tables_quantization.h"
  39. #include "tables_adpcm.h"
  40. #include "tables_fir.h"
  41. #include "tables_vq.h"
  42. /* #define DEBUG */
  43. #if defined(HAVE_MEMALIGN) && !defined(__cplusplus)
  44. /* some systems have memalign() but no declaration for it */
  45. void * memalign (size_t align, size_t size);
  46. #else
  47. /* assume malloc alignment is sufficient */
  48. #define memalign(align,size) malloc (size)
  49. #endif
  50. static int decode_blockcode (int code, int levels, int *values);
  51. static void qmf_32_subbands (dts_state_t * state, int chans,
  52.                              double samples_in[32][8], sample_t *samples_out,
  53.                              double rScale, sample_t bias);
  54. static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
  55.                                    double *samples_in, sample_t *samples_out,
  56.                                    double rScale, sample_t bias );
  57. static void pre_calc_cosmod( dts_state_t * state );
  58. dts_state_t * dts_init (uint32_t mm_accel)
  59. {
  60.     dts_state_t * state;
  61.     int i;
  62.     state = (dts_state_t *) malloc (sizeof (dts_state_t));
  63.     if (state == NULL)
  64.         return NULL;
  65.     memset (state, 0, sizeof(dts_state_t));
  66.     state->samples = (sample_t *) memalign (16, 256 * 12 * sizeof (sample_t));
  67.     if (state->samples == NULL) {
  68.         free (state);
  69.         return NULL;
  70.     }
  71.     for (i = 0; i < 256 * 12; i++)
  72.         state->samples[i] = 0;
  73.     /* Pre-calculate cosine modulation coefficients */
  74.     pre_calc_cosmod( state );
  75.     state->downmixed = 1;
  76.     return state;
  77. }
  78. sample_t * dts_samples (dts_state_t * state)
  79. {
  80.     return state->samples;
  81. }
  82. int dts_blocks_num (dts_state_t * state)
  83. {
  84.     /* 8 samples per subsubframe and per subband */
  85.     return state->sample_blocks / 8;
  86. }
  87. static int syncinfo (dts_state_t * state, int * flags,
  88.                      int * sample_rate, int * bit_rate, int * frame_length)
  89. {
  90.     int frame_size;
  91.     /* Sync code */
  92.     bitstream_get (state, 32);
  93.     /* Frame type */
  94.     bitstream_get (state, 1);
  95.     /* Samples deficit */
  96.     bitstream_get (state, 5);
  97.     /* CRC present */
  98.     bitstream_get (state, 1);
  99.     *frame_length = (bitstream_get (state, 7) + 1) * 32;
  100.     frame_size = bitstream_get (state, 14) + 1;
  101.     if (!state->word_mode) frame_size = frame_size * 8 / 14 * 2;
  102.     /* Audio channel arrangement */
  103.     *flags = bitstream_get (state, 6);
  104.     if (*flags > 63)
  105.         return 0;
  106.     *sample_rate = bitstream_get (state, 4);
  107.     if (*sample_rate >= sizeof (dts_sample_rates) / sizeof (int))
  108.         return 0;
  109.     *sample_rate = dts_sample_rates[ *sample_rate ];
  110.     if (!*sample_rate) return 0;
  111.     *bit_rate = bitstream_get (state, 5);
  112.     if (*bit_rate >= sizeof (dts_bit_rates) / sizeof (int))
  113.         return 0;
  114.     *bit_rate = dts_bit_rates[ *bit_rate ];
  115.     if (!*bit_rate) return 0;
  116.     /* LFE */
  117.     bitstream_get (state, 10);
  118.     if (bitstream_get (state, 2)) *flags |= DTS_LFE;
  119.     return frame_size;
  120. }
  121. int dts_syncinfo (dts_state_t * state, uint8_t * buf, int * flags,
  122.                   int * sample_rate, int * bit_rate, int * frame_length)
  123. {
  124.     /*
  125.      * Look for sync code
  126.      */
  127.     /* 14 bits and little endian bitstream */
  128.     if (buf[0] == 0xff && buf[1] == 0x1f &&
  129.         buf[2] == 0x00 && buf[3] == 0xe8 &&
  130.         (buf[4] & 0xf0) == 0xf0 && buf[5] == 0x07)
  131.     {
  132.         int frame_size;
  133.         dts_bitstream_init (state, buf, 0, 0);
  134.         frame_size = syncinfo (state, flags, sample_rate,
  135.                                bit_rate, frame_length);
  136.         return frame_size;
  137.     }
  138.     /* 14 bits and big endian bitstream */
  139.     if (buf[0] == 0x1f && buf[1] == 0xff &&
  140.         buf[2] == 0xe8 && buf[3] == 0x00 &&
  141.         buf[4] == 0x07 && (buf[5] & 0xf0) == 0xf0)
  142.     {
  143.         int frame_size;
  144.         dts_bitstream_init (state, buf, 0, 1);
  145.         frame_size = syncinfo (state, flags, sample_rate,
  146.                                bit_rate, frame_length);
  147.         return frame_size;
  148.     }
  149.     /* 16 bits and little endian bitstream */
  150.     if (buf[0] == 0xfe && buf[1] == 0x7f &&
  151.         buf[2] == 0x01 && buf[3] == 0x80)
  152.     {
  153.         int frame_size;
  154.         dts_bitstream_init (state, buf, 1, 0);
  155.         frame_size = syncinfo (state, flags, sample_rate,
  156.                                bit_rate, frame_length);
  157.         return frame_size;
  158.     }
  159.     /* 16 bits and big endian bitstream */
  160.     if (buf[0] == 0x7f && buf[1] == 0xfe &&
  161.         buf[2] == 0x80 && buf[3] == 0x01)
  162.     {
  163.         int frame_size;
  164.         dts_bitstream_init (state, buf, 1, 1);
  165.         frame_size = syncinfo (state, flags, sample_rate,
  166.                                bit_rate, frame_length);
  167.         return frame_size;
  168.     }
  169.     return 0;
  170. }
  171. int dts_frame (dts_state_t * state, uint8_t * buf, int * flags,
  172.                level_t * level, sample_t bias)
  173. {
  174.     int i, j;
  175.     static float adj_table[] = { 1.0, 1.1250, 1.2500, 1.4375 };
  176.     dts_bitstream_init (state, buf, state->word_mode, state->bigendian_mode);
  177.     /* Sync code */
  178.     bitstream_get (state, 32);
  179.     /* Frame header */
  180.     state->frame_type = bitstream_get (state, 1);
  181.     state->samples_deficit = bitstream_get (state, 5) + 1;
  182.     state->crc_present = bitstream_get (state, 1);
  183.     state->sample_blocks = bitstream_get (state, 7) + 1;
  184.     state->frame_size = bitstream_get (state, 14) + 1;
  185.     state->amode = bitstream_get (state, 6);
  186.     state->sample_rate = bitstream_get (state, 4);
  187.     state->bit_rate = bitstream_get (state, 5);
  188.     state->downmix = bitstream_get (state, 1);
  189.     state->dynrange = bitstream_get (state, 1);
  190.     state->timestamp = bitstream_get (state, 1);
  191.     state->aux_data = bitstream_get (state, 1);
  192.     state->hdcd = bitstream_get (state, 1);
  193.     state->ext_descr = bitstream_get (state, 3);
  194.     state->ext_coding = bitstream_get (state, 1);
  195.     state->aspf = bitstream_get (state, 1);
  196.     state->lfe = bitstream_get (state, 2);
  197.     state->predictor_history = bitstream_get (state, 1);
  198.     /* TODO: check CRC */
  199.     if (state->crc_present) state->header_crc = bitstream_get (state, 16);
  200.     state->multirate_inter = bitstream_get (state, 1);
  201.     state->version = bitstream_get (state, 4);
  202.     state->copy_history = bitstream_get (state, 2);
  203.     state->source_pcm_res = bitstream_get (state, 3);
  204.     state->front_sum = bitstream_get (state, 1);
  205.     state->surround_sum = bitstream_get (state, 1);
  206.     state->dialog_norm = bitstream_get (state, 4);
  207.     /* FIME: channels mixing levels */
  208.     state->clev = state->slev = 1;
  209.     state->output = dts_downmix_init (state->amode, *flags, level,
  210.                                       state->clev, state->slev);
  211.     if (state->output < 0)
  212.         return 1;
  213.     if (state->lfe && (*flags & DTS_LFE))
  214.         state->output |= DTS_LFE;
  215.     *flags = state->output;
  216.     state->dynrng = state->level = MUL_C (*level, 2);
  217.     state->bias = bias;
  218.     state->dynrnge = 1;
  219.     state->dynrngcall = NULL;
  220. #ifdef DEBUG
  221.     fprintf (stderr, "frame type: %in", state->frame_type);
  222.     fprintf (stderr, "samples deficit: %in", state->samples_deficit);
  223.     fprintf (stderr, "crc present: %in", state->crc_present);
  224.     fprintf (stderr, "sample blocks: %i (%i samples)n",
  225.              state->sample_blocks, state->sample_blocks * 32);
  226.     fprintf (stderr, "frame size: %i bytesn", state->frame_size);
  227.     fprintf (stderr, "amode: %i (%i channels)n",
  228.              state->amode, dts_channels[state->amode]);
  229.     fprintf (stderr, "sample rate: %i (%i Hz)n",
  230.              state->sample_rate, dts_sample_rates[state->sample_rate]);
  231.     fprintf (stderr, "bit rate: %i (%i bits/s)n",
  232.              state->bit_rate, dts_bit_rates[state->bit_rate]);
  233.     fprintf (stderr, "downmix: %in", state->downmix);
  234.     fprintf (stderr, "dynrange: %in", state->dynrange);
  235.     fprintf (stderr, "timestamp: %in", state->timestamp);
  236.     fprintf (stderr, "aux_data: %in", state->aux_data);
  237.     fprintf (stderr, "hdcd: %in", state->hdcd);
  238.     fprintf (stderr, "ext descr: %in", state->ext_descr);
  239.     fprintf (stderr, "ext coding: %in", state->ext_coding);
  240.     fprintf (stderr, "aspf: %in", state->aspf);
  241.     fprintf (stderr, "lfe: %in", state->lfe);
  242.     fprintf (stderr, "predictor history: %in", state->predictor_history);
  243.     fprintf (stderr, "header crc: %in", state->header_crc);
  244.     fprintf (stderr, "multirate inter: %in", state->multirate_inter);
  245.     fprintf (stderr, "version number: %in", state->version);
  246.     fprintf (stderr, "copy history: %in", state->copy_history);
  247.     fprintf (stderr, "source pcm resolution: %i (%i bits/sample)n",
  248.              state->source_pcm_res,
  249.              dts_bits_per_sample[state->source_pcm_res]);
  250.     fprintf (stderr, "front sum: %in", state->front_sum);
  251.     fprintf (stderr, "surround sum: %in", state->surround_sum);
  252.     fprintf (stderr, "dialog norm: %in", state->dialog_norm);
  253.     fprintf (stderr, "n");
  254. #endif
  255.     /* Primary audio coding header */
  256.     state->subframes = bitstream_get (state, 4) + 1;
  257.     state->prim_channels = bitstream_get (state, 3) + 1;
  258. #ifdef DEBUG
  259.     fprintf (stderr, "subframes: %in", state->subframes);
  260.     fprintf (stderr, "prim channels: %in", state->prim_channels);
  261. #endif
  262.     for (i = 0; i < state->prim_channels; i++)
  263.     {
  264.         state->subband_activity[i] = bitstream_get (state, 5) + 2;
  265. #ifdef DEBUG
  266.         fprintf (stderr, "subband activity: %in", state->subband_activity[i]);
  267. #endif
  268.         if (state->subband_activity[i] > DTS_SUBBANDS)
  269.             state->subband_activity[i] = DTS_SUBBANDS;
  270.     }
  271.     for (i = 0; i < state->prim_channels; i++)
  272.     {
  273.         state->vq_start_subband[i] = bitstream_get (state, 5) + 1;
  274. #ifdef DEBUG
  275.         fprintf (stderr, "vq start subband: %in", state->vq_start_subband[i]);
  276. #endif
  277.         if (state->vq_start_subband[i] > DTS_SUBBANDS)
  278.             state->vq_start_subband[i] = DTS_SUBBANDS;
  279.     }
  280.     for (i = 0; i < state->prim_channels; i++)
  281.     {
  282.         state->joint_intensity[i] = bitstream_get (state, 3);
  283. #ifdef DEBUG
  284.         fprintf (stderr, "joint intensity: %in", state->joint_intensity[i]);
  285.         if (state->joint_intensity[i]) {fprintf (stderr, "JOINTINTENSITYn");}
  286. #endif
  287.     }
  288.     for (i = 0; i < state->prim_channels; i++)
  289.     {
  290.         state->transient_huffman[i] = bitstream_get (state, 2);
  291. #ifdef DEBUG
  292.         fprintf (stderr, "transient mode codebook: %in",
  293.                  state->transient_huffman[i]);
  294. #endif
  295.     }
  296.     for (i = 0; i < state->prim_channels; i++)
  297.     {
  298.         state->scalefactor_huffman[i] = bitstream_get (state, 3);
  299. #ifdef DEBUG
  300.         fprintf (stderr, "scale factor codebook: %in",
  301.                  state->scalefactor_huffman[i]);
  302. #endif
  303.     }
  304.     for (i = 0; i < state->prim_channels; i++)
  305.     {
  306.         state->bitalloc_huffman[i] = bitstream_get (state, 3);
  307.         /* if (state->bitalloc_huffman[i] == 7) bailout */
  308. #ifdef DEBUG
  309.         fprintf (stderr, "bit allocation quantizer: %in",
  310.                  state->bitalloc_huffman[i]);
  311. #endif
  312.     }
  313.     /* Get codebooks quantization indexes */
  314.     for (i = 0; i < state->prim_channels; i++)
  315.     {
  316.         state->quant_index_huffman[i][0] = 0; /* Not transmitted */
  317.         state->quant_index_huffman[i][1] = bitstream_get (state, 1);
  318.     }
  319.     for (j = 2; j < 6; j++)
  320.         for (i = 0; i < state->prim_channels; i++)
  321.             state->quant_index_huffman[i][j] = bitstream_get (state, 2);
  322.     for (j = 6; j < 11; j++)
  323.         for (i = 0; i < state->prim_channels; i++)
  324.             state->quant_index_huffman[i][j] = bitstream_get (state, 3);
  325.     for (j = 11; j < 27; j++)
  326.         for (i = 0; i < state->prim_channels; i++)
  327.             state->quant_index_huffman[i][j] = 0; /* Not transmitted */
  328. #ifdef DEBUG
  329.     for (i = 0; i < state->prim_channels; i++)
  330.     {
  331.         fprintf( stderr, "quant index huff:" );
  332.         for (j = 0; j < 11; j++)
  333.             fprintf (stderr, " %i", state->quant_index_huffman[i][j]);
  334.         fprintf (stderr, "n");
  335.     }
  336. #endif
  337.     /* Get scale factor adjustment */
  338.     for (j = 0; j < 11; j++)
  339.     {
  340.         for (i = 0; i < state->prim_channels; i++)
  341.             state->scalefactor_adj[i][j] = 1;
  342.     }
  343.     for (i = 0; i < state->prim_channels; i++)
  344.     {
  345.         if (state->quant_index_huffman[i][1] == 0)
  346.         {
  347.             /* Transmitted only if quant_index_huffman=0 (Huffman code used) */
  348.             state->scalefactor_adj[i][1] = adj_table[bitstream_get (state, 2)];
  349.         }
  350.     }
  351.     for (j = 2; j < 6; j++)
  352.         for (i = 0; i < state->prim_channels; i++)
  353.             if (state->quant_index_huffman[i][j] < 3)
  354.             {
  355.                 /* Transmitted only if quant_index_huffman < 3 */
  356.                 state->scalefactor_adj[i][j] =
  357.                     adj_table[bitstream_get (state, 2)];
  358.             }
  359.     for (j = 6; j < 11; j++)
  360.         for (i = 0; i < state->prim_channels; i++)
  361.             if (state->quant_index_huffman[i][j] < 7)
  362.             {
  363.                 /* Transmitted only if quant_index_huffman < 7 */
  364.                 state->scalefactor_adj[i][j] =
  365.                     adj_table[bitstream_get (state, 2)];
  366.             }
  367. #ifdef DEBUG
  368.     for (i = 0; i < state->prim_channels; i++)
  369.     {
  370.         fprintf (stderr, "scalefac adj:");
  371.         for (j = 0; j < 11; j++)
  372.             fprintf (stderr, " %1.3f", state->scalefactor_adj[i][j]);
  373.         fprintf (stderr, "n");
  374.     }
  375. #endif
  376.     if (state->crc_present)
  377.     {
  378.         /* Audio header CRC check */
  379.         bitstream_get (state, 16);
  380.     }
  381.     state->current_subframe = 0;
  382.     state->current_subsubframe = 0;
  383.     return 0;
  384. }
  385. int dts_subframe_header (dts_state_t * state)
  386. {
  387.     /* Primary audio coding side information */
  388.     int j, k;
  389.     /* Subsubframe count */
  390.     state->subsubframes = bitstream_get (state, 2) + 1;
  391. #ifdef DEBUG
  392.     fprintf (stderr, "subsubframes: %in", state->subsubframes);
  393. #endif
  394.     /* Partial subsubframe sample count */
  395.     state->partial_samples = bitstream_get (state, 3);
  396. #ifdef DEBUG
  397.     fprintf (stderr, "partial samples: %in", state->partial_samples);
  398. #endif
  399.     /* Get prediction mode for each subband */
  400.     for (j = 0; j < state->prim_channels; j++)
  401.     {
  402.         for (k = 0; k < state->subband_activity[j]; k++)
  403.             state->prediction_mode[j][k] = bitstream_get (state, 1);
  404. #ifdef DEBUG
  405.         fprintf (stderr, "prediction mode:");
  406.         for (k = 0; k < state->subband_activity[j]; k++)
  407.             fprintf (stderr, " %i", state->prediction_mode[j][k]);
  408.         fprintf (stderr, "n");
  409. #endif
  410.     }
  411.     /* Get prediction codebook */
  412.     for (j = 0; j < state->prim_channels; j++)
  413.     {
  414.         for (k = 0; k < state->subband_activity[j]; k++)
  415.         {
  416.             if (state->prediction_mode[j][k] > 0)
  417.             {
  418.                 /* (Prediction coefficient VQ address) */
  419.                 state->prediction_vq[j][k] = bitstream_get (state, 12);
  420. #ifdef DEBUG
  421.                 fprintf (stderr, "prediction coefs: %f, %f, %f, %fn",
  422.                          (double)adpcm_vb[state->prediction_vq[j][k]][0]/8192,
  423.                          (double)adpcm_vb[state->prediction_vq[j][k]][1]/8192,
  424.                          (double)adpcm_vb[state->prediction_vq[j][k]][2]/8192,
  425.                          (double)adpcm_vb[state->prediction_vq[j][k]][3]/8192);
  426. #endif
  427.             }
  428.         }
  429.     }
  430.     /* Bit allocation index */
  431.     for (j = 0; j < state->prim_channels; j++)
  432.     {
  433.         for (k = 0; k < state->vq_start_subband[j]; k++)
  434.         {
  435.             if (state->bitalloc_huffman[j] == 6)
  436.                 state->bitalloc[j][k] = bitstream_get (state, 5);
  437.             else if (state->bitalloc_huffman[j] == 5)
  438.                 state->bitalloc[j][k] = bitstream_get (state, 4);
  439.             else
  440.             {
  441.                 state->bitalloc[j][k] = InverseQ (state,
  442.                     bitalloc_12[state->bitalloc_huffman[j]]);
  443.             }
  444.             if (state->bitalloc[j][k] > 26)
  445.             {
  446.                 fprintf (stderr, "bitalloc index [%i][%i] too big (%i)n",
  447.                          j, k, state->bitalloc[j][k]);
  448.                 return -1;
  449.             }
  450.         }
  451. #ifdef DEBUG
  452.         fprintf (stderr, "bitalloc index: ");
  453.         for (k = 0; k < state->vq_start_subband[j]; k++)
  454.             fprintf (stderr, "%2.2i ", state->bitalloc[j][k]);
  455.         fprintf (stderr, "n");
  456. #endif
  457.     }
  458.     /* Transition mode */
  459.     for (j = 0; j < state->prim_channels; j++)
  460.     {
  461.         for (k = 0; k < state->subband_activity[j]; k++)
  462.         {
  463.             state->transition_mode[j][k] = 0;
  464.             if (state->subsubframes > 1 &&
  465.                 k < state->vq_start_subband[j] &&
  466.                 state->bitalloc[j][k] > 0)
  467.             {
  468.                 state->transition_mode[j][k] = InverseQ (state,
  469.                     tmode[state->transient_huffman[j]]);
  470.             }
  471.         }
  472. #ifdef DEBUG
  473.         fprintf (stderr, "Transition mode:");
  474.         for (k = 0; k < state->subband_activity[j]; k++)
  475.             fprintf (stderr, " %i", state->transition_mode[j][k]);
  476.         fprintf (stderr, "n");
  477. #endif
  478.     }
  479.     /* Scale factors */
  480.     for (j = 0; j < state->prim_channels; j++)
  481.     {
  482.         int *scale_table;
  483.         int scale_sum;
  484.         for (k = 0; k < state->subband_activity[j]; k++)
  485.         {
  486.             state->scale_factor[j][k][0] = 0;
  487.             state->scale_factor[j][k][1] = 0;
  488.         }
  489.         if (state->scalefactor_huffman[j] == 6)
  490.             scale_table = scale_factor_quant7;
  491.         else
  492.             scale_table = scale_factor_quant6;
  493.         /* When huffman coded, only the difference is encoded */
  494.         scale_sum = 0;
  495.         for (k = 0; k < state->subband_activity[j]; k++)
  496.         {
  497.             if (k >= state->vq_start_subband[j] || state->bitalloc[j][k] > 0)
  498.             {
  499.                 if (state->scalefactor_huffman[j] < 5)
  500.                 {
  501.                     /* huffman encoded */
  502.                     scale_sum += InverseQ (state,
  503.                         scales_129[state->scalefactor_huffman[j]]);
  504.                 }
  505.                 else if (state->scalefactor_huffman[j] == 5)
  506.                 {
  507.                     scale_sum = bitstream_get (state, 6);
  508.                 }
  509.                 else if (state->scalefactor_huffman[j] == 6)
  510.                 {
  511.                     scale_sum = bitstream_get (state, 7);
  512.                 }
  513.                 state->scale_factor[j][k][0] = scale_table[scale_sum];
  514.             }
  515.             if (k < state->vq_start_subband[j] && state->transition_mode[j][k])
  516.             {
  517.                 /* Get second scale factor */
  518.                 if (state->scalefactor_huffman[j] < 5)
  519.                 {
  520.                     /* huffman encoded */
  521.                     scale_sum += InverseQ (state,
  522.                         scales_129[state->scalefactor_huffman[j]]);
  523.                 }
  524.                 else if (state->scalefactor_huffman[j] == 5)
  525.                 {
  526.                     scale_sum = bitstream_get (state, 6);
  527.                 }
  528.                 else if (state->scalefactor_huffman[j] == 6)
  529.                 {
  530.                     scale_sum = bitstream_get (state, 7);
  531.                 }
  532.                 state->scale_factor[j][k][1] = scale_table[scale_sum];
  533.             }
  534.         }
  535. #ifdef DEBUG
  536.         fprintf (stderr, "Scale factor:");
  537.         for (k = 0; k < state->subband_activity[j]; k++)
  538.         {
  539.             if (k >= state->vq_start_subband[j] || state->bitalloc[j][k] > 0)
  540.                 fprintf (stderr, " %i", state->scale_factor[j][k][0]);
  541.             if (k < state->vq_start_subband[j] && state->transition_mode[j][k])
  542.                 fprintf (stderr, " %i(t)", state->scale_factor[j][k][1]);
  543.         }
  544.         fprintf (stderr, "n");
  545. #endif
  546.     }
  547.     /* Joint subband scale factor codebook select */
  548.     for (j = 0; j < state->prim_channels; j++)
  549.     {
  550.         /* Transmitted only if joint subband coding enabled */
  551.         if (state->joint_intensity[j] > 0)
  552.             state->joint_huff[j] = bitstream_get (state, 3);
  553.     }
  554.     /* Scale factors for joint subband coding */
  555.     for (j = 0; j < state->prim_channels; j++)
  556.     {
  557.         int source_channel;
  558.         /* Transmitted only if joint subband coding enabled */
  559.         if (state->joint_intensity[j] > 0)
  560.         {
  561.             int scale = 0;
  562.             source_channel = state->joint_intensity[j] - 1;
  563.             /* When huffman coded, only the difference is encoded
  564.              * (is this valid as well for joint scales ???) */
  565.             for (k = state->subband_activity[j];
  566.                  k < state->subband_activity[source_channel]; k++)
  567.             {
  568.                 if (state->joint_huff[j] < 5)
  569.                 {
  570.                     /* huffman encoded */
  571.                     scale = InverseQ (state,
  572.                         scales_129[state->joint_huff[j]]);
  573.                 }
  574.                 else if (state->joint_huff[j] == 5)
  575.                 {
  576.                     scale = bitstream_get (state, 6);
  577.                 }
  578.                 else if (state->joint_huff[j] == 6)
  579.                 {
  580.                     scale = bitstream_get (state, 7);
  581.                 }
  582.                 scale += 64; /* bias */
  583.                 state->joint_scale_factor[j][k] = scale;/*joint_scale_table[scale];*/
  584.             }
  585.             if (!state->debug_flag & 0x02)
  586.             {
  587.                 fprintf (stderr, "Joint stereo coding not supportedn");
  588.                 state->debug_flag |= 0x02;
  589.             }
  590. #ifdef DEBUG
  591.             fprintf (stderr, "Joint scale factor index:n");
  592.             for (k = state->subband_activity[j];
  593.                  k < state->subband_activity[source_channel]; k++)
  594.                 fprintf (stderr, " %i", state->joint_scale_factor[j][k]);
  595.             fprintf (stderr, "n");
  596. #endif
  597.         }
  598.     }
  599.     /* Stereo downmix coefficients */
  600.     if (state->prim_channels > 2 && state->downmix)
  601.     {
  602.         for (j = 0; j < state->prim_channels; j++)
  603.         {
  604.             state->downmix_coef[j][0] = bitstream_get (state, 7);
  605.             state->downmix_coef[j][1] = bitstream_get (state, 7);
  606.         }
  607.     }
  608.     /* Dynamic range coefficient */
  609.     if (state->dynrange) state->dynrange_coef = bitstream_get (state, 8);
  610.     /* Side information CRC check word */
  611.     if (state->crc_present)
  612.     {
  613.         bitstream_get (state, 16);
  614.     }
  615.     /*
  616.      * Primary audio data arrays
  617.      */
  618.     /* VQ encoded high frequency subbands */
  619.     for (j = 0; j < state->prim_channels; j++)
  620.     {
  621.         for (k = state->vq_start_subband[j];
  622.              k < state->subband_activity[j]; k++)
  623.         {
  624.             /* 1 vector -> 32 samples */
  625.             state->high_freq_vq[j][k] = bitstream_get (state, 10);
  626. #ifdef DEBUG
  627.             fprintf( stderr, "VQ index: %in", state->high_freq_vq[j][k] );
  628. #endif
  629.         }
  630.     }
  631.     /* Low frequency effect data */
  632.     if (state->lfe)
  633.     {
  634.         /* LFE samples */
  635.         int lfe_samples = 2 * state->lfe * state->subsubframes;
  636.         double lfe_scale;
  637.         for (j = lfe_samples; j < lfe_samples * 2; j++)
  638.         {
  639.             /* Signed 8 bits int */
  640.             state->lfe_data[j] =
  641.                 (signed int)(signed char)bitstream_get (state, 8);
  642.         }
  643.         /* Scale factor index */
  644.         state->lfe_scale_factor =
  645.             scale_factor_quant7[bitstream_get (state, 8)];
  646.         /* Quantization step size * scale factor */
  647.         lfe_scale = 0.035 * state->lfe_scale_factor;
  648.         for (j = lfe_samples; j < lfe_samples * 2; j++)
  649.             state->lfe_data[j] *= lfe_scale;
  650. #ifdef DEBUG
  651.         fprintf (stderr, "LFE samples:n");
  652.         for (j = lfe_samples; j < lfe_samples * 2; j++)
  653.             fprintf (stderr, " %f", state->lfe_data[j]);
  654.         fprintf (stderr, "n");
  655. #endif
  656.     }
  657.     return 0;
  658. }
  659. int dts_subsubframe (dts_state_t * state)
  660. {
  661.     int k, l;
  662.     int subsubframe = state->current_subsubframe;
  663.     double *quant_step_table;
  664.     /* FIXME */
  665.     double subband_samples[DTS_PRIM_CHANNELS_MAX][DTS_SUBBANDS][8];
  666.     /*
  667.      * Audio data
  668.      */
  669.     /* Select quantization step size table */
  670.     if (state->bit_rate == 0x1f) 
  671.         quant_step_table = lossless_quant_d;
  672.     else
  673.         quant_step_table = lossy_quant_d;
  674.     for (k = 0; k < state->prim_channels; k++)
  675.     {
  676.         for (l = 0; l < state->vq_start_subband[k] ; l++)
  677.         {
  678.             int m;
  679.             /* Select the mid-tread linear quantizer */
  680.             int abits = state->bitalloc[k][l];
  681.             double quant_step_size = quant_step_table[abits];
  682.             double rscale;
  683.             /*
  684.              * Determine quantization index code book and its type 
  685.              */
  686.             /* Select quantization index code book */
  687.             int sel = state->quant_index_huffman[k][abits]; 
  688.             /* Determine its type */
  689.             int q_type = 1; /* (Assume Huffman type by default) */
  690.             if (abits >= 11 || !bitalloc_select[abits][sel])
  691.             {
  692.                 /* Not Huffman type */
  693.                 if (abits <= 7) q_type = 3; /* Block code */
  694.                 else q_type = 2; /* No further encoding */
  695.             }
  696.             if (abits == 0) q_type = 0; /* No bits allocated */
  697.             /*
  698.              * Extract bits from the bit stream 
  699.              */
  700.             switch (q_type)
  701.             {
  702.             case 0: /* No bits allocated */
  703.                 for (m=0; m<8; m++)
  704.                     subband_samples[k][l][m] = 0;
  705.                 break;
  706.             case 1: /* Huffman code */
  707.                 for (m=0; m<8; m++)
  708.                     subband_samples[k][l][m] =
  709.                         InverseQ (state, bitalloc_select[abits][sel]);
  710.                 break;
  711.             case 2: /* No further encoding */
  712.                 for (m=0; m<8; m++)
  713.                 {
  714.                     /* Extract (signed) quantization index */
  715.                     int q_index = bitstream_get (state, abits - 3);
  716.                     if( q_index & (1 << (abits - 4)) )
  717.                     {
  718.                         q_index = (1 << (abits - 3)) - q_index;
  719.                         q_index = -q_index;
  720.                     }
  721.                     subband_samples[k][l][m] = q_index;
  722.                 }
  723.                 break;
  724.             case 3: /* Block code */
  725.                 {
  726.                     int block_code1, block_code2, size, levels;
  727.                     int block[8];
  728.                     switch (abits)
  729.                     {
  730.                     case 1:
  731.                         size = 7;
  732.                         levels = 3;
  733.                         break;
  734.                     case 2:
  735.                         size = 10;
  736.                         levels = 5;
  737.                         break;
  738.                     case 3:
  739.                         size = 12;
  740.                         levels = 7;
  741.                         break;
  742.                     case 4:
  743.                         size = 13;
  744.                         levels = 9;
  745.                         break;
  746.                     case 5:
  747.                         size = 15;
  748.                         levels = 13;
  749.                         break;
  750.                     case 6:
  751.                         size = 17;
  752.                         levels = 17;
  753.                         break;
  754.                     case 7:
  755.                     default:
  756.                         size = 19;
  757.                         levels = 25;
  758.                         break;
  759.                     }
  760.                     block_code1 = bitstream_get (state, size);
  761.                     /* Should test return value */
  762.                     decode_blockcode (block_code1, levels, block);
  763.                     block_code2 = bitstream_get (state, size);
  764.                     decode_blockcode (block_code2, levels, &block[4]);
  765.                     for (m=0; m<8; m++)
  766.                         subband_samples[k][l][m] = block[m];
  767.                 }
  768.                 break;
  769.             default: /* Undefined */
  770.                 fprintf (stderr, "Unknown quantization index codebook");
  771.                 return -1;
  772.             }
  773.             /*
  774.              * Account for quantization step and scale factor
  775.              */
  776.             /* Deal with transients */
  777.             if (state->transition_mode[k][l] &&
  778.                 subsubframe >= state->transition_mode[k][l])
  779.                 rscale = quant_step_size * state->scale_factor[k][l][1];
  780.             else
  781.                 rscale = quant_step_size * state->scale_factor[k][l][0];
  782.             /* Adjustment */
  783.             rscale *= state->scalefactor_adj[k][sel];
  784.             for (m=0; m<8; m++) subband_samples[k][l][m] *= rscale;
  785.             /*
  786.              * Inverse ADPCM if in prediction mode
  787.              */
  788.             if (state->prediction_mode[k][l])
  789.             {
  790.                 int n;
  791.                 for (m=0; m<8; m++)
  792.                 {
  793.                     for (n=1; n<=4; n++)
  794.                         if (m-n >= 0)
  795.                             subband_samples[k][l][m] +=
  796.                               (adpcm_vb[state->prediction_vq[k][l]][n-1] *
  797.                                 subband_samples[k][l][m-n]/8192);
  798.                         else if (state->predictor_history)
  799.                             subband_samples[k][l][m] +=
  800.                               (adpcm_vb[state->prediction_vq[k][l]][n-1] *
  801.                                state->subband_samples_hist[k][l][m-n+4]/8192);
  802.                 }
  803.             }
  804.         }
  805.         /*
  806.          * Decode VQ encoded high frequencies
  807.          */
  808.         for (l = state->vq_start_subband[k];
  809.              l < state->subband_activity[k]; l++)
  810.         {
  811.             /* 1 vector -> 32 samples but we only need the 8 samples
  812.              * for this subsubframe. */
  813.             int m;
  814.             if (!state->debug_flag & 0x01)
  815.             {
  816.                 fprintf (stderr, "Stream with high frequencies VQ codingn");
  817.                 state->debug_flag |= 0x01;
  818.             }
  819.             for (m=0; m<8; m++)
  820.             {
  821.                 subband_samples[k][l][m] = 
  822.                     high_freq_vq[state->high_freq_vq[k][l]][subsubframe*8+m]
  823.                         * (double)state->scale_factor[k][l][0] / 16.0;
  824.             }
  825.         }
  826.     }
  827.     /* Check for DSYNC after subsubframe */
  828.     if (state->aspf || subsubframe == state->subsubframes - 1)
  829.     {
  830.         if (0xFFFF == bitstream_get (state, 16)) /* 0xFFFF */
  831.         {
  832. #ifdef DEBUG
  833.             fprintf( stderr, "Got subframe DSYNCn" );
  834. #endif
  835.         }
  836.         else
  837.         {
  838.             fprintf( stderr, "Didn't get subframe DSYNCn" );
  839.         }
  840.     }
  841.     /* Backup predictor history for adpcm */
  842.     for (k = 0; k < state->prim_channels; k++)
  843.     {
  844.         for (l = 0; l < state->vq_start_subband[k] ; l++)
  845.         {
  846.             int m;
  847.             for (m = 0; m < 4; m++)
  848.                 state->subband_samples_hist[k][l][m] =
  849.                     subband_samples[k][l][4+m];
  850.         }
  851.     }
  852.     /* 32 subbands QMF */
  853.     for (k = 0; k < state->prim_channels; k++)
  854.     {
  855.         static double pcm_to_float[8] =
  856.             {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};
  857.         qmf_32_subbands (state, k,
  858.                          subband_samples[k],
  859.                          &state->samples[256*k],
  860.           /*WTF ???*/    32768.0*3/2/*pcm_to_float[state->source_pcm_res]*/,
  861.                          0/*state->bias*/);
  862.     }
  863.     /* Down/Up mixing */
  864.     if (state->prim_channels < dts_channels[state->output & DTS_CHANNEL_MASK])
  865.     {
  866.         dts_upmix (state->samples, state->amode, state->output);
  867.     } else
  868.     if (state->prim_channels > dts_channels[state->output & DTS_CHANNEL_MASK])
  869.     {
  870.         dts_downmix (state->samples, state->amode, state->output, state->bias,
  871.                      state->clev, state->slev);
  872.     }
  873.     /* Generate LFE samples for this subsubframe FIXME!!! */
  874.     if (state->output & DTS_LFE)
  875.     {
  876.         int lfe_samples = 2 * state->lfe * state->subsubframes;
  877.         int i_channels = dts_channels[state->output & DTS_CHANNEL_MASK];
  878.         lfe_interpolation_fir (state->lfe, 2 * state->lfe,
  879.                                state->lfe_data + lfe_samples +
  880.                                2 * state->lfe * subsubframe,
  881.                                &state->samples[256*i_channels],
  882.                                8388608.0, state->bias);
  883.         /* Outputs 20bits pcm samples */
  884.     }
  885.     return 0;
  886. }
  887. int dts_subframe_footer (dts_state_t * state)
  888. {
  889.     int aux_data_count = 0, i;
  890.     int lfe_samples;
  891.     /*
  892.      * Unpack optional information
  893.      */
  894.     /* Time code stamp */
  895.     if (state->timestamp) bitstream_get (state, 32);
  896.     /* Auxiliary data byte count */
  897.     if (state->aux_data) aux_data_count = bitstream_get (state, 6);
  898.     /* Auxiliary data bytes */
  899.     for(i = 0; i < aux_data_count; i++)
  900.         bitstream_get (state, 8);
  901.     /* Optional CRC check bytes */
  902.     if (state->crc_present && (state->downmix || state->dynrange))
  903.         bitstream_get (state, 16);
  904.     /* Backup LFE samples history */
  905.     lfe_samples = 2 * state->lfe * state->subsubframes;
  906.     for (i = 0; i < lfe_samples; i++)
  907.     {
  908.         state->lfe_data[i] = state->lfe_data[i+lfe_samples];
  909.     }
  910. #ifdef DEBUG
  911.     fprintf( stderr, "n" );
  912. #endif
  913.     return 0;
  914. }
  915. int dts_block (dts_state_t * state)
  916. {
  917.     /* Sanity check */
  918.     if (state->current_subframe >= state->subframes)
  919.     {
  920.         fprintf (stderr, "check failed: %i>%i",
  921.                  state->current_subframe, state->subframes);
  922.         return -1;
  923.     }
  924.     if (!state->current_subsubframe)
  925.     {
  926. #ifdef DEBUG
  927.         fprintf (stderr, "DSYNC dts_subframe_headern");
  928. #endif
  929.         /* Read subframe header */
  930.         if (dts_subframe_header (state)) return -1;
  931.     }
  932.     /* Read subsubframe */
  933. #ifdef DEBUG
  934.     fprintf (stderr, "DSYNC dts_subsubframen");
  935. #endif
  936.     if (dts_subsubframe (state)) return -1;
  937.     /* Update state */
  938.     state->current_subsubframe++;
  939.     if (state->current_subsubframe >= state->subsubframes)
  940.     {
  941.         state->current_subsubframe = 0;
  942.         state->current_subframe++;
  943.     }
  944.     if (state->current_subframe >= state->subframes)
  945.     {
  946. #ifdef DEBUG
  947.         fprintf(stderr, "DSYNC dts_subframe_footern");
  948. #endif
  949.         /* Read subframe footer */
  950.         if (dts_subframe_footer (state)) return -1;
  951.     }
  952.     return 0;
  953. }
  954. /* Very compact version of the block code decoder that does not use table
  955.  * look-up but is slightly slower */
  956. int decode_blockcode( int code, int levels, int *values )
  957.     int i;
  958.     int offset = (levels - 1) >> 1;
  959.     for (i = 0; i < 4; i++)
  960.     {
  961.         values[i] = (code % levels) - offset;
  962.         code /= levels;
  963.     }
  964.     if (code == 0)
  965.         return 1;
  966.     else
  967.     {
  968.         fprintf (stderr, "ERROR: block code look-up failedn");
  969.         return 0;
  970.     }
  971. }
  972. static void pre_calc_cosmod( dts_state_t * state )
  973. {
  974.     int i, j, k;
  975.     for (j=0,k=0;k<16;k++)
  976.         for (i=0;i<16;i++)
  977.             state->cos_mod[j++] = cos((2*i+1)*(2*k+1)*M_PI/64);
  978.     for (k=0;k<16;k++)
  979.         for (i=0;i<16;i++)
  980.             state->cos_mod[j++] = cos((i)*(2*k+1)*M_PI/32);
  981.     for (k=0;k<16;k++)
  982.         state->cos_mod[j++] = 0.25/(2*cos((2*k+1)*M_PI/128));
  983.     for (k=0;k<16;k++)
  984.         state->cos_mod[j++] = -0.25/(2.0*sin((2*k+1)*M_PI/128));
  985. }
  986. static void qmf_32_subbands (dts_state_t * state, int chans,
  987.                              double samples_in[32][8], sample_t *samples_out,
  988.                              double scale, sample_t bias)
  989. {
  990.     double *prCoeff;
  991.     int i, j, k;
  992.     double raXin[32];
  993.     double *subband_fir_hist = state->subband_fir_hist[chans];
  994.     double *subband_fir_hist2 = state->subband_fir_noidea[chans];
  995.     int nChIndex = 0, NumSubband = 32, nStart = 0, nEnd = 8, nSubIndex;
  996.     /* Select filter */
  997.     if (!state->multirate_inter) /* Non-perfect reconstruction */
  998.         prCoeff = fir_32bands_nonperfect;
  999.     else /* Perfect reconstruction */
  1000.         prCoeff = fir_32bands_perfect;
  1001.     /* Reconstructed channel sample index */
  1002.     for (nSubIndex=nStart; nSubIndex<nEnd; nSubIndex++)
  1003.     {
  1004.         double A[16], B[16], SUM[16], DIFF[16];
  1005.         /* Load in one sample from each subband */
  1006.         for (i=0; i<state->subband_activity[chans]; i++)
  1007.             raXin[i] = samples_in[i][nSubIndex];
  1008.         /* Clear inactive subbands */
  1009.         for (i=state->subband_activity[chans]; i<NumSubband; i++)
  1010.             raXin[i] = 0.0;
  1011.         /* Multiply by cosine modulation coefficients and
  1012.          * create temporary arrays SUM and DIFF */
  1013.         for (j=0,k=0;k<16;k++)
  1014.         {
  1015.             A[k] = 0.0;
  1016.             for (i=0;i<16;i++)
  1017.                 A[k]+=(raXin[2*i]+raXin[2*i+1])*state->cos_mod[j++];
  1018.         }
  1019.         for (k=0;k<16;k++)
  1020.         {
  1021.             B[k] = 0.0;
  1022.             for (i=0;i<16;i++)
  1023.             {
  1024.                 if(i>0) B[k]+=(raXin[2*i]+raXin[2*i-1])*state->cos_mod[j++];
  1025.                 else B[k]+=(raXin[2*i])*state->cos_mod[j++];
  1026.             }
  1027.             SUM[k]=A[k]+B[k];
  1028.             DIFF[k]=A[k]-B[k];
  1029.         }
  1030.         /* Store history */
  1031.         for (k=0;k<16;k++)
  1032.             subband_fir_hist[k]=state->cos_mod[j++]*SUM[k];
  1033.         for (k=0;k<16;k++)
  1034.             subband_fir_hist[32-k-1]=state->cos_mod[j++]*DIFF[k];
  1035.         /* Multiply by filter coefficients */
  1036.         for (k=31,i=0;i<32;i++,k--)
  1037.             for (j=0;j<512;j+=64)
  1038.                 subband_fir_hist2[i] += prCoeff[i+j]*
  1039.                    (subband_fir_hist[i+j] - subband_fir_hist[j+k]);
  1040.         for (k=31,i=0;i<32;i++,k--)
  1041.             for (j=0;j<512;j+=64)
  1042.                 subband_fir_hist2[32+i] += prCoeff[32+i+j]*
  1043.                     (-subband_fir_hist[i+j] - subband_fir_hist[j+k]);
  1044.         /* Create 32 PCM output samples */
  1045.         for (i=0;i<32;i++)
  1046.             samples_out[nChIndex++] = subband_fir_hist2[i] / scale + bias;
  1047.         /* Update working arrays */
  1048.         for (i=511;i>=32;i--)
  1049.             subband_fir_hist[i] = subband_fir_hist[i-32];
  1050.         for (i=0;i<NumSubband;i++)
  1051.             subband_fir_hist2[i] = subband_fir_hist2[i+32];
  1052.         for (i=0;i<NumSubband;i++)
  1053.             subband_fir_hist2[i+32] = 0.0;
  1054.     }
  1055. }
  1056. static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
  1057.                                    double *samples_in, sample_t *samples_out,
  1058.                                    double scale, sample_t bias)
  1059. {
  1060.     /* samples_in: An array holding decimated samples.
  1061.      *   Samples in current subframe starts from samples_in[0],
  1062.      *   while samples_in[-1], samples_in[-2], ..., stores samples
  1063.      *   from last subframe as history.
  1064.      *
  1065.      * samples_out: An array holding interpolated samples
  1066.      */
  1067.     int nDeciFactor, k, J;
  1068.     double *prCoeff;
  1069.     int NumFIRCoef = 512; /* Number of FIR coefficients */
  1070.     int nInterpIndex = 0; /* Index to the interpolated samples */
  1071.     int nDeciIndex;
  1072.     /* Select decimation filter */
  1073.     if (nDecimationSelect==1)
  1074.     {
  1075.         /* 128 decimation */
  1076.         nDeciFactor = 128;
  1077.         /* Pointer to the FIR coefficients array */
  1078.         prCoeff = lfe_fir_128;
  1079.     } else {
  1080.         /* 64 decimation */
  1081.         nDeciFactor = 64;
  1082.         prCoeff = lfe_fir_64;
  1083.     }
  1084.     /* Interpolation */
  1085.     for (nDeciIndex=0; nDeciIndex<nNumDeciSample; nDeciIndex++)
  1086.     {
  1087.         /* One decimated sample generates nDeciFactor interpolated ones */
  1088.         for (k=0; k<nDeciFactor; k++)
  1089.         {
  1090.             /* Clear accumulation */
  1091.             double rTmp = 0.0;
  1092.             /* Accumulate */
  1093.             for (J=0; J<NumFIRCoef/nDeciFactor; J++)
  1094.                 rTmp += samples_in[nDeciIndex-J]*prCoeff[k+J*nDeciFactor];
  1095.             /* Save interpolated samples */
  1096.             samples_out[nInterpIndex++] = rTmp / scale + bias;
  1097.         }
  1098.     }
  1099. }
  1100. void dts_dynrng (dts_state_t * state,
  1101.                  level_t (* call) (level_t, void *), void * data)
  1102. {
  1103.     state->dynrange = 0;
  1104.     if (call) {
  1105.         state->dynrange = 1;
  1106.         state->dynrngcall = call;
  1107.         state->dynrngdata = data;
  1108.     }
  1109. }
  1110. void dts_free (dts_state_t * state)
  1111. {
  1112.     free (state->samples);
  1113.     free (state);
  1114. }