diff options
| author | Mohamed Tarek <mt@rockbox.org> | 2010-07-14 19:37:52 +0000 |
|---|---|---|
| committer | Mohamed Tarek <mt@rockbox.org> | 2010-07-14 19:37:52 +0000 |
| commit | d63abfc7eb7db5eb36b325198fbb6ceaf8778685 (patch) | |
| tree | dc9496f504711569180fd9c5a91cf6e748815869 /apps/codecs/libwmapro/wma.h | |
| parent | 16284ae8aef30ec67d7fd9c34519bce17d64ab3a (diff) | |
| download | rockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.zip rockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.tar.gz rockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.tar.bz2 rockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.tar.xz | |
Add WMA Pro to the main build. WMA Pro now plays on target and decodes in 151% realtime in a 320kbps sample on a sansa e200. Lots of cleanup still need to be done, and optimisations should start soon too.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27417 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libwmapro/wma.h')
| -rw-r--r-- | apps/codecs/libwmapro/wma.h | 88 |
1 files changed, 1 insertions, 87 deletions
diff --git a/apps/codecs/libwmapro/wma.h b/apps/codecs/libwmapro/wma.h index d23b7ea..e4a1601 100644 --- a/apps/codecs/libwmapro/wma.h +++ b/apps/codecs/libwmapro/wma.h @@ -24,8 +24,6 @@ #include "get_bits.h" #include "put_bits.h" -#include "dsputil.h" -#include "fft.h" /* size of blocks */ #define BLOCK_MIN_BITS 7 @@ -62,90 +60,6 @@ typedef struct CoefVLCTable { const uint16_t *levels; ///< table to build run/level tables } CoefVLCTable; -typedef struct WMACodecContext { - AVCodecContext* avctx; - GetBitContext gb; - PutBitContext pb; - int sample_rate; - int nb_channels; - int bit_rate; - int version; ///< 1 = 0x160 (WMAV1), 2 = 0x161 (WMAV2) - int block_align; - int use_bit_reservoir; - int use_variable_block_len; - int use_exp_vlc; ///< exponent coding: 0 = lsp, 1 = vlc + delta - int use_noise_coding; ///< true if perceptual noise is added - int byte_offset_bits; - VLC exp_vlc; - int exponent_sizes[BLOCK_NB_SIZES]; - uint16_t exponent_bands[BLOCK_NB_SIZES][25]; - int high_band_start[BLOCK_NB_SIZES]; ///< index of first coef in high band - int coefs_start; ///< first coded coef - int coefs_end[BLOCK_NB_SIZES]; ///< max number of coded coefficients - int exponent_high_sizes[BLOCK_NB_SIZES]; - int exponent_high_bands[BLOCK_NB_SIZES][HIGH_BAND_MAX_SIZE]; - VLC hgain_vlc; - - /* coded values in high bands */ - int high_band_coded[MAX_CHANNELS][HIGH_BAND_MAX_SIZE]; - int high_band_values[MAX_CHANNELS][HIGH_BAND_MAX_SIZE]; - - /* there are two possible tables for spectral coefficients */ -//FIXME the following 3 tables should be shared between decoders - VLC coef_vlc[2]; - uint16_t *run_table[2]; - float *level_table[2]; - uint16_t *int_table[2]; - const CoefVLCTable *coef_vlcs[2]; - /* frame info */ - int frame_len; ///< frame length in samples - int frame_len_bits; ///< frame_len = 1 << frame_len_bits - int nb_block_sizes; ///< number of block sizes - /* block info */ - int reset_block_lengths; - int block_len_bits; ///< log2 of current block length - int next_block_len_bits; ///< log2 of next block length - int prev_block_len_bits; ///< log2 of prev block length - int block_len; ///< block length in samples - int block_num; ///< block number in current frame - int block_pos; ///< current position in frame - uint8_t ms_stereo; ///< true if mid/side stereo mode - uint8_t channel_coded[MAX_CHANNELS]; ///< true if channel is coded - int exponents_bsize[MAX_CHANNELS]; ///< log2 ratio frame/exp. length - DECLARE_ALIGNED(16, float, exponents)[MAX_CHANNELS][BLOCK_MAX_SIZE]; - float max_exponent[MAX_CHANNELS]; - WMACoef coefs1[MAX_CHANNELS][BLOCK_MAX_SIZE]; - DECLARE_ALIGNED(16, float, coefs)[MAX_CHANNELS][BLOCK_MAX_SIZE]; - DECLARE_ALIGNED(16, FFTSample, output)[BLOCK_MAX_SIZE * 2]; - FFTContext mdct_ctx[BLOCK_NB_SIZES]; - float *windows[BLOCK_NB_SIZES]; - /* output buffer for one frame and the last for IMDCT windowing */ - DECLARE_ALIGNED(16, float, frame_out)[MAX_CHANNELS][BLOCK_MAX_SIZE * 2]; - /* last frame info */ - uint8_t last_superframe[MAX_CODED_SUPERFRAME_SIZE + 4]; /* padding added */ - int last_bitoffset; - int last_superframe_len; - float noise_table[NOISE_TAB_SIZE]; - int noise_index; - float noise_mult; /* XXX: suppress that and integrate it in the noise array */ - /* lsp_to_curve tables */ - float lsp_cos_table[BLOCK_MAX_SIZE]; - float lsp_pow_e_table[256]; - float lsp_pow_m_table1[(1 << LSP_POW_BITS)]; - float lsp_pow_m_table2[(1 << LSP_POW_BITS)]; - DSPContext dsp; - -#ifdef TRACE - int frame_count; -#endif -} WMACodecContext; - -extern const uint16_t ff_wma_critical_freqs[25]; -extern const uint16_t ff_wma_hgain_huffcodes[37]; -extern const uint8_t ff_wma_hgain_huffbits[37]; -extern const float ff_wma_lsp_codebook[NB_LSP_COEFS][16]; -extern const uint32_t ff_aac_scalefactor_code[121]; -extern const uint8_t ff_aac_scalefactor_bits[121]; int av_cold ff_wma_get_frame_len_bits(int sample_rate, int version, unsigned int decode_flags); @@ -153,7 +67,7 @@ int ff_wma_init(AVCodecContext * avctx, int flags2); int ff_wma_total_gain_to_bits(int total_gain); int ff_wma_end(AVCodecContext *avctx); unsigned int ff_wma_get_large_val(GetBitContext* gb); -int ff_wma_run_level_decode(AVCodecContext* avctx, GetBitContext* gb, +int ff_wma_run_level_decode(GetBitContext* gb, VLC *vlc, const int32_t *level_table, const uint16_t *run_table, int version, int32_t *ptr, int offset, |