wmaenc.c
Go to the documentation of this file.
1 /*
2  * WMA compatible encoder
3  * Copyright (c) 2007 Michael Niedermayer
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 
22 #include "avcodec.h"
23 #include "internal.h"
24 #include "wma.h"
25 #include "libavutil/avassert.h"
26 
27 
28 static int encode_init(AVCodecContext * avctx){
29  WMACodecContext *s = avctx->priv_data;
30  int i, flags1, flags2, block_align;
31  uint8_t *extradata;
32 
33  s->avctx = avctx;
34 
35  if(avctx->channels > MAX_CHANNELS) {
36  av_log(avctx, AV_LOG_ERROR, "too many channels: got %i, need %i or fewer\n",
37  avctx->channels, MAX_CHANNELS);
38  return AVERROR(EINVAL);
39  }
40 
41  if (avctx->sample_rate > 48000) {
42  av_log(avctx, AV_LOG_ERROR, "sample rate is too high: %d > 48kHz\n",
43  avctx->sample_rate);
44  return AVERROR(EINVAL);
45  }
46 
47  if(avctx->bit_rate < 24*1000) {
48  av_log(avctx, AV_LOG_ERROR, "bitrate too low: got %i, need 24000 or higher\n",
49  avctx->bit_rate);
50  return AVERROR(EINVAL);
51  }
52 
53  /* extract flag infos */
54  flags1 = 0;
55  flags2 = 1;
56  if (avctx->codec->id == AV_CODEC_ID_WMAV1) {
57  extradata= av_malloc(4);
58  avctx->extradata_size= 4;
59  AV_WL16(extradata, flags1);
60  AV_WL16(extradata+2, flags2);
61  } else if (avctx->codec->id == AV_CODEC_ID_WMAV2) {
62  extradata= av_mallocz(10);
63  avctx->extradata_size= 10;
64  AV_WL32(extradata, flags1);
65  AV_WL16(extradata+4, flags2);
66  }else
67  av_assert0(0);
68  avctx->extradata= extradata;
69  s->use_exp_vlc = flags2 & 0x0001;
70  s->use_bit_reservoir = flags2 & 0x0002;
71  s->use_variable_block_len = flags2 & 0x0004;
72  if (avctx->channels == 2)
73  s->ms_stereo = 1;
74 
75  ff_wma_init(avctx, flags2);
76 
77  /* init MDCT */
78  for(i = 0; i < s->nb_block_sizes; i++)
79  ff_mdct_init(&s->mdct_ctx[i], s->frame_len_bits - i + 1, 0, 1.0);
80 
81  block_align = avctx->bit_rate * (int64_t)s->frame_len /
82  (avctx->sample_rate * 8);
83  block_align = FFMIN(block_align, MAX_CODED_SUPERFRAME_SIZE);
84  avctx->block_align = block_align;
85 
86  avctx->frame_size = avctx->delay = s->frame_len;
87 
88  return 0;
89 }
90 
91 
92 static void apply_window_and_mdct(AVCodecContext * avctx, const AVFrame *frame)
93 {
94  WMACodecContext *s = avctx->priv_data;
95  float **audio = (float **)frame->extended_data;
96  int len = frame->nb_samples;
97  int window_index= s->frame_len_bits - s->block_len_bits;
98  FFTContext *mdct = &s->mdct_ctx[window_index];
99  int ch;
100  const float * win = s->windows[window_index];
101  int window_len = 1 << s->block_len_bits;
102  float n = 2.0 * 32768.0 / window_len;
103 
104  for (ch = 0; ch < avctx->channels; ch++) {
105  memcpy(s->output, s->frame_out[ch], window_len * sizeof(*s->output));
106  s->fdsp.vector_fmul_scalar(s->frame_out[ch], audio[ch], n, len);
107  s->fdsp.vector_fmul_reverse(&s->output[window_len], s->frame_out[ch], win, len);
108  s->fdsp.vector_fmul(s->frame_out[ch], s->frame_out[ch], win, len);
109  mdct->mdct_calc(mdct, s->coefs[ch], s->output);
110  }
111 }
112 
113 //FIXME use for decoding too
114 static void init_exp(WMACodecContext *s, int ch, const int *exp_param){
115  int n;
116  const uint16_t *ptr;
117  float v, *q, max_scale, *q_end;
118 
119  ptr = s->exponent_bands[s->frame_len_bits - s->block_len_bits];
120  q = s->exponents[ch];
121  q_end = q + s->block_len;
122  max_scale = 0;
123  while (q < q_end) {
124  /* XXX: use a table */
125  v = pow(10, *exp_param++ * (1.0 / 16.0));
126  max_scale= FFMAX(max_scale, v);
127  n = *ptr++;
128  do {
129  *q++ = v;
130  } while (--n);
131  }
132  s->max_exponent[ch] = max_scale;
133 }
134 
135 static void encode_exp_vlc(WMACodecContext *s, int ch, const int *exp_param){
136  int last_exp;
137  const uint16_t *ptr;
138  float *q, *q_end;
139 
140  ptr = s->exponent_bands[s->frame_len_bits - s->block_len_bits];
141  q = s->exponents[ch];
142  q_end = q + s->block_len;
143  if (s->version == 1) {
144  last_exp= *exp_param++;
145  av_assert0(last_exp-10 >= 0 && last_exp-10 < 32);
146  put_bits(&s->pb, 5, last_exp - 10);
147  q+= *ptr++;
148  }else
149  last_exp = 36;
150  while (q < q_end) {
151  int exp = *exp_param++;
152  int code = exp - last_exp + 60;
153  av_assert1(code >= 0 && code < 120);
155  /* XXX: use a table */
156  q+= *ptr++;
157  last_exp= exp;
158  }
159 }
160 
161 static int encode_block(WMACodecContext *s, float (*src_coefs)[BLOCK_MAX_SIZE], int total_gain){
162  int v, bsize, ch, coef_nb_bits, parse_exponents;
163  float mdct_norm;
164  int nb_coefs[MAX_CHANNELS];
165  static const int fixed_exp[25]={20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20};
166 
167  //FIXME remove duplication relative to decoder
168  if (s->use_variable_block_len) {
169  av_assert0(0); //FIXME not implemented
170  }else{
171  /* fixed block len */
175  }
176 
177  s->block_len = 1 << s->block_len_bits;
178 // assert((s->block_pos + s->block_len) <= s->frame_len);
179  bsize = s->frame_len_bits - s->block_len_bits;
180 
181  //FIXME factor
182  v = s->coefs_end[bsize] - s->coefs_start;
183  for (ch = 0; ch < s->avctx->channels; ch++)
184  nb_coefs[ch] = v;
185  {
186  int n4 = s->block_len / 2;
187  mdct_norm = 1.0 / (float)n4;
188  if (s->version == 1) {
189  mdct_norm *= sqrt(n4);
190  }
191  }
192 
193  if (s->avctx->channels == 2) {
194  put_bits(&s->pb, 1, !!s->ms_stereo);
195  }
196 
197  for (ch = 0; ch < s->avctx->channels; ch++) {
198  s->channel_coded[ch] = 1; //FIXME only set channel_coded when needed, instead of always
199  if (s->channel_coded[ch]) {
200  init_exp(s, ch, fixed_exp);
201  }
202  }
203 
204  for (ch = 0; ch < s->avctx->channels; ch++) {
205  if (s->channel_coded[ch]) {
206  WMACoef *coefs1;
207  float *coefs, *exponents, mult;
208  int i, n;
209 
210  coefs1 = s->coefs1[ch];
211  exponents = s->exponents[ch];
212  mult = pow(10, total_gain * 0.05) / s->max_exponent[ch];
213  mult *= mdct_norm;
214  coefs = src_coefs[ch];
215  if (s->use_noise_coding && 0) {
216  av_assert0(0); //FIXME not implemented
217  } else {
218  coefs += s->coefs_start;
219  n = nb_coefs[ch];
220  for(i = 0;i < n; i++){
221  double t= *coefs++ / (exponents[i] * mult);
222  if(t<-32768 || t>32767)
223  return -1;
224 
225  coefs1[i] = lrint(t);
226  }
227  }
228  }
229  }
230 
231  v = 0;
232  for (ch = 0; ch < s->avctx->channels; ch++) {
233  int a = s->channel_coded[ch];
234  put_bits(&s->pb, 1, a);
235  v |= a;
236  }
237 
238  if (!v)
239  return 1;
240 
241  for(v= total_gain-1; v>=127; v-= 127)
242  put_bits(&s->pb, 7, 127);
243  put_bits(&s->pb, 7, v);
244 
245  coef_nb_bits= ff_wma_total_gain_to_bits(total_gain);
246 
247  if (s->use_noise_coding) {
248  for (ch = 0; ch < s->avctx->channels; ch++) {
249  if (s->channel_coded[ch]) {
250  int i, n;
251  n = s->exponent_high_sizes[bsize];
252  for(i=0;i<n;i++) {
253  put_bits(&s->pb, 1, s->high_band_coded[ch][i]= 0);
254  if (0)
255  nb_coefs[ch] -= s->exponent_high_bands[bsize][i];
256  }
257  }
258  }
259  }
260 
261  parse_exponents = 1;
262  if (s->block_len_bits != s->frame_len_bits) {
263  put_bits(&s->pb, 1, parse_exponents);
264  }
265 
266  if (parse_exponents) {
267  for (ch = 0; ch < s->avctx->channels; ch++) {
268  if (s->channel_coded[ch]) {
269  if (s->use_exp_vlc) {
270  encode_exp_vlc(s, ch, fixed_exp);
271  } else {
272  av_assert0(0); //FIXME not implemented
273 // encode_exp_lsp(s, ch);
274  }
275  }
276  }
277  } else {
278  av_assert0(0); //FIXME not implemented
279  }
280 
281  for (ch = 0; ch < s->avctx->channels; ch++) {
282  if (s->channel_coded[ch]) {
283  int run, tindex;
284  WMACoef *ptr, *eptr;
285  tindex = (ch == 1 && s->ms_stereo);
286  ptr = &s->coefs1[ch][0];
287  eptr = ptr + nb_coefs[ch];
288 
289  run=0;
290  for(;ptr < eptr; ptr++){
291  if(*ptr){
292  int level= *ptr;
293  int abs_level= FFABS(level);
294  int code= 0;
295  if(abs_level <= s->coef_vlcs[tindex]->max_level){
296  if(run < s->coef_vlcs[tindex]->levels[abs_level-1])
297  code= run + s->int_table[tindex][abs_level-1];
298  }
299 
300  av_assert2(code < s->coef_vlcs[tindex]->n);
301  put_bits(&s->pb, s->coef_vlcs[tindex]->huffbits[code], s->coef_vlcs[tindex]->huffcodes[code]);
302 
303  if(code == 0){
304  if(1<<coef_nb_bits <= abs_level)
305  return -1;
306 
307  put_bits(&s->pb, coef_nb_bits, abs_level);
308  put_bits(&s->pb, s->frame_len_bits, run);
309  }
310  put_bits(&s->pb, 1, level < 0); //FIXME the sign is fliped somewhere
311  run=0;
312  }else{
313  run++;
314  }
315  }
316  if(run)
317  put_bits(&s->pb, s->coef_vlcs[tindex]->huffbits[1], s->coef_vlcs[tindex]->huffcodes[1]);
318  }
319  if (s->version == 1 && s->avctx->channels >= 2) {
321  }
322  }
323  return 0;
324 }
325 
326 static int encode_frame(WMACodecContext *s, float (*src_coefs)[BLOCK_MAX_SIZE], uint8_t *buf, int buf_size, int total_gain){
327  init_put_bits(&s->pb, buf, buf_size);
328 
329  if (s->use_bit_reservoir) {
330  av_assert0(0);//FIXME not implemented
331  }else{
332  if(encode_block(s, src_coefs, total_gain) < 0)
333  return INT_MAX;
334  }
335 
337 
338  return put_bits_count(&s->pb) / 8 - s->avctx->block_align;
339 }
340 
341 static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt,
342  const AVFrame *frame, int *got_packet_ptr)
343 {
344  WMACodecContext *s = avctx->priv_data;
345  int i, total_gain, ret, error;
346 
347  s->block_len_bits= s->frame_len_bits; //required by non variable block len
348  s->block_len = 1 << s->block_len_bits;
349 
350  apply_window_and_mdct(avctx, frame);
351 
352  if (s->ms_stereo) {
353  float a, b;
354  int i;
355 
356  for(i = 0; i < s->block_len; i++) {
357  a = s->coefs[0][i]*0.5;
358  b = s->coefs[1][i]*0.5;
359  s->coefs[0][i] = a + b;
360  s->coefs[1][i] = a - b;
361  }
362  }
363 
364  if ((ret = ff_alloc_packet2(avctx, avpkt, 2 * MAX_CODED_SUPERFRAME_SIZE)) < 0)
365  return ret;
366 
367  total_gain= 128;
368  for(i=64; i; i>>=1){
369  error = encode_frame(s, s->coefs, avpkt->data, avpkt->size,
370  total_gain - i);
371  if(error<=0)
372  total_gain-= i;
373  }
374 
375  while(total_gain <= 128 && error > 0)
376  error = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain++);
377  av_assert0((put_bits_count(&s->pb) & 7) == 0);
378  i= avctx->block_align - (put_bits_count(&s->pb)+7)/8;
379  av_assert0(i>=0);
380  while(i--)
381  put_bits(&s->pb, 8, 'N');
382 
383  flush_put_bits(&s->pb);
384  av_assert0(put_bits_ptr(&s->pb) - s->pb.buf == avctx->block_align);
385 
386  if (frame->pts != AV_NOPTS_VALUE)
387  avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
388 
389  avpkt->size = avctx->block_align;
390  *got_packet_ptr = 1;
391  return 0;
392 }
393 
394 #if CONFIG_WMAV1_ENCODER
395 AVCodec ff_wmav1_encoder = {
396  .name = "wmav1",
397  .type = AVMEDIA_TYPE_AUDIO,
398  .id = AV_CODEC_ID_WMAV1,
399  .priv_data_size = sizeof(WMACodecContext),
400  .init = encode_init,
401  .encode2 = encode_superframe,
402  .close = ff_wma_end,
403  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
405  .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"),
406 };
407 #endif
408 #if CONFIG_WMAV2_ENCODER
409 AVCodec ff_wmav2_encoder = {
410  .name = "wmav2",
411  .type = AVMEDIA_TYPE_AUDIO,
412  .id = AV_CODEC_ID_WMAV2,
413  .priv_data_size = sizeof(WMACodecContext),
414  .init = encode_init,
415  .encode2 = encode_superframe,
416  .close = ff_wma_end,
417  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
419  .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"),
420 };
421 #endif
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:205
const struct AVCodec * codec
float v
const char * s
Definition: avisynth_c.h:668
static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition: wmaenc.c:341
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
int next_block_len_bits
log2 of next block length
Definition: wma.h:104
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define BLOCK_MAX_SIZE
Definition: wma.h:34
void avpriv_align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
Definition: bitstream.c:46
int block_len
block length in samples
Definition: wma.h:106
const uint8_t * huffbits
VLC bit size.
Definition: wma.h:62
uint8_t run
Definition: svq3.c:136
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
#define AV_WL32(p, darg)
Definition: intreadwrite.h:282
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
uint8_t
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:63
float WMACoef
type for decoded coefficients, int16_t would be enough for wma 1/2
Definition: wma.h:56
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats and store the result in a vector of floats...
Definition: float_dsp.h:38
#define b
Definition: input.c:42
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:159
const uint8_t ff_aac_scalefactor_bits[121]
Definition: aactab.c:70
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
const uint32_t * huffcodes
VLC bit values.
Definition: wma.h:61
uint8_t * data
static int encode_frame(WMACodecContext *s, float(*src_coefs)[BLOCK_MAX_SIZE], uint8_t *buf, int buf_size, int total_gain)
Definition: wmaenc.c:326
integer sqrt
Definition: avutil.txt:2
static int encode_init(AVCodecContext *avctx)
Definition: wmaenc.c:28
float, planar
Definition: samplefmt.h:60
frame
Definition: stft.m:14
int nb_block_sizes
number of block sizes
Definition: wma.h:100
int ff_wma_total_gain_to_bits(int total_gain)
Definition: wma.c:363
uint16_t * int_table[2]
Definition: wma.h:95
enum AVCodecID id
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
Definition: put_bits.h:199
static void encode_exp_vlc(WMACodecContext *s, int ch, const int *exp_param)
Definition: wmaenc.c:135
#define AV_WL16(p, darg)
Definition: intreadwrite.h:250
uint16_t exponent_bands[BLOCK_NB_SIZES][25]
Definition: wma.h:78
uint8_t channel_coded[MAX_CHANNELS]
true if channel is coded
Definition: wma.h:110
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static void apply_window_and_mdct(AVCodecContext *avctx, const AVFrame *frame)
Definition: wmaenc.c:92
AVFloatDSPContext fdsp
Definition: wma.h:134
uint8_t * buf
Definition: put_bits.h:44
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
#define ff_mdct_init
Definition: fft.h:147
static void put_bits(J2kEncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:160
#define FFMAX(a, b)
Definition: common.h:56
external API header
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:73
int exponent_high_bands[BLOCK_NB_SIZES][HIGH_BAND_MAX_SIZE]
Definition: wma.h:83
int ff_wma_end(AVCodecContext *avctx)
Definition: wma.c:372
Definition: fft.h:62
int bit_rate
the average bitrate
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
#define FFMIN(a, b)
Definition: common.h:58
int use_bit_reservoir
Definition: wma.h:71
float * windows[BLOCK_NB_SIZES]
Definition: wma.h:118
ret
Definition: avfilter.c:821
#define MAX_CODED_SUPERFRAME_SIZE
Definition: wma.h:44
t
Definition: genspecsines3.m:6
#define FFABS(a)
Definition: common.h:53
int version
1 = 0x160 (WMAV1), 2 = 0x161 (WMAV2)
Definition: wma.h:70
int frame_len
frame length in samples
Definition: wma.h:98
FIXME Range Coding of cr are level
Definition: snow.txt:367
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
static void init_exp(WMACodecContext *s, int ch, const int *exp_param)
Definition: wmaenc.c:114
int frame_size
Number of samples per channel in an audio frame.
1i.*Xphase exp()
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
int frame_len_bits
frame_len = 1 << frame_len_bits
Definition: wma.h:99
int sample_rate
samples per second
int use_exp_vlc
exponent coding: 0 = lsp, 1 = vlc + delta
Definition: wma.h:73
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
AVCodecContext * avctx
Definition: wma.h:67
void * buf
Definition: avisynth_c.h:594
static int16_t mult(Float11 *f1, Float11 *f2)
Definition: g726.c:56
int exponent_high_sizes[BLOCK_NB_SIZES]
Definition: wma.h:82
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
synthesis window for stochastic i
int use_noise_coding
true if perceptual noise is added
Definition: wma.h:74
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
Definition: float_dsp.h:69
static av_always_inline av_const long int lrint(double x)
Definition: libm.h:148
#define MAX_CHANNELS
Definition: aac.h:42
int use_variable_block_len
Definition: wma.h:72
uint8_t ms_stereo
true if mid/side stereo mode
Definition: wma.h:109
FFTContext mdct_ctx[BLOCK_NB_SIZES]
Definition: wma.h:117
const uint32_t ff_aac_scalefactor_code[121]
Definition: aactab.c:51
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
int prev_block_len_bits
log2 of prev block length
Definition: wma.h:105
static int encode_block(WMACodecContext *s, float(*src_coefs)[BLOCK_MAX_SIZE], int total_gain)
Definition: wmaenc.c:161
int coefs_end[BLOCK_NB_SIZES]
max number of coded coefficients
Definition: wma.h:81
struct WMACodecContext WMACodecContext
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:81
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:54
int len
int channels
number of audio channels
WMACoef coefs1[MAX_CHANNELS][BLOCK_MAX_SIZE]
Definition: wma.h:114
static const CoefVLCTable coef_vlcs[6]
Definition: wmadata.h:1382
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:700
float max_exponent[MAX_CHANNELS]
Definition: wma.h:113
int coefs_start
first coded coef
Definition: wma.h:80
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
int block_len_bits
log2 of current block length
Definition: wma.h:103
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:117
This structure stores compressed data.
int delay
Codec delay.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
int high_band_coded[MAX_CHANNELS][HIGH_BAND_MAX_SIZE]
Definition: wma.h:87
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
for(j=16;j >0;--j)
int ff_wma_init(AVCodecContext *avctx, int flags2)
Definition: wma.c:71
const CoefVLCTable * coef_vlcs[2]
Definition: wma.h:96
PutBitContext pb
Definition: wma.h:69
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:190
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats, and store the result in a vector of floats...
Definition: float_dsp.h:140