1333 lines · 48.4 KB · C
RawDownload
/* * DCA compatible decoder * Copyright (C) 2004 Gildas Bazin * Copyright (C) 2004 Benjamin Zores * Copyright (C) 2006 Benjamin Larsson * Copyright (C) 2007 Konstantin Shishkov * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include <math.h>#include <stddef.h>#include <stdio.h> #include "libavutil/intmath.h"#include "libavutil/intreadwrite.h"#include "avcodec.h"#include "dsputil.h"#include "fft.h"#include "get_bits.h"#include "put_bits.h"#include "dcadata.h"#include "dcahuff.h"#include "dca.h"#include "synth_filter.h"#include "dcadsp.h" //#define TRACE #define DCA_PRIM_CHANNELS_MAX (5)#define DCA_SUBBANDS (32)#define DCA_ABITS_MAX (32)      /* Should be 28 */#define DCA_SUBSUBFAMES_MAX (4)#define DCA_LFE_MAX (3) enum DCAMode {    DCA_MONO = 0,    DCA_CHANNEL,    DCA_STEREO,    DCA_STEREO_SUMDIFF,    DCA_STEREO_TOTAL,    DCA_3F,    DCA_2F1R,    DCA_3F1R,    DCA_2F2R,    DCA_3F2R,    DCA_4F2R}; /* Tables for mapping dts channel configurations to libavcodec multichannel api. * Some compromises have been made for special configurations. Most configurations * are never used so complete accuracy is not needed. * * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead. * S  -> side, when both rear and back are configured move one of them to the side channel * OV -> center back * All 2 channel configurations -> CH_LAYOUT_STEREO */ static const int64_t dca_core_channel_layout[] = {    CH_FRONT_CENTER,                                               ///< 1, A    CH_LAYOUT_STEREO,                                              ///< 2, A + B (dual mono)    CH_LAYOUT_STEREO,                                              ///< 2, L + R (stereo)    CH_LAYOUT_STEREO,                                              ///< 2, (L+R) + (L-R) (sum-difference)    CH_LAYOUT_STEREO,                                              ///< 2, LT +RT (left and right total)    CH_LAYOUT_STEREO|CH_FRONT_CENTER,                              ///< 3, C+L+R    CH_LAYOUT_STEREO|CH_BACK_CENTER,                               ///< 3, L+R+S    CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_BACK_CENTER,               ///< 4, C + L + R+ S    CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT,                   ///< 4, L + R +SL+ SR    CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_SIDE_LEFT|CH_SIDE_RIGHT,   ///< 5, C + L + R+ SL+SR    CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER,                 ///< 6, CL + CR + L + R + SL + SR    CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT|CH_FRONT_CENTER|CH_BACK_CENTER,                                   ///< 6, C + L + R+ LR + RR + OV    CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_FRONT_LEFT_OF_CENTER|CH_BACK_CENTER|CH_BACK_LEFT|CH_BACK_RIGHT,   ///< 6, CF+ CR+LF+ RF+LR + RR    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_BACK_LEFT|CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2+ SR1 + SR2    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_BACK_CENTER|CH_SIDE_RIGHT, ///< 8, CL + C+ CR + L + R + SL + S+ SR}; static const int8_t dca_lfe_index[] = {    1,2,2,2,2,3,2,3,2,3,2,3,1,3,2,3}; static const int8_t dca_channel_reorder_lfe[][8] = {    { 0, -1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 2,  0,  1, -1, -1, -1, -1, -1},    { 0,  1,  3, -1, -1, -1, -1, -1},    { 2,  0,  1,  4, -1, -1, -1, -1},    { 0,  1,  3,  4, -1, -1, -1, -1},    { 2,  0,  1,  4,  5, -1, -1, -1},    { 3,  4,  0,  1,  5,  6, -1, -1},    { 2,  0,  1,  4,  5,  6, -1, -1},    { 0,  6,  4,  5,  2,  3, -1, -1},    { 4,  2,  5,  0,  1,  6,  7, -1},    { 5,  6,  0,  1,  7,  3,  8,  4},    { 4,  2,  5,  0,  1,  6,  8,  7},}; static const int8_t dca_channel_reorder_nolfe[][8] = {    { 0, -1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 0,  1, -1, -1, -1, -1, -1, -1},    { 2,  0,  1, -1, -1, -1, -1, -1},    { 0,  1,  2, -1, -1, -1, -1, -1},    { 2,  0,  1,  3, -1, -1, -1, -1},    { 0,  1,  2,  3, -1, -1, -1, -1},    { 2,  0,  1,  3,  4, -1, -1, -1},    { 2,  3,  0,  1,  4,  5, -1, -1},    { 2,  0,  1,  3,  4,  5, -1, -1},    { 0,  5,  3,  4,  1,  2, -1, -1},    { 3,  2,  4,  0,  1,  5,  6, -1},    { 4,  5,  0,  1,  6,  2,  7,  3},    { 3,  2,  4,  0,  1,  5,  7,  6},};  #define DCA_DOLBY 101           /* FIXME */ #define DCA_CHANNEL_BITS 6#define DCA_CHANNEL_MASK 0x3F #define DCA_LFE 0x80 #define HEADER_SIZE 14 #define DCA_MAX_FRAME_SIZE 16384 /** Bit allocation */typedef struct {    int offset;                 ///< code values offset    int maxbits[8];             ///< max bits in VLC    int wrap;                   ///< wrap for get_vlc2()    VLC vlc[8];                 ///< actual codes} BitAlloc; static BitAlloc dca_bitalloc_index;    ///< indexes for samples VLC selectstatic BitAlloc dca_tmode;             ///< transition mode VLCsstatic BitAlloc dca_scalefactor;       ///< scalefactor VLCsstatic BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba, int idx){    return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) + ba->offset;} typedef struct {    AVCodecContext *avctx;    /* Frame header */    int frame_type;             ///< type of the current frame    int samples_deficit;        ///< deficit sample count    int crc_present;            ///< crc is present in the bitstream    int sample_blocks;          ///< number of PCM sample blocks    int frame_size;             ///< primary frame byte size    int amode;                  ///< audio channels arrangement    int sample_rate;            ///< audio sampling rate    int bit_rate;               ///< transmission bit rate    int bit_rate_index;         ///< transmission bit rate index     int downmix;                ///< embedded downmix enabled    int dynrange;               ///< embedded dynamic range flag    int timestamp;              ///< embedded time stamp flag    int aux_data;               ///< auxiliary data flag    int hdcd;                   ///< source material is mastered in HDCD    int ext_descr;              ///< extension audio descriptor flag    int ext_coding;             ///< extended coding flag    int aspf;                   ///< audio sync word insertion flag    int lfe;                    ///< low frequency effects flag    int predictor_history;      ///< predictor history flag    int header_crc;             ///< header crc check bytes    int multirate_inter;        ///< multirate interpolator switch    int version;                ///< encoder software revision    int copy_history;           ///< copy history    int source_pcm_res;         ///< source pcm resolution    int front_sum;              ///< front sum/difference flag    int surround_sum;           ///< surround sum/difference flag    int dialog_norm;            ///< dialog normalisation parameter     /* Primary audio coding header */    int subframes;              ///< number of subframes    int total_channels;         ///< number of channels including extensions    int prim_channels;          ///< number of primary audio channels    int subband_activity[DCA_PRIM_CHANNELS_MAX];    ///< subband activity count    int vq_start_subband[DCA_PRIM_CHANNELS_MAX];    ///< high frequency vq start subband    int joint_intensity[DCA_PRIM_CHANNELS_MAX];     ///< joint intensity coding index    int transient_huffman[DCA_PRIM_CHANNELS_MAX];   ///< transient mode code book    int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book    int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX];    ///< bit allocation quantizer select    int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select    float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX];   ///< scale factor adjustment     /* Primary audio coding side information */    int subsubframes;           ///< number of subsubframes    int partial_samples;        ///< partial subsubframe samples count    int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< prediction mode (ADPCM used or not)    int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];      ///< prediction VQ coefs    int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];           ///< bit allocation index    int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< transition mode (transients)    int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2];    ///< scale factors (2 if transient)    int joint_huff[DCA_PRIM_CHANNELS_MAX];                       ///< joint subband scale factors codebook    int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors    int downmix_coef[DCA_PRIM_CHANNELS_MAX][2];                  ///< stereo downmix coefficients    int dynrange_coef;                                           ///< dynamic range coefficient     int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];       ///< VQ encoded high frequency subbands     float lfe_data[2 * DCA_SUBSUBFAMES_MAX * DCA_LFE_MAX *                   2 /*history */ ];    ///< Low frequency effect data    int lfe_scale_factor;     /* Subband samples history (for ADPCM) */    float subband_samples_hist[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];    DECLARE_ALIGNED(16, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];    DECLARE_ALIGNED(16, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];    int hist_index[DCA_PRIM_CHANNELS_MAX];    DECLARE_ALIGNED(16, float, raXin)[32];     int output;                 ///< type of output    float add_bias;             ///< output bias    float scale_bias;           ///< output scale     DECLARE_ALIGNED(16, float, samples)[1536];  /* 6 * 256 = 1536, might only need 5 */    const float *samples_chanptr[6];     uint8_t dca_buffer[DCA_MAX_FRAME_SIZE];    int dca_buffer_size;        ///< how much data is in the dca_buffer     const int8_t* channel_order_tab;                             ///< channel reordering table, lfe and non lfe    GetBitContext gb;    /* Current position in DCA frame */    int current_subframe;    int current_subsubframe;     int debug_flag;             ///< used for suppressing repeated error messages output    DSPContext dsp;    FFTContext imdct;    SynthFilterContext synth;    DCADSPContext dcadsp;} DCAContext; static const uint16_t dca_vlc_offs[] = {        0,   512,   640,   768,  1282,  1794,  2436,  3080,  3770,  4454,  5364,     5372,  5380,  5388,  5392,  5396,  5412,  5420,  5428,  5460,  5492,  5508,     5572,  5604,  5668,  5796,  5860,  5892,  6412,  6668,  6796,  7308,  7564,     7820,  8076,  8620,  9132,  9388,  9910, 10166, 10680, 11196, 11726, 12240,    12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,    18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,}; static av_cold void dca_init_vlcs(void){    static int vlcs_initialized = 0;    int i, j, c = 14;    static VLC_TYPE dca_table[23622][2];     if (vlcs_initialized)        return;     dca_bitalloc_index.offset = 1;    dca_bitalloc_index.wrap = 2;    for (i = 0; i < 5; i++) {        dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];        dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];        init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,                 bitalloc_12_bits[i], 1, 1,                 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);    }    dca_scalefactor.offset = -64;    dca_scalefactor.wrap = 2;    for (i = 0; i < 5; i++) {        dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];        dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];        init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,                 scales_bits[i], 1, 1,                 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);    }    dca_tmode.offset = 0;    dca_tmode.wrap = 1;    for (i = 0; i < 4; i++) {        dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];        dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];        init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,                 tmode_bits[i], 1, 1,                 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);    }     for(i = 0; i < 10; i++)        for(j = 0; j < 7; j++){            if(!bitalloc_codes[i][j]) break;            dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i];            dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4);            dca_smpl_bitalloc[i+1].vlc[j].table = &dca_table[dca_vlc_offs[c]];            dca_smpl_bitalloc[i+1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];            init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j],                     bitalloc_sizes[i],                     bitalloc_bits[i][j], 1, 1,                     bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);            c++;        }    vlcs_initialized = 1;} static inline void get_array(GetBitContext *gb, int *dst, int len, int bits){    while(len--)        *dst++ = get_bits(gb, bits);} static int dca_parse_frame_header(DCAContext * s){    int i, j;    static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };    static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };    static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);     /* Sync code */    get_bits(&s->gb, 32);     /* Frame header */    s->frame_type        = get_bits(&s->gb, 1);    s->samples_deficit   = get_bits(&s->gb, 5) + 1;    s->crc_present       = get_bits(&s->gb, 1);    s->sample_blocks     = get_bits(&s->gb, 7) + 1;    s->frame_size        = get_bits(&s->gb, 14) + 1;    if (s->frame_size < 95)        return -1;    s->amode             = get_bits(&s->gb, 6);    s->sample_rate       = dca_sample_rates[get_bits(&s->gb, 4)];    if (!s->sample_rate)        return -1;    s->bit_rate_index    = get_bits(&s->gb, 5);    s->bit_rate          = dca_bit_rates[s->bit_rate_index];    if (!s->bit_rate)        return -1;     s->downmix           = get_bits(&s->gb, 1);    s->dynrange          = get_bits(&s->gb, 1);    s->timestamp         = get_bits(&s->gb, 1);    s->aux_data          = get_bits(&s->gb, 1);    s->hdcd              = get_bits(&s->gb, 1);    s->ext_descr         = get_bits(&s->gb, 3);    s->ext_coding        = get_bits(&s->gb, 1);    s->aspf              = get_bits(&s->gb, 1);    s->lfe               = get_bits(&s->gb, 2);    s->predictor_history = get_bits(&s->gb, 1);     /* TODO: check CRC */    if (s->crc_present)        s->header_crc    = get_bits(&s->gb, 16);     s->multirate_inter   = get_bits(&s->gb, 1);    s->version           = get_bits(&s->gb, 4);    s->copy_history      = get_bits(&s->gb, 2);    s->source_pcm_res    = get_bits(&s->gb, 3);    s->front_sum         = get_bits(&s->gb, 1);    s->surround_sum      = get_bits(&s->gb, 1);    s->dialog_norm       = get_bits(&s->gb, 4);     /* FIXME: channels mixing levels */    s->output = s->amode;    if(s->lfe) s->output |= DCA_LFE; #ifdef TRACE    av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);    av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);    av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);    av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",           s->sample_blocks, s->sample_blocks * 32);    av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);    av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",           s->amode, dca_channels[s->amode]);    av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",           s->sample_rate);    av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",           s->bit_rate);    av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);    av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);    av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);    av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);    av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);    av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);    av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);    av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);    av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);    av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",           s->predictor_history);    av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);    av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",           s->multirate_inter);    av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);    av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);    av_log(s->avctx, AV_LOG_DEBUG,           "source pcm resolution: %i (%i bits/sample)\n",           s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);    av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);    av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);    av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);    av_log(s->avctx, AV_LOG_DEBUG, "\n");#endif     /* Primary audio coding header */    s->subframes         = get_bits(&s->gb, 4) + 1;    s->total_channels    = get_bits(&s->gb, 3) + 1;    s->prim_channels     = s->total_channels;    if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)        s->prim_channels = DCA_PRIM_CHANNELS_MAX;   /* We only support DTS core */      for (i = 0; i < s->prim_channels; i++) {        s->subband_activity[i] = get_bits(&s->gb, 5) + 2;        if (s->subband_activity[i] > DCA_SUBBANDS)            s->subband_activity[i] = DCA_SUBBANDS;    }    for (i = 0; i < s->prim_channels; i++) {        s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;        if (s->vq_start_subband[i] > DCA_SUBBANDS)            s->vq_start_subband[i] = DCA_SUBBANDS;    }    get_array(&s->gb, s->joint_intensity,     s->prim_channels, 3);    get_array(&s->gb, s->transient_huffman,   s->prim_channels, 2);    get_array(&s->gb, s->scalefactor_huffman, s->prim_channels, 3);    get_array(&s->gb, s->bitalloc_huffman,    s->prim_channels, 3);     /* Get codebooks quantization indexes */    memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));    for (j = 1; j < 11; j++)        for (i = 0; i < s->prim_channels; i++)            s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);     /* Get scale factor adjustment */    for (j = 0; j < 11; j++)        for (i = 0; i < s->prim_channels; i++)            s->scalefactor_adj[i][j] = 1;     for (j = 1; j < 11; j++)        for (i = 0; i < s->prim_channels; i++)            if (s->quant_index_huffman[i][j] < thr[j])                s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];     if (s->crc_present) {        /* Audio header CRC check */        get_bits(&s->gb, 16);    }     s->current_subframe = 0;    s->current_subsubframe = 0; #ifdef TRACE    av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);    av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);    for(i = 0; i < s->prim_channels; i++){        av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n", s->subband_activity[i]);        av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n", s->vq_start_subband[i]);        av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n", s->joint_intensity[i]);        av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n", s->transient_huffman[i]);        av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n", s->scalefactor_huffman[i]);        av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n", s->bitalloc_huffman[i]);        av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");        for (j = 0; j < 11; j++)            av_log(s->avctx, AV_LOG_DEBUG, " %i",                   s->quant_index_huffman[i][j]);        av_log(s->avctx, AV_LOG_DEBUG, "\n");        av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");        for (j = 0; j < 11; j++)            av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);        av_log(s->avctx, AV_LOG_DEBUG, "\n");    }#endif     return 0;}  static inline int get_scale(GetBitContext *gb, int level, int value){   if (level < 5) {       /* huffman encoded */       value += get_bitalloc(gb, &dca_scalefactor, level);   } else if(level < 8)       value = get_bits(gb, level + 1);

Lines 1–500 of 1333.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t