Mercurial > libavcodec.hg
annotate wma.h @ 6323:e6da66f378c7 libavcodec
mpegvideo.h has two function declarations with the 'inline' specifier
but no definition for those functions. The C standard requires a
definition to appear in the same translation unit for any function
declared with 'inline'. Most of the files including mpegvideo.h do not
define those functions. Fix this by removing the 'inline' specifiers
from the header.
patch by Uoti Urpala
author | diego |
---|---|
date | Sun, 03 Feb 2008 17:54:30 +0000 |
parents | 1d83e9c34641 |
children | 97383e012cb9 |
rev | line source |
---|---|
4490 | 1 /* |
2 * WMA compatible codec | |
3 * Copyright (c) 2002-2007 The FFmpeg Project. | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5258
diff
changeset
|
22 #ifndef FFMPEG_WMA_H |
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5258
diff
changeset
|
23 #define FFMPEG_WMA_H |
4490 | 24 |
25 #include "bitstream.h" | |
26 #include "dsputil.h" | |
27 | |
28 /* size of blocks */ | |
29 #define BLOCK_MIN_BITS 7 | |
30 #define BLOCK_MAX_BITS 11 | |
31 #define BLOCK_MAX_SIZE (1 << BLOCK_MAX_BITS) | |
32 | |
33 #define BLOCK_NB_SIZES (BLOCK_MAX_BITS - BLOCK_MIN_BITS + 1) | |
34 | |
35 /* XXX: find exact max size */ | |
36 #define HIGH_BAND_MAX_SIZE 16 | |
37 | |
38 #define NB_LSP_COEFS 10 | |
39 | |
40 /* XXX: is it a suitable value ? */ | |
41 #define MAX_CODED_SUPERFRAME_SIZE 16384 | |
42 | |
43 #define MAX_CHANNELS 2 | |
44 | |
45 #define NOISE_TAB_SIZE 8192 | |
46 | |
47 #define LSP_POW_BITS 7 | |
48 | |
49 //FIXME should be in wmadec | |
50 #define VLCBITS 9 | |
51 #define VLCMAX ((22+VLCBITS-1)/VLCBITS) | |
52 | |
53 typedef struct CoefVLCTable { | |
4497 | 54 int n; ///< total number of codes |
4490 | 55 int max_level; |
4497 | 56 const uint32_t *huffcodes; ///< VLC bit values |
57 const uint8_t *huffbits; ///< VLC bit size | |
58 const uint16_t *levels; ///< table to build run/level tables | |
4490 | 59 } CoefVLCTable; |
60 | |
4601 | 61 typedef struct WMACodecContext { |
4600 | 62 AVCodecContext* avctx; |
4490 | 63 GetBitContext gb; |
64 PutBitContext pb; | |
65 int sample_rate; | |
66 int nb_channels; | |
67 int bit_rate; | |
4497 | 68 int version; ///< 1 = 0x160 (WMAV1), 2 = 0x161 (WMAV2) |
4490 | 69 int block_align; |
70 int use_bit_reservoir; | |
71 int use_variable_block_len; | |
4497 | 72 int use_exp_vlc; ///< exponent coding: 0 = lsp, 1 = vlc + delta |
73 int use_noise_coding; ///< true if perceptual noise is added | |
4490 | 74 int byte_offset_bits; |
75 VLC exp_vlc; | |
76 int exponent_sizes[BLOCK_NB_SIZES]; | |
77 uint16_t exponent_bands[BLOCK_NB_SIZES][25]; | |
4497 | 78 int high_band_start[BLOCK_NB_SIZES]; ///< index of first coef in high band |
79 int coefs_start; ///< first coded coef | |
80 int coefs_end[BLOCK_NB_SIZES]; ///< max number of coded coefficients | |
4490 | 81 int exponent_high_sizes[BLOCK_NB_SIZES]; |
82 int exponent_high_bands[BLOCK_NB_SIZES][HIGH_BAND_MAX_SIZE]; | |
83 VLC hgain_vlc; | |
84 | |
85 /* coded values in high bands */ | |
86 int high_band_coded[MAX_CHANNELS][HIGH_BAND_MAX_SIZE]; | |
87 int high_band_values[MAX_CHANNELS][HIGH_BAND_MAX_SIZE]; | |
88 | |
89 /* there are two possible tables for spectral coefficients */ | |
90 //FIXME the following 3 tables should be shared between decoders | |
91 VLC coef_vlc[2]; | |
92 uint16_t *run_table[2]; | |
93 uint16_t *level_table[2]; | |
94 uint16_t *int_table[2]; | |
5258 | 95 const CoefVLCTable *coef_vlcs[2]; |
4490 | 96 /* frame info */ |
4497 | 97 int frame_len; ///< frame length in samples |
98 int frame_len_bits; ///< frame_len = 1 << frame_len_bits | |
99 int nb_block_sizes; ///< number of block sizes | |
4490 | 100 /* block info */ |
101 int reset_block_lengths; | |
4497 | 102 int block_len_bits; ///< log2 of current block length |
103 int next_block_len_bits; ///< log2 of next block length | |
104 int prev_block_len_bits; ///< log2 of prev block length | |
105 int block_len; ///< block length in samples | |
106 int block_num; ///< block number in current frame | |
107 int block_pos; ///< current position in frame | |
108 uint8_t ms_stereo; ///< true if mid/side stereo mode | |
109 uint8_t channel_coded[MAX_CHANNELS]; ///< true if channel is coded | |
4785
4ae9ab738aec
WMA decoder improvement, output closer to the dmo binary.
banan
parents:
4737
diff
changeset
|
110 int exponents_bsize[MAX_CHANNELS]; ///< log2 ratio frame/exp. length |
4490 | 111 DECLARE_ALIGNED_16(float, exponents[MAX_CHANNELS][BLOCK_MAX_SIZE]); |
112 float max_exponent[MAX_CHANNELS]; | |
113 int16_t coefs1[MAX_CHANNELS][BLOCK_MAX_SIZE]; | |
114 DECLARE_ALIGNED_16(float, coefs[MAX_CHANNELS][BLOCK_MAX_SIZE]); | |
115 DECLARE_ALIGNED_16(FFTSample, output[BLOCK_MAX_SIZE * 2]); | |
116 MDCTContext mdct_ctx[BLOCK_NB_SIZES]; | |
117 float *windows[BLOCK_NB_SIZES]; | |
4497 | 118 DECLARE_ALIGNED_16(FFTSample, mdct_tmp[BLOCK_MAX_SIZE]); ///< temporary storage for imdct |
4490 | 119 /* output buffer for one frame and the last for IMDCT windowing */ |
120 DECLARE_ALIGNED_16(float, frame_out[MAX_CHANNELS][BLOCK_MAX_SIZE * 2]); | |
121 /* last frame info */ | |
122 uint8_t last_superframe[MAX_CODED_SUPERFRAME_SIZE + 4]; /* padding added */ | |
123 int last_bitoffset; | |
124 int last_superframe_len; | |
125 float noise_table[NOISE_TAB_SIZE]; | |
126 int noise_index; | |
127 float noise_mult; /* XXX: suppress that and integrate it in the noise array */ | |
128 /* lsp_to_curve tables */ | |
129 float lsp_cos_table[BLOCK_MAX_SIZE]; | |
130 float lsp_pow_e_table[256]; | |
131 float lsp_pow_m_table1[(1 << LSP_POW_BITS)]; | |
132 float lsp_pow_m_table2[(1 << LSP_POW_BITS)]; | |
133 DSPContext dsp; | |
134 | |
135 #ifdef TRACE | |
136 int frame_count; | |
137 #endif | |
4601 | 138 } WMACodecContext; |
4490 | 139 |
140 extern const uint16_t ff_wma_hgain_huffcodes[37]; | |
141 extern const uint8_t ff_wma_hgain_huffbits[37]; | |
142 extern const float ff_wma_lsp_codebook[NB_LSP_COEFS][16]; | |
143 extern const uint32_t ff_wma_scale_huffcodes[121]; | |
144 extern const uint8_t ff_wma_scale_huffbits[121]; | |
145 | |
146 int ff_wma_init(AVCodecContext * avctx, int flags2); | |
147 int ff_wma_total_gain_to_bits(int total_gain); | |
148 int ff_wma_end(AVCodecContext *avctx); | |
149 | |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5258
diff
changeset
|
150 #endif /* FFMPEG_WMA_H */ |