summaryrefslogtreecommitdiff
path: root/apps/codecs/libwmapro/wma.h
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2010-07-14 19:37:52 +0000
committerMohamed Tarek <mt@rockbox.org>2010-07-14 19:37:52 +0000
commitd63abfc7eb7db5eb36b325198fbb6ceaf8778685 (patch)
treedc9496f504711569180fd9c5a91cf6e748815869 /apps/codecs/libwmapro/wma.h
parent16284ae8aef30ec67d7fd9c34519bce17d64ab3a (diff)
downloadrockbox-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.h88
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,