FFmpeg
Loading...
Searching...
No Matches
wmaprodec.c
Go to the documentation of this file.
1/*
2 * Wmapro compatible decoder
3 * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4 * Copyright (c) 2008 - 2011 Sascha Sommer, Benjamin Larsson
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23/**
24 * @file
25 * @brief wmapro decoder implementation
26 * Wmapro is an MDCT based codec comparable to wma standard or AAC.
27 * The decoding therefore consists of the following steps:
28 * - bitstream decoding
29 * - reconstruction of per-channel data
30 * - rescaling and inverse quantization
31 * - IMDCT
32 * - windowing and overlapp-add
33 *
34 * The compressed wmapro bitstream is split into individual packets.
35 * Every such packet contains one or more wma frames.
36 * The compressed frames may have a variable length and frames may
37 * cross packet boundaries.
38 * Common to all wmapro frames is the number of samples that are stored in
39 * a frame.
40 * The number of samples and a few other decode flags are stored
41 * as extradata that has to be passed to the decoder.
42 *
43 * The wmapro frames themselves are again split into a variable number of
44 * subframes. Every subframe contains the data for 2^N time domain samples
45 * where N varies between 7 and 12.
46 *
47 * Example wmapro bitstream (in samples):
48 *
49 * || packet 0 || packet 1 || packet 2 packets
50 * ---------------------------------------------------
51 * || frame 0 || frame 1 || frame 2 || frames
52 * ---------------------------------------------------
53 * || | | || | | | || || subframes of channel 0
54 * ---------------------------------------------------
55 * || | | || | | | || || subframes of channel 1
56 * ---------------------------------------------------
57 *
58 * The frame layouts for the individual channels of a wma frame does not need
59 * to be the same.
60 *
61 * However, if the offsets and lengths of several subframes of a frame are the
62 * same, the subframes of the channels can be grouped.
63 * Every group may then use special coding techniques like M/S stereo coding
64 * to improve the compression ratio. These channel transformations do not
65 * need to be applied to a whole subframe. Instead, they can also work on
66 * individual scale factor bands (see below).
67 * The coefficients that carry the audio signal in the frequency domain
68 * are transmitted as huffman-coded vectors with 4, 2 and 1 elements.
69 * In addition to that, the encoder can switch to a runlevel coding scheme
70 * by transmitting subframe_length / 128 zero coefficients.
71 *
72 * Before the audio signal can be converted to the time domain, the
73 * coefficients have to be rescaled and inverse quantized.
74 * A subframe is therefore split into several scale factor bands that get
75 * scaled individually.
76 * Scale factors are submitted for every frame but they might be shared
77 * between the subframes of a channel. Scale factors are initially DPCM-coded.
78 * Once scale factors are shared, the differences are transmitted as runlevel
79 * codes.
80 * Every subframe length and offset combination in the frame layout shares a
81 * common quantization factor that can be adjusted for every channel by a
82 * modifier.
83 * After the inverse quantization, the coefficients get processed by an IMDCT.
84 * The resulting values are then windowed with a sine window and the first half
85 * of the values are added to the second half of the output from the previous
86 * subframe in order to reconstruct the output samples.
87 */
88
89#include <inttypes.h>
90
93#include "libavutil/mem.h"
94#include "libavutil/tx.h"
95#include "libavutil/ffmath.h"
96#include "libavutil/float_dsp.h"
97#include "libavutil/intfloat.h"
100#include "libavutil/thread.h"
101
102#include "avcodec.h"
103#include "codec_internal.h"
104#include "decode.h"
105#include "get_bits.h"
106#include "internal.h"
107#include "put_bits.h"
108#include "wmaprodata.h"
109#include "sinewin.h"
110#include "wma.h"
111#include "wma_common.h"
112
113/** current decoder limitations */
114#define WMAPRO_MAX_CHANNELS 8 ///< max number of handled channels
115#define MAX_SUBFRAMES 32 ///< max number of subframes per channel
116#define MAX_BANDS 29 ///< max number of scale factor bands
117#define MAX_FRAMESIZE 32768 ///< maximum compressed frame size
118#define XMA_MAX_STREAMS 8
119#define XMA_MAX_CHANNELS_STREAM 2
120#define XMA_MAX_CHANNELS (XMA_MAX_STREAMS * XMA_MAX_CHANNELS_STREAM)
121
122#define WMAPRO_BLOCK_MIN_BITS 6 ///< log2 of min block size
123#define WMAPRO_BLOCK_MAX_BITS 13 ///< log2 of max block size
124#define WMAPRO_BLOCK_MIN_SIZE (1 << WMAPRO_BLOCK_MIN_BITS) ///< minimum block size
125#define WMAPRO_BLOCK_MAX_SIZE (1 << WMAPRO_BLOCK_MAX_BITS) ///< maximum block size
126#define WMAPRO_BLOCK_SIZES (WMAPRO_BLOCK_MAX_BITS - WMAPRO_BLOCK_MIN_BITS + 1) ///< possible block sizes
127
128
129#define VLCBITS 9
130#define SCALEVLCBITS 8
131#define VEC4MAXDEPTH ((HUFF_VEC4_MAXBITS+VLCBITS-1)/VLCBITS)
132#define VEC2MAXDEPTH ((HUFF_VEC2_MAXBITS+VLCBITS-1)/VLCBITS)
133#define VEC1MAXDEPTH ((HUFF_VEC1_MAXBITS+VLCBITS-1)/VLCBITS)
134#define SCALEMAXDEPTH ((HUFF_SCALE_MAXBITS+SCALEVLCBITS-1)/SCALEVLCBITS)
135#define SCALERLMAXDEPTH ((HUFF_SCALE_RL_MAXBITS+VLCBITS-1)/VLCBITS)
136
137static VLCElem sf_vlc[616]; ///< scale factor DPCM vlc
138static VLCElem sf_rl_vlc[1406]; ///< scale factor run length vlc
139static VLCElem vec4_vlc[604]; ///< 4 coefficients per symbol
140static VLCElem vec2_vlc[562]; ///< 2 coefficients per symbol
141static VLCElem vec1_vlc[562]; ///< 1 coefficient per symbol
142static const VLCElem *coef_vlc[2]; ///< coefficient run length vlc codes
143static float sin64[33]; ///< sine table for decorrelation
144
145/**
146 * @brief frame specific decoder context for a single channel
147 */
148typedef struct WMAProChannelCtx {
149 int16_t prev_block_len; ///< length of the previous block
152 uint16_t subframe_len[MAX_SUBFRAMES]; ///< subframe length in samples
153 uint16_t subframe_offset[MAX_SUBFRAMES]; ///< subframe positions in the current frame
154 uint8_t cur_subframe; ///< current subframe number
155 uint16_t decoded_samples; ///< number of already processed samples
156 uint8_t grouped; ///< channel is part of a group
157 int quant_step; ///< quantization step for the current subframe
158 int8_t reuse_sf; ///< share scale factors between subframes
159 int8_t scale_factor_step; ///< scaling step for the current subframe
160 int max_scale_factor; ///< maximum scale factor for the current subframe
161 int saved_scale_factors[2][MAX_BANDS]; ///< resampled and (previously) transmitted scale factor values
162 int8_t scale_factor_idx; ///< index for the transmitted scale factor values (used for resampling)
163 int* scale_factors; ///< pointer to the scale factor values used for decoding
164 uint8_t table_idx; ///< index in sf_offsets for the scale factor reference block
165 float* coeffs; ///< pointer to the subframe decode buffer
166 uint16_t num_vec_coeffs; ///< number of vector coded coefficients
167 DECLARE_ALIGNED(32, float, out)[WMAPRO_BLOCK_MAX_SIZE + WMAPRO_BLOCK_MAX_SIZE / 2]; ///< output buffer
169
170/**
171 * @brief channel group for channel transformations
172 */
173typedef struct WMAProChannelGrp {
174 uint8_t num_channels; ///< number of channels in the group
175 int8_t transform; ///< transform on / off
176 int8_t transform_band[MAX_BANDS]; ///< controls if the transform is enabled for a certain band
178 float* channel_data[WMAPRO_MAX_CHANNELS]; ///< transformation coefficients
180
181/**
182 * @brief main decoder context
183 */
184typedef struct WMAProDecodeCtx {
185 /* generic decoder variables */
186 AVCodecContext* avctx; ///< codec context for av_log
189 AV_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
190 PutBitContext pb; ///< context for filling the frame_data buffer
191 AVTXContext *tx[WMAPRO_BLOCK_SIZES]; ///< MDCT context per block size
193 DECLARE_ALIGNED(32, float, tmp)[WMAPRO_BLOCK_MAX_SIZE]; ///< IMDCT output buffer
194 const float* windows[WMAPRO_BLOCK_SIZES]; ///< windows for the different block sizes
195
196 /* frame size dependent frame information (set during initialization) */
197 uint32_t decode_flags; ///< used compression features
198 uint8_t len_prefix; ///< frame is prefixed with its length
199 uint8_t dynamic_range_compression; ///< frame contains DRC data
200 uint8_t bits_per_sample; ///< integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
201 uint16_t samples_per_frame; ///< number of samples to output
202 uint16_t trim_start; ///< number of samples to skip at start
203 uint16_t trim_end; ///< number of samples to skip at end
205 int8_t lfe_channel; ///< lfe channel index
207 uint8_t subframe_len_bits; ///< number of bits used for the subframe length
208 uint8_t max_subframe_len_bit; ///< flag indicating that the subframe is of maximum size when the first subframe length bit is 1
210 int8_t num_sfb[WMAPRO_BLOCK_SIZES]; ///< scale factor bands per block size
211 int16_t sfb_offsets[WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor band offsets (multiples of 4)
212 int8_t sf_offsets[WMAPRO_BLOCK_SIZES][WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor resample matrix
213 int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]; ///< subwoofer cutoff values
214
215 /* packet decode state */
216 GetBitContext pgb; ///< bitstream reader context for the packet
217 int next_packet_start; ///< start offset of the next wma packet in the demuxer packet
218 uint8_t packet_offset; ///< frame offset in the packet
219 uint8_t packet_sequence_number; ///< current packet number
220 int num_saved_bits; ///< saved number of bits
221 int frame_offset; ///< frame offset in the bit reservoir
222 int subframe_offset; ///< subframe offset in the bit reservoir
223 uint8_t packet_loss; ///< set in case of bitstream error
224 uint8_t packet_done; ///< set when a packet is fully decoded
225 uint8_t eof_done; ///< set when EOF reached and extra subframe is written (XMA1/2)
226
227 /* frame decode state */
228 uint32_t frame_num; ///< current frame number (not used for decoding)
229 GetBitContext gb; ///< bitstream reader context
230 int buf_bit_size; ///< buffer size in bits
231 uint8_t drc_gain; ///< gain for the DRC tool
232 int8_t skip_frame; ///< skip output step
233 int8_t parsed_all_subframes; ///< all subframes decoded?
234 uint8_t skip_packets; ///< packets to skip to find next packet in a stream (XMA1/2)
235
236 /* subframe/block decode state */
237 int16_t subframe_len; ///< current subframe length
238 int8_t nb_channels; ///< number of channels in stream (XMA1/2)
239 int8_t channels_for_cur_subframe; ///< number of channels that contain the subframe
241 int8_t num_bands; ///< number of scale factor bands
242 int8_t transmit_num_vec_coeffs; ///< number of vector coded coefficients is part of the bitstream
243 int16_t* cur_sfb_offsets; ///< sfb offsets for the current block
244 uint8_t table_idx; ///< index for the num_sfb, sfb_offsets, sf_offsets and subwoofer_cutoffs tables
245 int8_t esc_len; ///< length of escaped coefficients
246
247 uint8_t num_chgroups; ///< number of channel groups
248 WMAProChannelGrp chgroup[WMAPRO_MAX_CHANNELS]; ///< channel group information
249
252
263
264/**
265 *@brief helper function to print the most important members of the context
266 *@param s context
267 */
269{
270#define PRINT(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %d\n", a, b);
271#define PRINT_HEX(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %"PRIx32"\n", a, b);
272
273 PRINT("ed sample bit depth", s->bits_per_sample);
274 PRINT_HEX("ed decode flags", s->decode_flags);
275 PRINT("samples per frame", s->samples_per_frame);
276 PRINT("log2 frame size", s->log2_frame_size);
277 PRINT("max num subframes", s->max_num_subframes);
278 PRINT("len prefix", s->len_prefix);
279 PRINT("num channels", s->nb_channels);
280}
281
282/**
283 *@brief Uninitialize the decoder and free all resources.
284 *@param avctx codec context
285 *@return 0 on success, < 0 otherwise
286 */
288{
289 int i;
290
291 av_freep(&s->fdsp);
292
293 for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
294 av_tx_uninit(&s->tx[i]);
295
296 return 0;
297}
298
300{
301 WMAProDecodeCtx *s = avctx->priv_data;
302
303 decode_end(s);
304
305 return 0;
306}
307
309{
310 if (avctx->codec_id != AV_CODEC_ID_WMAPRO) { // XXX: is this really only for XMA?
311 if (avctx->sample_rate > 44100)
312 return 48000;
313 else if (avctx->sample_rate > 32000)
314 return 44100;
315 else if (avctx->sample_rate > 24000)
316 return 32000;
317 return 24000;
318 }
319
320 return avctx->sample_rate;
321}
322
324{
325 static VLCElem vlc_buf[2108 + 3912];
327
329 &scale_table[0][1], 2,
330 &scale_table[0][0], 2, 1, -60, 0);
332 &scale_rl_table[0][1], 2,
333 &scale_rl_table[0][0], 2, 1, 0, 0);
334 coef_vlc[0] =
336 coef0_lens, 1,
337 coef0_syms, 2, 2, 0, 0);
338 coef_vlc[1] =
340 &coef1_table[0][1], 2,
341 &coef1_table[0][0], 2, 1, 0, 0);
343 vec4_lens, 1,
344 vec4_syms, 2, 2, -1, 0);
346 &vec2_table[0][1], 2,
347 &vec2_table[0][0], 2, 1, -1, 0);
349 &vec1_table[0][1], 2,
350 &vec1_table[0][0], 2, 1, 0, 0);
351
352 /** calculate sine values for the decorrelation matrix */
353 for (int i = 0; i < 33; i++)
354 sin64[i] = sin(i * M_PI / 64.0);
355
358}
359
360/**
361 *@brief Initialize the decoder.
362 *@param avctx codec context
363 *@return 0 on success, -1 otherwise
364 */
365static av_cold int decode_init(WMAProDecodeCtx *s, AVCodecContext *avctx, int num_stream)
366{
367 static AVOnce init_static_once = AV_ONCE_INIT;
368 uint8_t *edata_ptr = avctx->extradata;
369 unsigned int channel_mask;
370 int i, bits;
371 int log2_max_num_subframes;
372 int num_possible_block_sizes;
373
374 s->avctx = avctx;
375
376 init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
377
379
380 /** dump the extradata */
381 av_log(avctx, AV_LOG_DEBUG, "extradata:\n");
382 for (i = 0; i < avctx->extradata_size; i++)
383 av_log(avctx, AV_LOG_DEBUG, "[%x] ", avctx->extradata[i]);
384 av_log(avctx, AV_LOG_DEBUG, "\n");
385
386 if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size == 34) { /* XMA2WAVEFORMATEX */
387 s->decode_flags = 0x10d6;
388 s->bits_per_sample = 16;
389 channel_mask = 0; //AV_RL32(edata_ptr+2); /* not always in expected order */
390 if ((num_stream+1) * XMA_MAX_CHANNELS_STREAM > avctx->ch_layout.nb_channels) /* stream config is 2ch + 2ch + ... + 1/2ch */
391 s->nb_channels = 1;
392 else
393 s->nb_channels = 2;
394 } else if (avctx->codec_id == AV_CODEC_ID_XMA2) { /* XMA2WAVEFORMAT */
395 s->decode_flags = 0x10d6;
396 s->bits_per_sample = 16;
397 channel_mask = 0; /* would need to aggregate from all streams */
398 s->nb_channels = edata_ptr[32 + ((edata_ptr[0]==3)?0:8) + 4*num_stream + 0]; /* nth stream config */
399 } else if (avctx->codec_id == AV_CODEC_ID_XMA1) { /* XMAWAVEFORMAT */
400 s->decode_flags = 0x10d6;
401 s->bits_per_sample = 16;
402 channel_mask = 0; /* would need to aggregate from all streams */
403 s->nb_channels = edata_ptr[8 + 20*num_stream + 17]; /* nth stream config */
404 } else if (avctx->codec_id == AV_CODEC_ID_WMAPRO && avctx->extradata_size >= 18) {
405 s->decode_flags = AV_RL16(edata_ptr+14);
406 channel_mask = AV_RL32(edata_ptr+2);
407 s->bits_per_sample = AV_RL16(edata_ptr);
408 s->nb_channels = channel_mask ? av_popcount(channel_mask) : avctx->ch_layout.nb_channels;
409
410 if (s->bits_per_sample > 32 || s->bits_per_sample < 1) {
411 avpriv_request_sample(avctx, "bits per sample is %d", s->bits_per_sample);
413 }
414 } else {
415 avpriv_request_sample(avctx, "Unknown extradata size");
417 }
418
419 /** generic init */
420 s->log2_frame_size = av_log2(avctx->block_align) + 4;
421 if (s->log2_frame_size > 25) {
422 avpriv_request_sample(avctx, "Large block align");
424 }
425
426 /** frame info */
427 s->skip_frame = 1; /* skip first frame */
428
429 s->packet_loss = 1;
430 s->len_prefix = (s->decode_flags & 0x40);
431
432 /** get frame len */
433 if (avctx->codec_id == AV_CODEC_ID_WMAPRO) {
434 bits = ff_wma_get_frame_len_bits(avctx->sample_rate, 3, s->decode_flags);
436 avpriv_request_sample(avctx, "14-bit block sizes");
438 }
439 s->samples_per_frame = 1 << bits;
440 } else {
441 s->samples_per_frame = 512;
442 }
443
444 /** subframe info */
445 log2_max_num_subframes = ((s->decode_flags & 0x38) >> 3);
446 s->max_num_subframes = 1 << log2_max_num_subframes;
447 if (s->max_num_subframes == 16 || s->max_num_subframes == 4)
448 s->max_subframe_len_bit = 1;
449 s->subframe_len_bits = av_log2(log2_max_num_subframes) + 1;
450
451 num_possible_block_sizes = log2_max_num_subframes + 1;
452 s->min_samples_per_subframe = s->samples_per_frame / s->max_num_subframes;
453 s->dynamic_range_compression = (s->decode_flags & 0x80);
454
455 if (s->max_num_subframes > MAX_SUBFRAMES) {
456 av_log(avctx, AV_LOG_ERROR, "invalid number of subframes %"PRId8"\n",
457 s->max_num_subframes);
458 return AVERROR_INVALIDDATA;
459 }
460
461 if (s->min_samples_per_subframe < WMAPRO_BLOCK_MIN_SIZE) {
462 av_log(avctx, AV_LOG_ERROR, "min_samples_per_subframe of %d too small\n",
463 s->min_samples_per_subframe);
464 return AVERROR_INVALIDDATA;
465 }
466
467 if (s->nb_channels <= 0) {
468 av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n",
469 s->nb_channels);
470 return AVERROR_INVALIDDATA;
471 } else if (avctx->codec_id != AV_CODEC_ID_WMAPRO && s->nb_channels > XMA_MAX_CHANNELS_STREAM) {
472 av_log(avctx, AV_LOG_ERROR, "invalid number of channels per XMA stream %d\n",
473 s->nb_channels);
474 return AVERROR_INVALIDDATA;
475 } else if (s->nb_channels > WMAPRO_MAX_CHANNELS || s->nb_channels > avctx->ch_layout.nb_channels) {
477 "More than %d channels", WMAPRO_MAX_CHANNELS);
479 }
480
481 /** init previous block len */
482 for (i = 0; i < s->nb_channels; i++)
483 s->channel[i].prev_block_len = s->samples_per_frame;
484
485 /** extract lfe channel position */
486 s->lfe_channel = -1;
487
488 if (channel_mask & 8) {
489 unsigned int mask;
490 for (mask = 1; mask < 16; mask <<= 1) {
491 if (channel_mask & mask)
492 ++s->lfe_channel;
493 }
494 }
495
496 /** calculate number of scale factor bands and their offsets
497 for every possible block size */
498 for (i = 0; i < num_possible_block_sizes; i++) {
499 int subframe_len = s->samples_per_frame >> i;
500 int x;
501 int band = 1;
502 int rate = get_rate(avctx);
503
504 s->sfb_offsets[i][0] = 0;
505
506 for (x = 0; x < MAX_BANDS-1 && s->sfb_offsets[i][band - 1] < subframe_len; x++) {
507 int offset = (subframe_len * 2 * critical_freq[x]) / rate + 2;
508 offset &= ~3;
509 if (offset > s->sfb_offsets[i][band - 1])
510 s->sfb_offsets[i][band++] = offset;
511
512 if (offset >= subframe_len)
513 break;
514 }
515 s->sfb_offsets[i][band - 1] = subframe_len;
516 s->num_sfb[i] = band - 1;
517 if (s->num_sfb[i] <= 0) {
518 av_log(avctx, AV_LOG_ERROR, "num_sfb invalid\n");
519 return AVERROR_INVALIDDATA;
520 }
521 }
522
523
524 /** Scale factors can be shared between blocks of different size
525 as every block has a different scale factor band layout.
526 The matrix sf_offsets is needed to find the correct scale factor.
527 */
528
529 for (i = 0; i < num_possible_block_sizes; i++) {
530 int b;
531 for (b = 0; b < s->num_sfb[i]; b++) {
532 int x;
533 int offset = ((s->sfb_offsets[i][b]
534 + s->sfb_offsets[i][b + 1] - 1) << i) >> 1;
535 for (x = 0; x < num_possible_block_sizes; x++) {
536 int v = 0;
537 while (s->sfb_offsets[x][v + 1] << x < offset) {
538 v++;
540 }
541 s->sf_offsets[i][x][b] = v;
542 }
543 }
544 }
545
547 if (!s->fdsp)
548 return AVERROR(ENOMEM);
549
550 /** init MDCT, FIXME: only init needed sizes */
551 for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) {
552 const float scale = 1.0 / (1 << (WMAPRO_BLOCK_MIN_BITS + i - 1))
553 / (1ll << (s->bits_per_sample - 1));
554 int err = av_tx_init(&s->tx[i], &s->tx_fn[i], AV_TX_FLOAT_MDCT, 1,
555 1 << (WMAPRO_BLOCK_MIN_BITS + i), &scale, 0);
556 if (err < 0)
557 return err;
558 }
559
560 /** init MDCT windows: simple sine window */
561 for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) {
562 const int win_idx = WMAPRO_BLOCK_MAX_BITS - i;
563 s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx];
564 }
565
566 /** calculate subwoofer cutoff values */
567 for (i = 0; i < num_possible_block_sizes; i++) {
568 int block_size = s->samples_per_frame >> i;
569 int cutoff = (440*block_size + 3LL * (s->avctx->sample_rate >> 1) - 1)
570 / s->avctx->sample_rate;
571 s->subwoofer_cutoffs[i] = av_clip(cutoff, 4, block_size);
572 }
573
574 if (avctx->debug & FF_DEBUG_BITSTREAM)
576
577 if (avctx->codec_id == AV_CODEC_ID_WMAPRO) {
578 if (channel_mask) {
580 av_channel_layout_from_mask(&avctx->ch_layout, channel_mask);
581 } else
583 }
584
585 ff_thread_once(&init_static_once, decode_init_static);
586
587 return 0;
588}
589
590/**
591 *@brief Initialize the decoder.
592 *@param avctx codec context
593 *@return 0 on success, -1 otherwise
594 */
596{
597 WMAProDecodeCtx *s = avctx->priv_data;
598
599 if (!avctx->block_align) {
600 av_log(avctx, AV_LOG_ERROR, "block_align is not set\n");
601 return AVERROR(EINVAL);
602 }
603
604 return decode_init(s, avctx, 0);
605}
606
607/**
608 *@brief Decode the subframe length.
609 *@param s context
610 *@param offset sample offset in the frame
611 *@return decoded subframe length on success, < 0 in case of an error
612 */
614{
615 int frame_len_shift = 0;
616 int subframe_len;
617
618 /** no need to read from the bitstream when only one length is possible */
619 if (offset == s->samples_per_frame - s->min_samples_per_subframe)
620 return s->min_samples_per_subframe;
621
622 if (get_bits_left(&s->gb) < 1)
623 return AVERROR_INVALIDDATA;
624
625 /** 1 bit indicates if the subframe is of maximum length */
626 if (s->max_subframe_len_bit) {
627 if (get_bits1(&s->gb))
628 frame_len_shift = 1 + get_bits(&s->gb, s->subframe_len_bits-1);
629 } else
630 frame_len_shift = get_bits(&s->gb, s->subframe_len_bits);
631
632 subframe_len = s->samples_per_frame >> frame_len_shift;
633
634 /** sanity check the length */
635 if (subframe_len < s->min_samples_per_subframe ||
636 subframe_len > s->samples_per_frame) {
637 av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n",
638 subframe_len);
639 return AVERROR_INVALIDDATA;
640 }
641 return subframe_len;
642}
643
644/**
645 *@brief Decode how the data in the frame is split into subframes.
646 * Every WMA frame contains the encoded data for a fixed number of
647 * samples per channel. The data for every channel might be split
648 * into several subframes. This function will reconstruct the list of
649 * subframes for every channel.
650 *
651 * If the subframes are not evenly split, the algorithm estimates the
652 * channels with the lowest number of total samples.
653 * Afterwards, for each of these channels a bit is read from the
654 * bitstream that indicates if the channel contains a subframe with the
655 * next subframe size that is going to be read from the bitstream or not.
656 * If a channel contains such a subframe, the subframe size gets added to
657 * the channel's subframe list.
658 * The algorithm repeats these steps until the frame is properly divided
659 * between the individual channels.
660 *
661 *@param s context
662 *@return 0 on success, < 0 in case of an error
663 */
665{
666 uint16_t num_samples[WMAPRO_MAX_CHANNELS] = { 0 };/**< sum of samples for all currently known subframes of a channel */
667 uint8_t contains_subframe[WMAPRO_MAX_CHANNELS]; /**< flag indicating if a channel contains the current subframe */
668 int channels_for_cur_subframe = s->nb_channels; /**< number of channels that contain the current subframe */
669 int fixed_channel_layout = 0; /**< flag indicating that all channels use the same subframe offsets and sizes */
670 int min_channel_len = 0; /**< smallest sum of samples (channels with this length will be processed first) */
671 int c;
672
673 /* Should never consume more than 3073 bits (256 iterations for the
674 * while loop when always the minimum amount of 128 samples is subtracted
675 * from missing samples in the 8 channel case).
676 * 1 + BLOCK_MAX_SIZE * MAX_CHANNELS / BLOCK_MIN_SIZE * (MAX_CHANNELS + 4)
677 */
678
679 /** reset tiling information */
680 for (c = 0; c < s->nb_channels; c++)
681 s->channel[c].num_subframes = 0;
682
683 if (s->max_num_subframes == 1 || get_bits1(&s->gb))
684 fixed_channel_layout = 1;
685
686 /** loop until the frame data is split between the subframes */
687 do {
688 int subframe_len;
689
690 /** check which channels contain the subframe */
691 for (c = 0; c < s->nb_channels; c++) {
692 if (num_samples[c] == min_channel_len) {
693 if (fixed_channel_layout || channels_for_cur_subframe == 1 ||
694 (min_channel_len == s->samples_per_frame - s->min_samples_per_subframe))
695 contains_subframe[c] = 1;
696 else
697 contains_subframe[c] = get_bits1(&s->gb);
698 } else
699 contains_subframe[c] = 0;
700 }
701
702 /** get subframe length, subframe_len == 0 is not allowed */
703 if ((subframe_len = decode_subframe_length(s, min_channel_len)) <= 0)
704 return AVERROR_INVALIDDATA;
705
706 /** add subframes to the individual channels and find new min_channel_len */
707 min_channel_len += subframe_len;
708 for (c = 0; c < s->nb_channels; c++) {
709 WMAProChannelCtx* chan = &s->channel[c];
710
711 if (contains_subframe[c]) {
712 if (chan->num_subframes >= MAX_SUBFRAMES) {
713 av_log(s->avctx, AV_LOG_ERROR,
714 "broken frame: num subframes > 31\n");
715 return AVERROR_INVALIDDATA;
716 }
717 chan->subframe_len[chan->num_subframes] = subframe_len;
718 num_samples[c] += subframe_len;
719 ++chan->num_subframes;
720 if (num_samples[c] > s->samples_per_frame) {
721 av_log(s->avctx, AV_LOG_ERROR, "broken frame: "
722 "channel len > samples_per_frame\n");
723 return AVERROR_INVALIDDATA;
724 }
725 } else if (num_samples[c] <= min_channel_len) {
726 if (num_samples[c] < min_channel_len) {
727 channels_for_cur_subframe = 0;
728 min_channel_len = num_samples[c];
729 }
730 ++channels_for_cur_subframe;
731 }
732 }
733 } while (min_channel_len < s->samples_per_frame);
734
735 for (c = 0; c < s->nb_channels; c++) {
736 int i;
737 int offset = 0;
738 for (i = 0; i < s->channel[c].num_subframes; i++) {
739 ff_dlog(s->avctx, "frame[%"PRIu32"] channel[%i] subframe[%i]"
740 " len %i\n", s->frame_num, c, i,
741 s->channel[c].subframe_len[i]);
742 s->channel[c].subframe_offset[i] = offset;
743 offset += s->channel[c].subframe_len[i];
744 }
745 }
746
747 return 0;
748}
749
750/**
751 *@brief Calculate a decorrelation matrix from the bitstream parameters.
752 *@param s codec context
753 *@param chgroup channel group for which the matrix needs to be calculated
754 */
756 WMAProChannelGrp *chgroup)
757{
758 int i;
759 int offset = 0;
760 int8_t rotation_offset[WMAPRO_MAX_CHANNELS * WMAPRO_MAX_CHANNELS];
761 memset(chgroup->decorrelation_matrix, 0, s->nb_channels *
762 s->nb_channels * sizeof(*chgroup->decorrelation_matrix));
763
764 for (i = 0; i < chgroup->num_channels * (chgroup->num_channels - 1) >> 1; i++)
765 rotation_offset[i] = get_bits(&s->gb, 6);
766
767 for (i = 0; i < chgroup->num_channels; i++)
768 chgroup->decorrelation_matrix[chgroup->num_channels * i + i] =
769 get_bits1(&s->gb) ? 1.0 : -1.0;
770
771 for (i = 1; i < chgroup->num_channels; i++) {
772 int x;
773 for (x = 0; x < i; x++) {
774 int y;
775 for (y = 0; y < i + 1; y++) {
776 float v1 = chgroup->decorrelation_matrix[x * chgroup->num_channels + y];
777 float v2 = chgroup->decorrelation_matrix[i * chgroup->num_channels + y];
778 int n = rotation_offset[offset + x];
779 float sinv;
780 float cosv;
781
782 if (n < 32) {
783 sinv = sin64[n];
784 cosv = sin64[32 - n];
785 } else {
786 sinv = sin64[64 - n];
787 cosv = -sin64[n - 32];
788 }
789
790 chgroup->decorrelation_matrix[y + x * chgroup->num_channels] =
791 (v1 * sinv) - (v2 * cosv);
792 chgroup->decorrelation_matrix[y + i * chgroup->num_channels] =
793 (v1 * cosv) + (v2 * sinv);
794 }
795 }
796 offset += i;
797 }
798}
799
800/**
801 *@brief Decode channel transformation parameters
802 *@param s codec context
803 *@return >= 0 in case of success, < 0 in case of bitstream errors
804 */
806{
807 int i;
808 /* should never consume more than 1921 bits for the 8 channel case
809 * 1 + MAX_CHANNELS * (MAX_CHANNELS + 2 + 3 * MAX_CHANNELS * MAX_CHANNELS
810 * + MAX_CHANNELS + MAX_BANDS + 1)
811 */
812
813 /** in the one channel case channel transforms are pointless */
814 s->num_chgroups = 0;
815 if (s->nb_channels > 1) {
816 int remaining_channels = s->channels_for_cur_subframe;
817
818 if (get_bits1(&s->gb)) {
820 "Channel transform bit");
822 }
823
824 for (s->num_chgroups = 0; remaining_channels &&
825 s->num_chgroups < s->channels_for_cur_subframe; s->num_chgroups++) {
826 WMAProChannelGrp* chgroup = &s->chgroup[s->num_chgroups];
827 float** channel_data = chgroup->channel_data;
828 chgroup->num_channels = 0;
829 chgroup->transform = 0;
830
831 /** decode channel mask */
832 if (remaining_channels > 2) {
833 for (i = 0; i < s->channels_for_cur_subframe; i++) {
834 int channel_idx = s->channel_indexes_for_cur_subframe[i];
835 if (!s->channel[channel_idx].grouped
836 && get_bits1(&s->gb)) {
837 ++chgroup->num_channels;
838 s->channel[channel_idx].grouped = 1;
839 *channel_data++ = s->channel[channel_idx].coeffs;
840 }
841 }
842 } else {
843 chgroup->num_channels = remaining_channels;
844 for (i = 0; i < s->channels_for_cur_subframe; i++) {
845 int channel_idx = s->channel_indexes_for_cur_subframe[i];
846 if (!s->channel[channel_idx].grouped)
847 *channel_data++ = s->channel[channel_idx].coeffs;
848 s->channel[channel_idx].grouped = 1;
849 }
850 }
851
852 /** decode transform type */
853 if (chgroup->num_channels == 2) {
854 if (get_bits1(&s->gb)) {
855 if (get_bits1(&s->gb)) {
857 "Unknown channel transform type");
859 }
860 } else {
861 chgroup->transform = 1;
862 if (s->nb_channels == 2) {
863 chgroup->decorrelation_matrix[0] = 1.0;
864 chgroup->decorrelation_matrix[1] = -1.0;
865 chgroup->decorrelation_matrix[2] = 1.0;
866 chgroup->decorrelation_matrix[3] = 1.0;
867 } else {
868 /** cos(pi/4) */
869 chgroup->decorrelation_matrix[0] = 0.70703125;
870 chgroup->decorrelation_matrix[1] = -0.70703125;
871 chgroup->decorrelation_matrix[2] = 0.70703125;
872 chgroup->decorrelation_matrix[3] = 0.70703125;
873 }
874 }
875 } else if (chgroup->num_channels > 2) {
876 if (get_bits1(&s->gb)) {
877 chgroup->transform = 1;
878 if (get_bits1(&s->gb)) {
880 } else {
881 /** FIXME: more than 6 coupled channels not supported */
882 if (chgroup->num_channels > 6) {
884 "Coupled channels > 6");
885 } else {
886 memcpy(chgroup->decorrelation_matrix,
888 chgroup->num_channels * chgroup->num_channels *
889 sizeof(*chgroup->decorrelation_matrix));
890 }
891 }
892 }
893 }
894
895 /** decode transform on / off */
896 if (chgroup->transform) {
897 if (!get_bits1(&s->gb)) {
898 int i;
899 /** transform can be enabled for individual bands */
900 for (i = 0; i < s->num_bands; i++) {
901 chgroup->transform_band[i] = get_bits1(&s->gb);
902 }
903 } else {
904 memset(chgroup->transform_band, 1, s->num_bands);
905 }
906 }
907 remaining_channels -= chgroup->num_channels;
908 }
909 }
910 return 0;
911}
912
913/**
914 *@brief Extract the coefficients from the bitstream.
915 *@param s codec context
916 *@param c current channel number
917 *@return 0 on success, < 0 in case of bitstream errors
918 */
920{
921 /* Integers 0..15 as single-precision floats. The table saves a
922 costly int to float conversion, and storing the values as
923 integers allows fast sign-flipping. */
924 static const uint32_t fval_tab[16] = {
925 0x00000000, 0x3f800000, 0x40000000, 0x40400000,
926 0x40800000, 0x40a00000, 0x40c00000, 0x40e00000,
927 0x41000000, 0x41100000, 0x41200000, 0x41300000,
928 0x41400000, 0x41500000, 0x41600000, 0x41700000,
929 };
930 int vlctable;
931 const VLCElem *vlc;
932 WMAProChannelCtx* ci = &s->channel[c];
933 int rl_mode = 0;
934 int cur_coeff = 0;
935 int num_zeros = 0;
936 const uint16_t* run;
937 const float* level;
938
939 ff_dlog(s->avctx, "decode coefficients for channel %i\n", c);
940
941 vlctable = get_bits1(&s->gb);
942 vlc = coef_vlc[vlctable];
943
944 if (vlctable) {
945 run = coef1_run;
947 } else {
948 run = coef0_run;
950 }
951
952 /** decode vector coefficients (consumes up to 167 bits per iteration for
953 4 vector coded large values) */
954 while ((s->transmit_num_vec_coeffs || !rl_mode) &&
955 (cur_coeff + 3 < ci->num_vec_coeffs)) {
956 uint32_t vals[4];
957 int i;
958 unsigned int idx;
959
960 idx = get_vlc2(&s->gb, vec4_vlc, VLCBITS, VEC4MAXDEPTH);
961
962 if ((int)idx < 0) {
963 for (i = 0; i < 4; i += 2) {
964 idx = get_vlc2(&s->gb, vec2_vlc, VLCBITS, VEC2MAXDEPTH);
965 if ((int)idx < 0) {
966 uint32_t v0, v1;
967 v0 = get_vlc2(&s->gb, vec1_vlc, VLCBITS, VEC1MAXDEPTH);
968 if (v0 == HUFF_VEC1_SIZE - 1)
969 v0 += ff_wma_get_large_val(&s->gb);
970 v1 = get_vlc2(&s->gb, vec1_vlc, VLCBITS, VEC1MAXDEPTH);
971 if (v1 == HUFF_VEC1_SIZE - 1)
972 v1 += ff_wma_get_large_val(&s->gb);
973 vals[i ] = av_float2int(v0);
974 vals[i+1] = av_float2int(v1);
975 } else {
976 vals[i] = fval_tab[idx >> 4 ];
977 vals[i+1] = fval_tab[idx & 0xF];
978 }
979 }
980 } else {
981 vals[0] = fval_tab[ idx >> 12 ];
982 vals[1] = fval_tab[(idx >> 8) & 0xF];
983 vals[2] = fval_tab[(idx >> 4) & 0xF];
984 vals[3] = fval_tab[ idx & 0xF];
985 }
986
987 /** decode sign */
988 for (i = 0; i < 4; i++) {
989 if (vals[i]) {
990 uint32_t sign = get_bits1(&s->gb) - 1;
991 AV_WN32A(&ci->coeffs[cur_coeff], vals[i] ^ sign << 31);
992 num_zeros = 0;
993 } else {
994 ci->coeffs[cur_coeff] = 0;
995 /** switch to run level mode when subframe_len / 128 zeros
996 were found in a row */
997 rl_mode |= (++num_zeros > s->subframe_len >> 8);
998 }
999 ++cur_coeff;
1000 }
1001 }
1002
1003 /** decode run level coded coefficients */
1004 if (cur_coeff < s->subframe_len) {
1005 int ret;
1006
1007 memset(&ci->coeffs[cur_coeff], 0,
1008 sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff));
1009 ret = ff_wma_run_level_decode(s->avctx, &s->gb, vlc,
1010 level, run, 1, ci->coeffs,
1011 cur_coeff, s->subframe_len,
1012 s->subframe_len, s->esc_len, 0);
1013 if (ret < 0)
1014 return ret;
1015 }
1016
1017 return 0;
1018}
1019
1020/**
1021 *@brief Extract scale factors from the bitstream.
1022 *@param s codec context
1023 *@return 0 on success, < 0 in case of bitstream errors
1024 */
1026{
1027 int i;
1028
1029 /** should never consume more than 5344 bits
1030 * MAX_CHANNELS * (1 + MAX_BANDS * 23)
1031 */
1032
1033 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1034 int c = s->channel_indexes_for_cur_subframe[i];
1035 int* sf;
1036 int* sf_end;
1037 s->channel[c].scale_factors = s->channel[c].saved_scale_factors[!s->channel[c].scale_factor_idx];
1038 sf_end = s->channel[c].scale_factors + s->num_bands;
1039
1040 /** resample scale factors for the new block size
1041 * as the scale factors might need to be resampled several times
1042 * before some new values are transmitted, a backup of the last
1043 * transmitted scale factors is kept in saved_scale_factors
1044 */
1045 if (s->channel[c].reuse_sf) {
1046 const int8_t* sf_offsets = s->sf_offsets[s->table_idx][s->channel[c].table_idx];
1047 int b;
1048 for (b = 0; b < s->num_bands; b++)
1049 s->channel[c].scale_factors[b] =
1050 s->channel[c].saved_scale_factors[s->channel[c].scale_factor_idx][*sf_offsets++];
1051 }
1052
1053 if (!s->channel[c].cur_subframe || get_bits1(&s->gb)) {
1054
1055 if (!s->channel[c].reuse_sf) {
1056 int val;
1057 /** decode DPCM coded scale factors */
1058 s->channel[c].scale_factor_step = get_bits(&s->gb, 2) + 1;
1059 val = 45 / s->channel[c].scale_factor_step;
1060 for (sf = s->channel[c].scale_factors; sf < sf_end; sf++) {
1062 *sf = val;
1063 }
1064 } else {
1065 int i;
1066 /** run level decode differences to the resampled factors */
1067 for (i = 0; i < s->num_bands; i++) {
1068 int idx;
1069 int skip;
1070 int val;
1071 int sign;
1072
1074
1075 if (!idx) {
1076 uint32_t code = get_bits(&s->gb, 14);
1077 val = code >> 6;
1078 sign = (code & 1) - 1;
1079 skip = (code & 0x3f) >> 1;
1080 } else if (idx == 1) {
1081 break;
1082 } else {
1083 skip = scale_rl_run[idx];
1084 val = scale_rl_level[idx];
1085 sign = get_bits1(&s->gb)-1;
1086 }
1087
1088 i += skip;
1089 if (i >= s->num_bands) {
1090 av_log(s->avctx, AV_LOG_ERROR,
1091 "invalid scale factor coding\n");
1092 return AVERROR_INVALIDDATA;
1093 }
1094 s->channel[c].scale_factors[i] += (val ^ sign) - sign;
1095 }
1096 }
1097 /** swap buffers */
1098 s->channel[c].scale_factor_idx = !s->channel[c].scale_factor_idx;
1099 s->channel[c].table_idx = s->table_idx;
1100 s->channel[c].reuse_sf = 1;
1101 }
1102
1103 /** calculate new scale factor maximum */
1104 s->channel[c].max_scale_factor = s->channel[c].scale_factors[0];
1105 for (sf = s->channel[c].scale_factors + 1; sf < sf_end; sf++) {
1106 s->channel[c].max_scale_factor =
1107 FFMAX(s->channel[c].max_scale_factor, *sf);
1108 }
1109
1110 }
1111 return 0;
1112}
1113
1114/**
1115 *@brief Reconstruct the individual channel data.
1116 *@param s codec context
1117 */
1119{
1120 int i;
1121
1122 for (i = 0; i < s->num_chgroups; i++) {
1123 if (s->chgroup[i].transform) {
1125 const int num_channels = s->chgroup[i].num_channels;
1126 float** ch_data = s->chgroup[i].channel_data;
1127 float** ch_end = ch_data + num_channels;
1128 const int8_t* tb = s->chgroup[i].transform_band;
1129 int16_t* sfb;
1130
1131 /** multichannel decorrelation */
1132 for (sfb = s->cur_sfb_offsets;
1133 sfb < s->cur_sfb_offsets + s->num_bands; sfb++) {
1134 int y;
1135 if (*tb++ == 1) {
1136 /** multiply values with the decorrelation_matrix */
1137 for (y = sfb[0]; y < FFMIN(sfb[1], s->subframe_len); y++) {
1138 const float* mat = s->chgroup[i].decorrelation_matrix;
1139 const float* data_end = data + num_channels;
1140 float* data_ptr = data;
1141 float** ch;
1142
1143 for (ch = ch_data; ch < ch_end; ch++)
1144 *data_ptr++ = (*ch)[y];
1145
1146 for (ch = ch_data; ch < ch_end; ch++) {
1147 float sum = 0;
1148 data_ptr = data;
1149 while (data_ptr < data_end)
1150 sum += *data_ptr++ * *mat++;
1151
1152 (*ch)[y] = sum;
1153 }
1154 }
1155 } else if (s->nb_channels == 2) {
1156 int len = FFMIN(sfb[1], s->subframe_len) - sfb[0];
1157 s->fdsp->vector_fmul_scalar(ch_data[0] + sfb[0],
1158 ch_data[0] + sfb[0],
1159 181.0 / 128, len);
1160 s->fdsp->vector_fmul_scalar(ch_data[1] + sfb[0],
1161 ch_data[1] + sfb[0],
1162 181.0 / 128, len);
1163 }
1164 }
1165 }
1166 }
1167}
1168
1169/**
1170 *@brief Apply sine window and reconstruct the output buffer.
1171 *@param s codec context
1172 */
1174{
1175 int i;
1176 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1177 int c = s->channel_indexes_for_cur_subframe[i];
1178 const float* window;
1179 int winlen = s->channel[c].prev_block_len;
1180 float* start = s->channel[c].coeffs - (winlen >> 1);
1181
1182 if (s->subframe_len < winlen) {
1183 start += (winlen - s->subframe_len) >> 1;
1184 winlen = s->subframe_len;
1185 }
1186
1187 window = s->windows[av_log2(winlen) - WMAPRO_BLOCK_MIN_BITS];
1188
1189 winlen >>= 1;
1190
1191 s->fdsp->vector_fmul_window(start, start, start + winlen,
1192 window, winlen);
1193
1194 s->channel[c].prev_block_len = s->subframe_len;
1195 }
1196}
1197
1198/**
1199 *@brief Decode a single subframe (block).
1200 *@param s codec context
1201 *@return 0 on success, < 0 when decoding failed
1202 */
1204{
1205 int offset = s->samples_per_frame;
1206 int subframe_len = s->samples_per_frame;
1207 int i;
1208 int total_samples = s->samples_per_frame * s->nb_channels;
1209 int transmit_coeffs = 0;
1210 int cur_subwoofer_cutoff;
1211
1212 s->subframe_offset = get_bits_count(&s->gb);
1213
1214 /** reset channel context and find the next block offset and size
1215 == the next block of the channel with the smallest number of
1216 decoded samples
1217 */
1218 for (i = 0; i < s->nb_channels; i++) {
1219 s->channel[i].grouped = 0;
1220 if (offset > s->channel[i].decoded_samples) {
1221 offset = s->channel[i].decoded_samples;
1222 subframe_len =
1223 s->channel[i].subframe_len[s->channel[i].cur_subframe];
1224 }
1225 }
1226
1227 ff_dlog(s->avctx,
1228 "processing subframe with offset %i len %i\n", offset, subframe_len);
1229
1230 /** get a list of all channels that contain the estimated block */
1231 s->channels_for_cur_subframe = 0;
1232 for (i = 0; i < s->nb_channels; i++) {
1233 const int cur_subframe = s->channel[i].cur_subframe;
1234 /** subtract already processed samples */
1235 total_samples -= s->channel[i].decoded_samples;
1236
1237 /** and count if there are multiple subframes that match our profile */
1238 if (offset == s->channel[i].decoded_samples &&
1239 subframe_len == s->channel[i].subframe_len[cur_subframe]) {
1240 total_samples -= s->channel[i].subframe_len[cur_subframe];
1241 s->channel[i].decoded_samples +=
1242 s->channel[i].subframe_len[cur_subframe];
1243 s->channel_indexes_for_cur_subframe[s->channels_for_cur_subframe] = i;
1244 ++s->channels_for_cur_subframe;
1245 }
1246 }
1247
1248 /** check if the frame will be complete after processing the
1249 estimated block */
1250 if (!total_samples)
1251 s->parsed_all_subframes = 1;
1252
1253
1254 ff_dlog(s->avctx, "subframe is part of %i channels\n",
1255 s->channels_for_cur_subframe);
1256
1257 /** calculate number of scale factor bands and their offsets */
1258 s->table_idx = av_log2(s->samples_per_frame/subframe_len);
1259 s->num_bands = s->num_sfb[s->table_idx];
1260 s->cur_sfb_offsets = s->sfb_offsets[s->table_idx];
1261 cur_subwoofer_cutoff = s->subwoofer_cutoffs[s->table_idx];
1262
1263 /** configure the decoder for the current subframe */
1264 offset += s->samples_per_frame >> 1;
1265
1266 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1267 int c = s->channel_indexes_for_cur_subframe[i];
1268
1269 s->channel[c].coeffs = &s->channel[c].out[offset];
1270 }
1271
1272 s->subframe_len = subframe_len;
1273 s->esc_len = av_log2(s->subframe_len - 1) + 1;
1274
1275 /** skip extended header if any */
1276 if (get_bits1(&s->gb)) {
1277 int num_fill_bits;
1278 if (!(num_fill_bits = get_bits(&s->gb, 2))) {
1279 int len = get_bits(&s->gb, 4);
1280 num_fill_bits = get_bitsz(&s->gb, len) + 1;
1281 }
1282
1283 if (num_fill_bits >= 0) {
1284 if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) {
1285 av_log(s->avctx, AV_LOG_ERROR, "invalid number of fill bits\n");
1286 return AVERROR_INVALIDDATA;
1287 }
1288
1289 skip_bits_long(&s->gb, num_fill_bits);
1290 }
1291 }
1292
1293 /** no idea for what the following bit is used */
1294 if (get_bits1(&s->gb)) {
1295 avpriv_request_sample(s->avctx, "Reserved bit");
1296 return AVERROR_PATCHWELCOME;
1297 }
1298
1299
1300 if (decode_channel_transform(s) < 0)
1301 return AVERROR_INVALIDDATA;
1302
1303
1304 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1305 int c = s->channel_indexes_for_cur_subframe[i];
1306 if ((s->channel[c].transmit_coefs = get_bits1(&s->gb)))
1307 transmit_coeffs = 1;
1308 }
1309
1310 av_assert0(s->subframe_len <= WMAPRO_BLOCK_MAX_SIZE);
1311 if (transmit_coeffs) {
1312 int step;
1313 int quant_step = 90 * s->bits_per_sample >> 4;
1314
1315 /** decode number of vector coded coefficients */
1316 if ((s->transmit_num_vec_coeffs = get_bits1(&s->gb))) {
1317 int num_bits = av_log2((s->subframe_len + 3)/4) + 1;
1318 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1319 int c = s->channel_indexes_for_cur_subframe[i];
1320 int num_vec_coeffs = get_bits(&s->gb, num_bits) << 2;
1321 if (num_vec_coeffs > s->subframe_len) {
1322 av_log(s->avctx, AV_LOG_ERROR, "num_vec_coeffs %d is too large\n", num_vec_coeffs);
1323 return AVERROR_INVALIDDATA;
1324 }
1325 av_assert0(num_vec_coeffs + offset <= FF_ARRAY_ELEMS(s->channel[c].out));
1326 s->channel[c].num_vec_coeffs = num_vec_coeffs;
1327 }
1328 } else {
1329 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1330 int c = s->channel_indexes_for_cur_subframe[i];
1331 s->channel[c].num_vec_coeffs = s->subframe_len;
1332 }
1333 }
1334 /** decode quantization step */
1335 step = get_sbits(&s->gb, 6);
1336 quant_step += step;
1337 if (step == -32 || step == 31) {
1338 const int sign = (step == 31) - 1;
1339 int quant = 0;
1340 while (get_bits_count(&s->gb) + 5 < s->num_saved_bits &&
1341 (step = get_bits(&s->gb, 5)) == 31) {
1342 quant += 31;
1343 }
1344 quant_step += ((quant + step) ^ sign) - sign;
1345 }
1346 if (quant_step < 0) {
1347 av_log(s->avctx, AV_LOG_DEBUG, "negative quant step\n");
1348 }
1349
1350 /** decode quantization step modifiers for every channel */
1351
1352 if (s->channels_for_cur_subframe == 1) {
1353 s->channel[s->channel_indexes_for_cur_subframe[0]].quant_step = quant_step;
1354 } else {
1355 int modifier_len = get_bits(&s->gb, 3);
1356 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1357 int c = s->channel_indexes_for_cur_subframe[i];
1358 s->channel[c].quant_step = quant_step;
1359 if (get_bits1(&s->gb)) {
1360 if (modifier_len) {
1361 s->channel[c].quant_step += get_bits(&s->gb, modifier_len) + 1;
1362 } else
1363 ++s->channel[c].quant_step;
1364 }
1365 }
1366 }
1367
1368 /** decode scale factors */
1369 if (decode_scale_factors(s) < 0)
1370 return AVERROR_INVALIDDATA;
1371 }
1372
1373 ff_dlog(s->avctx, "BITSTREAM: subframe header length was %i\n",
1374 get_bits_count(&s->gb) - s->subframe_offset);
1375
1376 /** parse coefficients */
1377 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1378 int c = s->channel_indexes_for_cur_subframe[i];
1379 if (s->channel[c].transmit_coefs &&
1380 get_bits_count(&s->gb) < s->num_saved_bits) {
1381 decode_coeffs(s, c);
1382 } else
1383 memset(s->channel[c].coeffs, 0,
1384 sizeof(*s->channel[c].coeffs) * subframe_len);
1385 }
1386
1387 ff_dlog(s->avctx, "BITSTREAM: subframe length was %i\n",
1388 get_bits_count(&s->gb) - s->subframe_offset);
1389
1390 if (transmit_coeffs) {
1391 AVTXContext *tx = s->tx[av_log2(subframe_len) - WMAPRO_BLOCK_MIN_BITS];
1392 av_tx_fn tx_fn = s->tx_fn[av_log2(subframe_len) - WMAPRO_BLOCK_MIN_BITS];
1393 /** reconstruct the per channel data */
1395 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1396 int c = s->channel_indexes_for_cur_subframe[i];
1397 const int* sf = s->channel[c].scale_factors;
1398 int b;
1399
1400 if (c == s->lfe_channel)
1401 memset(&s->tmp[cur_subwoofer_cutoff], 0, sizeof(*s->tmp) *
1402 (subframe_len - cur_subwoofer_cutoff));
1403
1404 /** inverse quantization and rescaling */
1405 for (b = 0; b < s->num_bands; b++) {
1406 const int end = FFMIN(s->cur_sfb_offsets[b+1], s->subframe_len);
1407 const int exp = s->channel[c].quant_step -
1408 (s->channel[c].max_scale_factor - *sf++) *
1409 s->channel[c].scale_factor_step;
1410 const float quant = ff_exp10(exp / 20.0);
1411 int start = s->cur_sfb_offsets[b];
1412 s->fdsp->vector_fmul_scalar(s->tmp + start,
1413 s->channel[c].coeffs + start,
1414 quant, end - start);
1415 }
1416
1417 /** apply imdct (imdct_half == DCTIV with reverse) */
1418 tx_fn(tx, s->channel[c].coeffs, s->tmp, sizeof(float));
1419 }
1420 }
1421
1422 /** window and overlapp-add */
1424
1425 /** handled one subframe */
1426 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1427 int c = s->channel_indexes_for_cur_subframe[i];
1428 if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) {
1429 av_log(s->avctx, AV_LOG_ERROR, "broken subframe\n");
1430 return AVERROR_INVALIDDATA;
1431 }
1432 ++s->channel[c].cur_subframe;
1433 }
1434
1435 return 0;
1436}
1437
1438/**
1439 *@brief Decode one WMA frame.
1440 *@param s codec context
1441 *@return 0 if the trailer bit indicates that this is the last frame,
1442 * 1 if there are additional frames
1443 */
1444static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
1445{
1446 GetBitContext* gb = &s->gb;
1447 int more_frames = 0;
1448 int len = 0;
1449 int i;
1450
1451 /** get frame length */
1452 if (s->len_prefix)
1453 len = get_bits(gb, s->log2_frame_size);
1454
1455 ff_dlog(s->avctx, "decoding frame with length %x\n", len);
1456
1457 /** decode tile information */
1458 if (decode_tilehdr(s)) {
1459 s->packet_loss = 1;
1460 return 0;
1461 }
1462
1463 /** read postproc transform */
1464 if (s->nb_channels > 1 && get_bits1(gb)) {
1465 if (get_bits1(gb)) {
1466 for (i = 0; i < s->nb_channels * s->nb_channels; i++)
1467 skip_bits(gb, 4);
1468 }
1469 }
1470
1471 /** read drc info */
1472 if (s->dynamic_range_compression) {
1473 s->drc_gain = get_bits(gb, 8);
1474 ff_dlog(s->avctx, "drc_gain %i\n", s->drc_gain);
1475 }
1476
1477 if (get_bits1(gb)) {
1478 if (get_bits1(gb))
1479 s->trim_start = get_bits(gb, av_log2(s->samples_per_frame * 2));
1480
1481 if (get_bits1(gb))
1482 s->trim_end = get_bits(gb, av_log2(s->samples_per_frame * 2));
1483 } else {
1484 s->trim_start = s->trim_end = 0;
1485 }
1486
1487 ff_dlog(s->avctx, "BITSTREAM: frame header length was %i\n",
1488 get_bits_count(gb) - s->frame_offset);
1489
1490 /** reset subframe states */
1491 s->parsed_all_subframes = 0;
1492 for (i = 0; i < s->nb_channels; i++) {
1493 s->channel[i].decoded_samples = 0;
1494 s->channel[i].cur_subframe = 0;
1495 s->channel[i].reuse_sf = 0;
1496 }
1497
1498 /** decode all subframes */
1499 while (!s->parsed_all_subframes) {
1500 if (decode_subframe(s) < 0) {
1501 s->packet_loss = 1;
1502 return 0;
1503 }
1504 }
1505
1506 /** copy samples to the output buffer */
1507 for (i = 0; i < s->nb_channels; i++)
1508 memcpy(frame->extended_data[i], s->channel[i].out,
1509 s->samples_per_frame * sizeof(*s->channel[i].out));
1510
1511 for (i = 0; i < s->nb_channels; i++) {
1512 /** reuse second half of the IMDCT output for the next frame */
1513 memcpy(&s->channel[i].out[0],
1514 &s->channel[i].out[s->samples_per_frame],
1515 s->samples_per_frame * sizeof(*s->channel[i].out) >> 1);
1516 }
1517
1518 if (s->skip_frame) {
1519 s->skip_frame = 0;
1520 *got_frame_ptr = 0;
1522 } else {
1523 *got_frame_ptr = 1;
1524 }
1525
1526 if (s->len_prefix) {
1527 if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
1528 /** FIXME: not sure if this is always an error */
1529 av_log(s->avctx, AV_LOG_ERROR,
1530 "frame[%"PRIu32"] would have to skip %i bits\n",
1531 s->frame_num,
1532 len - (get_bits_count(gb) - s->frame_offset) - 1);
1533 s->packet_loss = 1;
1534 return 0;
1535 }
1536
1537 /** skip the rest of the frame data */
1538 skip_bits_long(gb, len - (get_bits_count(gb) - s->frame_offset) - 1);
1539 } else {
1540 while (get_bits_count(gb) < s->num_saved_bits && get_bits1(gb) == 0) {
1541 }
1542 }
1543
1544 /** decode trailer bit */
1545 more_frames = get_bits1(gb);
1546
1547 ++s->frame_num;
1548 return more_frames;
1549}
1550
1551/**
1552 *@brief Calculate remaining input buffer length.
1553 *@param s codec context
1554 *@param gb bitstream reader context
1555 *@return remaining size in bits
1556 */
1558{
1559 return s->buf_bit_size - get_bits_count(gb);
1560}
1561
1562/**
1563 *@brief Fill the bit reservoir with a (partial) frame.
1564 *@param s codec context
1565 *@param gb bitstream reader context
1566 *@param len length of the partial frame
1567 *@param append decides whether to reset the buffer or not
1568 */
1570 int append)
1571{
1572 int buflen;
1573
1574 /** when the frame data does not need to be concatenated, the input buffer
1575 is reset and additional bits from the previous frame are copied
1576 and skipped later so that a fast byte copy is possible */
1577
1578 if (!append) {
1579 s->frame_offset = get_bits_count(gb) & 7;
1580 s->num_saved_bits = s->frame_offset;
1581 init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
1582 buflen = (s->num_saved_bits + len + 7) >> 3;
1583 } else
1584 buflen = (put_bits_count(&s->pb) + len + 7) >> 3;
1585
1587 avpriv_request_sample(s->avctx, "Too small input buffer");
1588 s->packet_loss = 1;
1589 return;
1590 }
1591
1592 av_assert0(len <= put_bits_left(&s->pb));
1593
1594 s->num_saved_bits += len;
1595 if (!append) {
1596 ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3),
1597 s->num_saved_bits);
1598 } else {
1599 int align = 8 - (get_bits_count(gb) & 7);
1600 align = FFMIN(align, len);
1601 put_bits(&s->pb, align, get_bits(gb, align));
1602 len -= align;
1603 ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), len);
1604 }
1605 skip_bits_long(gb, len);
1606
1607 {
1608 PutBitContext tmp = s->pb;
1610 }
1611
1612 init_get_bits(&s->gb, s->frame_data, s->num_saved_bits);
1613 skip_bits(&s->gb, s->frame_offset);
1614}
1615
1617 AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
1618{
1619 GetBitContext* gb = &s->pgb;
1620 const uint8_t* buf = avpkt->data;
1621 int buf_size = avpkt->size;
1622 int num_bits_prev_frame;
1623 int packet_sequence_number;
1624 int ret;
1625
1626 *got_frame_ptr = 0;
1627
1628 if (!buf_size) {
1629 int i;
1630
1631 /** Must output remaining samples after stream end. WMAPRO 5.1 created
1632 * by XWMA encoder don't though (maybe only 1/2ch streams need it). */
1633 s->packet_done = 0;
1634 if (s->eof_done)
1635 return 0;
1636
1637 /** clean output buffer and copy last IMDCT samples */
1638 for (i = 0; i < s->nb_channels; i++) {
1639 memset(frame->extended_data[i], 0,
1640 s->samples_per_frame * sizeof(*s->channel[i].out));
1641
1642 memcpy(frame->extended_data[i], s->channel[i].out,
1643 s->samples_per_frame * sizeof(*s->channel[i].out) >> 1);
1644 }
1645
1646 s->eof_done = 1;
1647 s->packet_done = 1;
1648 *got_frame_ptr = 1;
1649 return 0;
1650 }
1651 else if (s->packet_done || s->packet_loss) {
1652 s->packet_done = 0;
1653
1654 /** sanity check for the buffer length */
1655 if (avctx->codec_id == AV_CODEC_ID_WMAPRO && buf_size < avctx->block_align) {
1656 av_log(avctx, AV_LOG_ERROR, "Input packet too small (%d < %d)\n",
1657 buf_size, avctx->block_align);
1658 s->packet_loss = 1;
1659 return AVERROR_INVALIDDATA;
1660 }
1661
1662 if (avctx->codec_id == AV_CODEC_ID_WMAPRO) {
1663 s->next_packet_start = buf_size - avctx->block_align;
1664 buf_size = avctx->block_align;
1665 } else {
1666 s->next_packet_start = buf_size - FFMIN(buf_size, avctx->block_align);
1667 buf_size = FFMIN(buf_size, avctx->block_align);
1668 }
1669 s->buf_bit_size = buf_size << 3;
1670
1671 /** parse packet header */
1672 ret = init_get_bits8(gb, buf, buf_size);
1673 if (ret < 0)
1674 return ret;
1675 if (avctx->codec_id != AV_CODEC_ID_XMA2) {
1676 packet_sequence_number = get_bits(gb, 4);
1677 skip_bits(gb, 2);
1678 } else {
1679 int num_frames = get_bits(gb, 6);
1680 ff_dlog(avctx, "packet[%"PRId64"]: number of frames %d\n", avctx->frame_num, num_frames);
1681 packet_sequence_number = 0;
1682 }
1683
1684 /** get number of bits that need to be added to the previous frame */
1685 num_bits_prev_frame = get_bits(gb, s->log2_frame_size);
1686 if (avctx->codec_id != AV_CODEC_ID_WMAPRO) {
1687 skip_bits(gb, 3);
1688 s->skip_packets = get_bits(gb, 8);
1689 ff_dlog(avctx, "packet[%"PRId64"]: skip packets %d\n", avctx->frame_num, s->skip_packets);
1690 }
1691
1692 ff_dlog(avctx, "packet[%"PRId64"]: nbpf %x\n", avctx->frame_num,
1693 num_bits_prev_frame);
1694
1695 /** check for packet loss */
1696 if (avctx->codec_id == AV_CODEC_ID_WMAPRO && !s->packet_loss &&
1697 ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1698 s->packet_loss = 1;
1699 av_log(avctx, AV_LOG_ERROR,
1700 "Packet loss detected! seq %"PRIx8" vs %x\n",
1701 s->packet_sequence_number, packet_sequence_number);
1702 }
1703 s->packet_sequence_number = packet_sequence_number;
1704
1705 if (num_bits_prev_frame > 0) {
1706 int remaining_packet_bits = s->buf_bit_size - get_bits_count(gb);
1707 if (num_bits_prev_frame >= remaining_packet_bits) {
1708 num_bits_prev_frame = remaining_packet_bits;
1709 s->packet_done = 1;
1710 }
1711
1712 /** append the previous frame data to the remaining data from the
1713 previous packet to create a full frame */
1714 save_bits(s, gb, num_bits_prev_frame, 1);
1715 ff_dlog(avctx, "accumulated %x bits of frame data\n",
1716 s->num_saved_bits - s->frame_offset);
1717
1718 /** decode the cross packet frame if it is valid */
1719 if (!s->packet_loss)
1720 decode_frame(s, frame, got_frame_ptr);
1721 } else if (s->num_saved_bits - s->frame_offset) {
1722 ff_dlog(avctx, "ignoring %x previously saved bits\n",
1723 s->num_saved_bits - s->frame_offset);
1724 }
1725
1726 if (s->packet_loss) {
1727 /** reset number of saved bits so that the decoder
1728 does not start to decode incomplete frames in the
1729 s->len_prefix == 0 case */
1730 s->num_saved_bits = 0;
1731 s->packet_loss = 0;
1732 }
1733 } else {
1734 int frame_size;
1735
1736 if (avpkt->size < s->next_packet_start) {
1737 s->packet_loss = 1;
1738 return AVERROR_INVALIDDATA;
1739 }
1740
1741 s->buf_bit_size = (avpkt->size - s->next_packet_start) << 3;
1742 ret = init_get_bits8(gb, avpkt->data, avpkt->size - s->next_packet_start);
1743 if (ret < 0)
1744 return ret;
1745 skip_bits(gb, s->packet_offset);
1746 if (s->len_prefix && remaining_bits(s, gb) > s->log2_frame_size &&
1747 (frame_size = show_bits(gb, s->log2_frame_size)) &&
1748 frame_size <= remaining_bits(s, gb)) {
1749 save_bits(s, gb, frame_size, 0);
1750 if (!s->packet_loss)
1751 s->packet_done = !decode_frame(s, frame, got_frame_ptr);
1752 } else if (!s->len_prefix
1753 && s->num_saved_bits > get_bits_count(&s->gb)) {
1754 /** when the frames do not have a length prefix, we don't know
1755 the compressed length of the individual frames
1756 however, we know what part of a new packet belongs to the
1757 previous frame
1758 therefore we save the incoming packet first, then we append
1759 the "previous frame" data from the next packet so that
1760 we get a buffer that only contains full frames */
1761 s->packet_done = !decode_frame(s, frame, got_frame_ptr);
1762 } else {
1763 s->packet_done = 1;
1764 }
1765 }
1766
1767 if (remaining_bits(s, gb) < 0) {
1768 av_log(avctx, AV_LOG_ERROR, "Overread %d\n", -remaining_bits(s, gb));
1769 s->packet_loss = 1;
1770 }
1771
1772 if (s->packet_done && !s->packet_loss &&
1773 remaining_bits(s, gb) > 0) {
1774 /** save the rest of the data so that it can be decoded
1775 with the next packet */
1776 save_bits(s, gb, remaining_bits(s, gb), 0);
1777 }
1778
1779 s->packet_offset = get_bits_count(gb) & 7;
1780 if (s->packet_loss)
1781 return AVERROR_INVALIDDATA;
1782
1783 if (s->trim_start && avctx->codec_id == AV_CODEC_ID_WMAPRO) {
1784 if (s->trim_start < frame->nb_samples) {
1785 for (int ch = 0; ch < frame->ch_layout.nb_channels; ch++)
1786 frame->extended_data[ch] += s->trim_start * 4;
1787
1788 frame->nb_samples -= s->trim_start;
1789 } else {
1790 *got_frame_ptr = 0;
1791 }
1792
1793 s->trim_start = 0;
1794 }
1795
1796 if (s->trim_end && avctx->codec_id == AV_CODEC_ID_WMAPRO) {
1797 if (s->trim_end < frame->nb_samples) {
1798 frame->nb_samples -= s->trim_end;
1799 } else {
1800 *got_frame_ptr = 0;
1801 }
1802
1803 s->trim_end = 0;
1804 }
1805
1806 return get_bits_count(gb) >> 3;
1807}
1808
1809/**
1810 *@brief Decode a single WMA packet.
1811 *@param avctx codec context
1812 *@param data the output buffer
1813 *@param avpkt input packet
1814 *@return number of bytes that were read from the input buffer
1815 */
1817 int *got_frame_ptr, AVPacket *avpkt)
1818{
1819 WMAProDecodeCtx *s = avctx->priv_data;
1820 int ret;
1821
1822 /* get output buffer */
1823 frame->nb_samples = s->samples_per_frame;
1824 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
1825 s->packet_loss = 1;
1826 return 0;
1827 }
1828
1829 return decode_packet(avctx, s, frame, got_frame_ptr, avpkt);
1830}
1831
1833 int *got_frame_ptr, AVPacket *avpkt)
1834{
1835 XMADecodeCtx *s = avctx->priv_data;
1836 int got_stream_frame_ptr = 0;
1837 int i, ret = 0, eof = 0;
1838
1839 if (!s->frames[s->current_stream]->data[0]) {
1840 avctx->internal->skip_samples = 64;
1841 s->frames[s->current_stream]->nb_samples = 512;
1842 if ((ret = ff_get_buffer(avctx, s->frames[s->current_stream], 0)) < 0)
1843 return ret;
1844 } else if (s->frames[s->current_stream]->nb_samples != 512) {
1845 avctx->internal->skip_samples = 64;
1846 av_frame_unref(s->frames[s->current_stream]);
1847 s->frames[s->current_stream]->nb_samples = 512;
1848 if ((ret = ff_get_buffer(avctx, s->frames[s->current_stream], 0)) < 0)
1849 return ret;
1850 }
1851 /* decode current stream packet */
1852 if (!s->xma[s->current_stream].eof_done) {
1853 ret = decode_packet(avctx, &s->xma[s->current_stream], s->frames[s->current_stream],
1854 &got_stream_frame_ptr, avpkt);
1855 }
1856
1857 if (!avpkt->size) {
1858 eof = 1;
1859
1860 for (i = 0; i < s->num_streams; i++) {
1861 if (!s->xma[i].eof_done && s->frames[i]->data[0]) {
1862 ret = decode_packet(avctx, &s->xma[i], s->frames[i],
1863 &got_stream_frame_ptr, avpkt);
1864 }
1865
1866 eof &= s->xma[i].eof_done;
1867 }
1868 }
1869
1870 if (s->xma[0].trim_start)
1871 s->trim_start = s->xma[0].trim_start;
1872 if (s->xma[0].trim_end)
1873 s->trim_end = s->xma[0].trim_end;
1874
1875 /* copy stream samples (1/2ch) to sample buffer (Nch) */
1876 if (got_stream_frame_ptr) {
1877 const int nb_samples = s->frames[s->current_stream]->nb_samples;
1878 void *left[1] = { s->frames[s->current_stream]->extended_data[0] };
1879 void *right[1] = { s->frames[s->current_stream]->extended_data[1] };
1880
1881 av_audio_fifo_write(s->samples[0][s->current_stream], left, nb_samples);
1882 if (s->xma[s->current_stream].nb_channels > 1)
1883 av_audio_fifo_write(s->samples[1][s->current_stream], right, nb_samples);
1884 } else if (ret < 0) {
1885 s->current_stream = 0;
1886 return ret;
1887 }
1888
1889 /* find next XMA packet's owner stream, and update.
1890 * XMA streams find their packets following packet_skips
1891 * (at start there is one packet per stream, then interleave non-linearly). */
1892 if (s->xma[s->current_stream].packet_done ||
1893 s->xma[s->current_stream].packet_loss) {
1894 int nb_samples = INT_MAX;
1895
1896 /* select stream with 0 skip_packets (= uses next packet) */
1897 if (s->xma[s->current_stream].skip_packets != 0) {
1898 int min[2];
1899
1900 min[0] = s->xma[0].skip_packets;
1901 min[1] = i = 0;
1902
1903 for (i = 1; i < s->num_streams; i++) {
1904 if (s->xma[i].skip_packets < min[0]) {
1905 min[0] = s->xma[i].skip_packets;
1906 min[1] = i;
1907 }
1908 }
1909
1910 s->current_stream = min[1];
1911 }
1912
1913 /* all other streams skip next packet */
1914 for (i = 0; i < s->num_streams; i++) {
1915 s->xma[i].skip_packets = FFMAX(0, s->xma[i].skip_packets - 1);
1916 nb_samples = FFMIN(nb_samples, av_audio_fifo_size(s->samples[0][i]));
1917 }
1918
1919 if (!eof && avpkt->size)
1920 nb_samples -= FFMIN(nb_samples, 4096);
1921
1922 /* copy samples from buffer to output if possible */
1923 if ((nb_samples > 0 || eof || !avpkt->size) && !s->flushed) {
1924 int bret;
1925
1926 if (eof) {
1927 nb_samples -= av_clip(s->trim_end + s->trim_start - 128 - 64, 0, nb_samples);
1928 s->flushed = 1;
1929 }
1930
1931 frame->nb_samples = nb_samples;
1932 if ((bret = ff_get_buffer(avctx, frame, 0)) < 0)
1933 return bret;
1934
1935 for (i = 0; i < s->num_streams; i++) {
1936 const int start_ch = s->start_channel[i];
1937 void *left[1] = { frame->extended_data[start_ch + 0] };
1938
1939 av_audio_fifo_read(s->samples[0][i], left, nb_samples);
1940 if (s->xma[i].nb_channels > 1) {
1941 void *right[1] = { frame->extended_data[start_ch + 1] };
1942 av_audio_fifo_read(s->samples[1][i], right, nb_samples);
1943 }
1944 }
1945
1946 *got_frame_ptr = nb_samples > 0;
1947 }
1948 }
1949
1950 return ret;
1951}
1952
1954{
1955 XMADecodeCtx *s = avctx->priv_data;
1956 int i, ret, start_channels = 0;
1957
1958 avctx->block_align = 2048;
1959
1960 if (avctx->ch_layout.nb_channels <= 0 || avctx->extradata_size == 0)
1961 return AVERROR_INVALIDDATA;
1962
1963 /* get stream config */
1964 if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size == 34) { /* XMA2WAVEFORMATEX */
1965 unsigned int channel_mask = AV_RL32(avctx->extradata + 2);
1966 if (channel_mask) {
1968 av_channel_layout_from_mask(&avctx->ch_layout, channel_mask);
1969 } else
1971 s->num_streams = AV_RL16(avctx->extradata);
1972 } else if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size >= 2) { /* XMA2WAVEFORMAT */
1973 s->num_streams = avctx->extradata[1];
1974 if (avctx->extradata_size != (32 + ((avctx->extradata[0]==3)?0:8) + 4*s->num_streams)) {
1975 av_log(avctx, AV_LOG_ERROR, "Incorrect XMA2 extradata size\n");
1976 s->num_streams = 0;
1977 return AVERROR(EINVAL);
1978 }
1979 } else if (avctx->codec_id == AV_CODEC_ID_XMA1 && avctx->extradata_size >= 4) { /* XMAWAVEFORMAT */
1980 s->num_streams = avctx->extradata[4];
1981 if (avctx->extradata_size != (8 + 20*s->num_streams)) {
1982 av_log(avctx, AV_LOG_ERROR, "Incorrect XMA1 extradata size\n");
1983 s->num_streams = 0;
1984 return AVERROR(EINVAL);
1985 }
1986 } else {
1987 av_log(avctx, AV_LOG_ERROR, "Incorrect XMA config\n");
1988 return AVERROR(EINVAL);
1989 }
1990
1991 /* encoder supports up to 64 streams / 64*2 channels (would have to alloc arrays) */
1992 if (avctx->ch_layout.nb_channels > XMA_MAX_CHANNELS || s->num_streams > XMA_MAX_STREAMS ||
1993 s->num_streams <= 0
1994 ) {
1995 avpriv_request_sample(avctx, "More than %d channels in %d streams", XMA_MAX_CHANNELS, s->num_streams);
1996 s->num_streams = 0;
1997 return AVERROR_PATCHWELCOME;
1998 }
1999
2000 /* init all streams (several streams of 1/2ch make Nch files) */
2001 for (i = 0; i < s->num_streams; i++) {
2002 ret = decode_init(&s->xma[i], avctx, i);
2003 if (ret < 0)
2004 return ret;
2005 s->frames[i] = av_frame_alloc();
2006 if (!s->frames[i])
2007 return AVERROR(ENOMEM);
2008
2009 s->start_channel[i] = start_channels;
2010 start_channels += s->xma[i].nb_channels;
2011 }
2012 if (start_channels != avctx->ch_layout.nb_channels)
2013 return AVERROR_INVALIDDATA;
2014
2015 for (int i = 0; i < XMA_MAX_STREAMS; i++) {
2016 s->samples[0][i] = av_audio_fifo_alloc(avctx->sample_fmt, 1, 64 * 512);
2017 s->samples[1][i] = av_audio_fifo_alloc(avctx->sample_fmt, 1, 64 * 512);
2018 if (!s->samples[0][i] || !s->samples[1][i])
2019 return AVERROR(ENOMEM);
2020 }
2021
2022 return 0;
2023}
2024
2026{
2027 XMADecodeCtx *s = avctx->priv_data;
2028 int i;
2029
2030 for (i = 0; i < s->num_streams; i++) {
2031 decode_end(&s->xma[i]);
2032 av_frame_free(&s->frames[i]);
2033 }
2034 s->num_streams = 0;
2035
2036 for (i = 0; i < XMA_MAX_STREAMS; i++) {
2037 av_audio_fifo_free(s->samples[0][i]);
2038 av_audio_fifo_free(s->samples[1][i]);
2039 }
2040
2041 return 0;
2042}
2043
2045{
2046 int i;
2047 /** reset output buffer as a part of it is used during the windowing of a
2048 new frame */
2049 for (i = 0; i < s->nb_channels; i++)
2050 memset(s->channel[i].out, 0, s->samples_per_frame *
2051 sizeof(*s->channel[i].out));
2052 s->packet_loss = 1;
2053 s->skip_packets = 0;
2054 s->eof_done = 0;
2055 s->skip_frame = 1;
2056}
2057
2058/**
2059 *@brief Clear decoder buffers (for seeking).
2060 *@param avctx codec context
2061 */
2063{
2064 WMAProDecodeCtx *s = avctx->priv_data;
2065
2066 flush(s);
2067}
2068
2070{
2071 XMADecodeCtx *s = avctx->priv_data;
2072 int i;
2073
2074 for (i = 0; i < XMA_MAX_STREAMS; i++) {
2075 av_audio_fifo_reset(s->samples[0][i]);
2076 av_audio_fifo_reset(s->samples[1][i]);
2077 }
2078
2079 for (i = 0; i < s->num_streams; i++)
2080 flush(&s->xma[i]);
2081
2082 s->current_stream = 0;
2083 s->flushed = 0;
2084}
2085
2086/**
2087 *@brief wmapro decoder
2088 */
2090 .p.name = "wmapro",
2091 CODEC_LONG_NAME("Windows Media Audio 9 Professional"),
2092 .p.type = AVMEDIA_TYPE_AUDIO,
2093 .p.id = AV_CODEC_ID_WMAPRO,
2094 .priv_data_size = sizeof(WMAProDecodeCtx),
2098 .p.capabilities = AV_CODEC_CAP_DR1,
2099 .flush = wmapro_flush,
2100 .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2101};
2102
2104 .p.name = "xma1",
2105 CODEC_LONG_NAME("Xbox Media Audio 1"),
2106 .p.type = AVMEDIA_TYPE_AUDIO,
2107 .p.id = AV_CODEC_ID_XMA1,
2108 .priv_data_size = sizeof(XMADecodeCtx),
2112 .flush = xma_flush,
2113 .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
2114 .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2115};
2116
2118 .p.name = "xma2",
2119 CODEC_LONG_NAME("Xbox Media Audio 2"),
2120 .p.type = AVMEDIA_TYPE_AUDIO,
2121 .p.id = AV_CODEC_ID_XMA2,
2122 .priv_data_size = sizeof(XMADecodeCtx),
2126 .flush = xma_flush,
2127 .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
2128 .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2129};
static double val(void *priv, double ch)
Definition aeval.c:77
const FFCodec ff_wmapro_decoder
wmapro decoder
Definition wmaprodec.c:2089
const FFCodec ff_xma1_decoder
Definition wmaprodec.c:2103
const FFCodec ff_xma2_decoder
Definition wmaprodec.c:2117
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
static const VLCElem * sf_vlc[2][8]
Definition atrac9dec.c:109
Audio FIFO Buffer.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
#define FF_DEBUG_BITSTREAM
Definition avcodec.h:1395
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
Definition bitstream.c:49
static const uint8_t *BS_FUNC align(BSCTX *bc)
Skip bits to a byte boundary.
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define s(width, name)
Definition cbs_vp9.c:198
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define av_popcount
Definition common.h:154
#define av_clip
Definition common.h:100
#define min(a, b)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition decode.c:1777
static AVFrame * frame
void(* flush)(AVBSFContext *ctx)
Definition dts2pts.c:610
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
int8_t exp
Definition eval.c:76
static struct @346255127015250356166251341105367306144006377143 state
static const uint8_t bits[8]
Definition fastaudio.c:100
internal math functions header
static av_always_inline double ff_exp10(double x)
Compute 10^x for floating point values.
Definition ffmath.h:42
static SDL_Window * window
Definition ffplay.c:365
static const uint8_t frame_size[4]
Definition g723_1.h:222
bitstream reader API header.
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition get_bits.h:645
static int get_sbits(GetBitContext *s, int n)
Definition get_bits.h:322
static int get_bits_left(GetBitContext *gb)
Definition get_bits.h:688
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition get_bits.h:280
static unsigned int get_bits1(GetBitContext *s)
Definition get_bits.h:391
static void skip_bits(GetBitContext *s, int n)
Definition get_bits.h:383
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition get_bits.h:544
static int get_bits_count(const GetBitContext *s)
Definition get_bits.h:254
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition get_bits.h:337
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition get_bits.h:373
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
Definition get_bits.h:353
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition get_bits.h:517
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition avcodec.h:322
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition codec.h:79
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
@ AV_CODEC_ID_XMA1
Definition codec_id.h:532
@ AV_CODEC_ID_XMA2
Definition codec_id.h:533
@ AV_CODEC_ID_WMAPRO
Definition codec_id.h:490
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
Definition defs.h:40
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
AVAudioFifo * av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, int nb_samples)
Allocate an AVAudioFifo.
Definition audio_fifo.c:62
void av_audio_fifo_reset(AVAudioFifo *af)
Reset the AVAudioFifo buffer.
Definition audio_fifo.c:212
int av_audio_fifo_write(AVAudioFifo *af, void *const *data, int nb_samples)
Write data to an AVAudioFifo.
Definition audio_fifo.c:119
int av_audio_fifo_read(AVAudioFifo *af, void *const *data, int nb_samples)
Read data from an AVAudioFifo.
Definition audio_fifo.c:175
void av_audio_fifo_free(AVAudioFifo *af)
Free an AVAudioFifo.
Definition audio_fifo.c:48
int av_audio_fifo_size(AVAudioFifo *af)
Get the current number of samples in the AVAudioFifo available for reading.
Definition audio_fifo.c:222
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition error.h:64
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR(e)
Definition error.h:45
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition frame.c:496
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition frame.c:52
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition samplefmt.h:66
static const uint8_t scale_table[]
Definition hca_data.h:53
#define b
Definition input.c:43
static av_cold void decode_init_static(void)
static av_always_inline uint32_t av_float2int(float f)
Reinterpret a float as a 32-bit integer.
Definition intfloat.h:50
#define av_log2
Definition intmath.h:84
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition intra.c:278
#define AV_RL32(p)
#define AV_WN32A(p, v)
#define AV_RL16(p)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition j2kenc.c:154
unsigned offset
Definition libaomenc.c:763
common internal api header.
#define MAX_SUBFRAMES
max number of subframes per channel
Definition takdec.c:44
Macro definitions for various function/variable attributes.
#define av_cold
Definition attributes.h:117
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition float_dsp.c:135
#define AVOnce
Definition thread.h:202
static int ff_thread_once(char *control, void(*routine)(void))
Definition thread.h:205
#define AV_ONCE_INIT
Definition thread.h:203
static const uint16_t mask[17]
Definition lzw.c:38
#define FFMIN(a, b)
Definition macros.h:49
#define FFMAX(a, b)
Definition macros.h:47
#define M_PI
Definition mathematics.h:67
Memory handling functions.
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
static uint8_t * append(uint8_t *buf, const uint8_t *src, int size)
Definition mjpeg2jpeg.c:59
const char data[16]
Definition mxf.c:149
bitstream writer API
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition put_bits.h:62
static int put_bits_count(PutBitContext *s)
Definition put_bits.h:90
static int put_bits_left(PutBitContext *s)
Definition put_bits.h:135
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition put_bits.h:153
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
SINETABLE_CONST float *const ff_sine_windows[]
#define FF_ARRAY_ELEMS(a)
const uint8_t * code
Definition spdifenc.c:433
Context for an Audio FIFO Buffer.
Definition audio_fifo.c:37
enum AVChannelOrder order
Channel order used in this layout.
int nb_channels
Number of channels in this layout.
main external API structure.
Definition avcodec.h:443
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
enum AVSampleFormat sample_fmt
audio sample format
Definition avcodec.h:1047
int debug
debug
Definition avcodec.h:1392
int64_t frame_num
Frame counter, set by libavcodec.
Definition avcodec.h:1883
int sample_rate
samples per second
Definition avcodec.h:1040
int flags
AV_CODEC_FLAG_*.
Definition avcodec.h:500
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
enum AVCodecID codec_id
Definition avcodec.h:453
int extradata_size
Definition avcodec.h:527
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs.
Definition avcodec.h:1075
struct AVCodecInternal * internal
Private context used for internal data.
Definition avcodec.h:478
void * priv_data
Definition avcodec.h:470
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition internal.h:125
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
This structure stores compressed data.
Definition packet.h:580
int size
Definition packet.h:604
uint8_t * data
Definition packet.h:603
const uint8_t * buffer
Definition get_bits.h:110
Definition vlc.h:32
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
Definition vlc.h:220
frame specific decoder context for a single channel
Definition wmaprodec.c:148
int16_t prev_block_len
length of the previous block
Definition wmaprodec.c:149
uint8_t num_subframes
Definition wmaprodec.c:151
int quant_step
quantization step for the current subframe
Definition wmaprodec.c:157
uint16_t num_vec_coeffs
number of vector coded coefficients
Definition wmaprodec.c:166
uint8_t table_idx
index in sf_offsets for the scale factor reference block
Definition wmaprodec.c:164
uint8_t transmit_coefs
Definition wmaprodec.c:150
float * coeffs
pointer to the subframe decode buffer
Definition wmaprodec.c:165
uint16_t subframe_offset[MAX_SUBFRAMES]
subframe positions in the current frame
Definition wmaprodec.c:153
uint8_t cur_subframe
current subframe number
Definition wmaprodec.c:154
int * scale_factors
pointer to the scale factor values used for decoding
Definition wmaprodec.c:163
int8_t scale_factor_step
scaling step for the current subframe
Definition wmaprodec.c:159
int8_t reuse_sf
share scale factors between subframes
Definition wmaprodec.c:158
uint8_t grouped
channel is part of a group
Definition wmaprodec.c:156
float out[WMAPRO_BLOCK_MAX_SIZE+WMAPRO_BLOCK_MAX_SIZE/2]
output buffer
Definition wmaprodec.c:167
int max_scale_factor
maximum scale factor for the current subframe
Definition wmaprodec.c:160
uint16_t decoded_samples
number of already processed samples
Definition wmaprodec.c:155
int saved_scale_factors[2][MAX_BANDS]
resampled and (previously) transmitted scale factor values
Definition wmaprodec.c:161
int8_t scale_factor_idx
index for the transmitted scale factor values (used for resampling)
Definition wmaprodec.c:162
uint16_t subframe_len[MAX_SUBFRAMES]
subframe length in samples
Definition wmaprodec.c:152
channel group for channel transformations
Definition wmaprodec.c:173
int8_t transform_band[MAX_BANDS]
controls if the transform is enabled for a certain band
Definition wmaprodec.c:176
float decorrelation_matrix[WMAPRO_MAX_CHANNELS *WMAPRO_MAX_CHANNELS]
Definition wmaprodec.c:177
float * channel_data[WMAPRO_MAX_CHANNELS]
transformation coefficients
Definition wmaprodec.c:178
int8_t transform
transform on / off
Definition wmaprodec.c:175
uint8_t num_channels
number of channels in the group
Definition wmaprodec.c:174
main decoder context
Definition wmaprodec.c:184
int num_saved_bits
saved number of bits
Definition wmaprodec.c:220
uint8_t packet_sequence_number
current packet number
Definition wmaprodec.c:219
int8_t parsed_all_subframes
all subframes decoded?
Definition wmaprodec.c:233
WMAProChannelGrp chgroup[WMAPRO_MAX_CHANNELS]
channel group information
Definition wmaprodec.c:248
GetBitContext gb
bitstream reader context
Definition wmaprodec.c:229
int8_t esc_len
length of escaped coefficients
Definition wmaprodec.c:245
int8_t channels_for_cur_subframe
number of channels that contain the subframe
Definition wmaprodec.c:239
uint32_t frame_num
current frame number (not used for decoding)
Definition wmaprodec.c:228
int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]
subwoofer cutoff values
Definition wmaprodec.c:213
int8_t channel_indexes_for_cur_subframe[WMAPRO_MAX_CHANNELS]
Definition wmaprodec.c:240
uint8_t len_prefix
frame is prefixed with its length
Definition wmaprodec.c:198
int frame_offset
frame offset in the bit reservoir
Definition wmaprodec.c:221
int16_t sfb_offsets[WMAPRO_BLOCK_SIZES][MAX_BANDS]
scale factor band offsets (multiples of 4)
Definition wmaprodec.c:211
uint32_t decode_flags
used compression features
Definition wmaprodec.c:197
uint16_t samples_per_frame
number of samples to output
Definition wmaprodec.c:201
av_tx_fn tx_fn[WMAPRO_BLOCK_SIZES]
Definition wmaprodec.c:192
uint8_t packet_done
set when a packet is fully decoded
Definition wmaprodec.c:224
int8_t nb_channels
number of channels in stream (XMA1/2)
Definition wmaprodec.c:238
AVCodecContext * avctx
codec context for av_log
Definition wmaprodec.c:186
int subframe_offset
subframe offset in the bit reservoir
Definition wmaprodec.c:222
uint8_t eof_done
set when EOF reached and extra subframe is written (XMA1/2)
Definition wmaprodec.c:225
uint16_t trim_end
number of samples to skip at end
Definition wmaprodec.c:203
int buf_bit_size
buffer size in bits
Definition wmaprodec.c:230
uint8_t dynamic_range_compression
frame contains DRC data
Definition wmaprodec.c:199
int16_t subframe_len
current subframe length
Definition wmaprodec.c:237
AVTXContext * tx[WMAPRO_BLOCK_SIZES]
MDCT context per block size.
Definition wmaprodec.c:191
uint8_t max_subframe_len_bit
flag indicating that the subframe is of maximum size when the first subframe length bit is 1
Definition wmaprodec.c:208
int8_t skip_frame
skip output step
Definition wmaprodec.c:232
uint8_t num_chgroups
number of channel groups
Definition wmaprodec.c:247
uint16_t log2_frame_size
Definition wmaprodec.c:204
int8_t lfe_channel
lfe channel index
Definition wmaprodec.c:205
uint8_t table_idx
index for the num_sfb, sfb_offsets, sf_offsets and subwoofer_cutoffs tables
Definition wmaprodec.c:244
int16_t * cur_sfb_offsets
sfb offsets for the current block
Definition wmaprodec.c:243
WMAProChannelCtx channel[WMAPRO_MAX_CHANNELS]
per channel data
Definition wmaprodec.c:250
uint8_t subframe_len_bits
number of bits used for the subframe length
Definition wmaprodec.c:207
uint8_t packet_loss
set in case of bitstream error
Definition wmaprodec.c:223
int8_t num_bands
number of scale factor bands
Definition wmaprodec.c:241
uint8_t drc_gain
gain for the DRC tool
Definition wmaprodec.c:231
uint8_t frame_data[MAX_FRAMESIZE+AV_INPUT_BUFFER_PADDING_SIZE]
compressed frame data
Definition wmaprodec.c:189
uint8_t max_num_subframes
Definition wmaprodec.c:206
AVFloatDSPContext * fdsp
Definition wmaprodec.c:187
float tmp[WMAPRO_BLOCK_MAX_SIZE]
IMDCT output buffer.
Definition wmaprodec.c:193
int next_packet_start
start offset of the next wma packet in the demuxer packet
Definition wmaprodec.c:217
int8_t num_sfb[WMAPRO_BLOCK_SIZES]
scale factor bands per block size
Definition wmaprodec.c:210
PutBitContext pb
context for filling the frame_data buffer
Definition wmaprodec.c:190
uint8_t bits_per_sample
integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1....
Definition wmaprodec.c:200
GetBitContext pgb
bitstream reader context for the packet
Definition wmaprodec.c:216
uint16_t min_samples_per_subframe
Definition wmaprodec.c:209
uint8_t packet_offset
frame offset in the packet
Definition wmaprodec.c:218
int8_t sf_offsets[WMAPRO_BLOCK_SIZES][WMAPRO_BLOCK_SIZES][MAX_BANDS]
scale factor resample matrix
Definition wmaprodec.c:212
uint16_t trim_start
number of samples to skip at start
Definition wmaprodec.c:202
uint8_t skip_packets
packets to skip to find next packet in a stream (XMA1/2)
Definition wmaprodec.c:234
int8_t transmit_num_vec_coeffs
number of vector coded coefficients is part of the bitstream
Definition wmaprodec.c:242
const float * windows[WMAPRO_BLOCK_SIZES]
windows for the different block sizes
Definition wmaprodec.c:194
AVAudioFifo * samples[2][XMA_MAX_STREAMS]
Definition wmaprodec.c:258
WMAProDecodeCtx xma[XMA_MAX_STREAMS]
Definition wmaprodec.c:254
int current_stream
Definition wmaprodec.c:256
AVFrame * frames[XMA_MAX_STREAMS]
Definition wmaprodec.c:255
int start_channel[XMA_MAX_STREAMS]
Definition wmaprodec.c:259
uint8_t run
Definition svq3.c:207
uint8_t level
Definition svq3.c:208
#define ff_dlog(a,...)
#define avpriv_request_sample(...)
#define av_freep(p)
#define av_log(a,...)
static uint8_t tmp[40]
Definition aes_ctr.c:52
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
Definition tx.c:295
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
Definition tx.c:903
@ AV_TX_FLOAT_MDCT
Standard MDCT with a sample data type of float, double or int32_t, respectively.
Definition tx.h:68
void(* av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride)
Function pointer to a function to perform the transform.
Definition tx.h:151
av_cold const VLCElem * ff_vlc_init_tables_from_lengths(VLCInitState *state, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags)
Definition vlc.c:366
#define VLC_INIT_STATE(_table)
Definition vlc.h:225
#define VLC_INIT_STATIC_TABLE_FROM_LENGTHS(vlc_table, nb_bits, nb_codes, lens, lens_wrap, syms, syms_wrap, syms_size, offset, flags)
Definition vlc.h:288
static const uint8_t quant[64]
Definition vmixdec.c:71
int len
static double c[64]
unsigned int ff_wma_get_large_val(GetBitContext *gb)
Decode an uncompressed coefficient.
Definition wma.c:395
int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, const VLCElem *vlc, const float *level_table, const uint16_t *run_table, int version, WMACoef *ptr, int offset, int num_coefs, int block_len, int frame_len_bits, int coef_nb_bits)
Decode run level compressed coefficients.
Definition wma.c:427
#define VLCBITS
Definition wma.h:55
av_cold int ff_wma_get_frame_len_bits(int sample_rate, int version, unsigned int decode_flags)
Get the samples per frame for this stream.
Definition wma_common.c:32
#define MAX_BANDS
max number of scale factor bands
static int remaining_bits(WmallDecodeCtx *s, GetBitContext *gb)
Calculate remaining input buffer length.
#define MAX_FRAMESIZE
maximum compressed frame size
tables for wmapro decoding
static const uint8_t vec2_table[HUFF_VEC2_SIZE][2]
Definition wmaprodata.h:366
#define HUFF_COEF1_SIZE
Definition wmaprodata.h:184
static const uint16_t vec4_syms[HUFF_VEC4_SIZE]
Definition wmaprodata.h:343
static const uint8_t scale_rl_table[HUFF_SCALE_RL_SIZE][2]
Definition wmaprodata.h:87
#define HUFF_VEC4_SIZE
Definition wmaprodata.h:326
static const uint8_t vec4_lens[HUFF_VEC4_SIZE]
Definition wmaprodata.h:328
#define HUFF_VEC2_SIZE
Definition wmaprodata.h:360
#define HUFF_SCALE_SIZE
Definition wmaprodata.h:49
#define HUFF_SCALE_RL_SIZE
Definition wmaprodata.h:85
static const uint8_t scale_rl_level[HUFF_SCALE_RL_SIZE]
Definition wmaprodata.h:125
static const uint16_t coef1_run[HUFF_COEF1_SIZE]
Definition wmaprodata.h:286
static const uint8_t scale_rl_run[HUFF_SCALE_RL_SIZE]
Definition wmaprodata.h:115
static const uint16_t coef0_syms[HUFF_COEF0_SIZE]
Definition wmaprodata.h:161
static const uint16_t coef0_run[HUFF_COEF0_SIZE]
Definition wmaprodata.h:239
static const uint8_t coef1_table[HUFF_COEF1_SIZE][2]
Definition wmaprodata.h:186
static const float *const default_decorrelation[]
default decorrelation matrix offsets
Definition wmaprodata.h:448
static const uint8_t coef0_lens[HUFF_COEF0_SIZE]
Definition wmaprodata.h:143
#define HUFF_VEC1_SIZE
Definition wmaprodata.h:398
#define HUFF_COEF0_SIZE
Definition wmaprodata.h:141
static const uint8_t vec1_table[HUFF_VEC1_SIZE][2]
Definition wmaprodata.h:400
static const float coef0_level[HUFF_COEF0_SIZE]
Definition wmaprodata.h:262
static const float coef1_level[HUFF_COEF1_SIZE]
Definition wmaprodata.h:303
static const uint16_t critical_freq[]
frequencies to divide the frequency spectrum into scale factor bands
Definition wmaprodata.h:37
#define MAX_BANDS
max number of scale factor bands
Definition wmaprodec.c:116
static void wmapro_window(WMAProDecodeCtx *s)
Apply sine window and reconstruct the output buffer.
Definition wmaprodec.c:1173
static int remaining_bits(WMAProDecodeCtx *s, GetBitContext *gb)
Calculate remaining input buffer length.
Definition wmaprodec.c:1557
#define WMAPRO_BLOCK_MAX_SIZE
maximum block size
Definition wmaprodec.c:125
static av_cold void wmapro_flush(AVCodecContext *avctx)
Clear decoder buffers (for seeking).
Definition wmaprodec.c:2062
#define WMAPRO_BLOCK_SIZES
possible block sizes
Definition wmaprodec.c:126
static av_cold void dump_context(WMAProDecodeCtx *s)
helper function to print the most important members of the context
Definition wmaprodec.c:268
#define WMAPRO_BLOCK_MIN_SIZE
minimum block size
Definition wmaprodec.c:124
#define SCALERLMAXDEPTH
Definition wmaprodec.c:135
static av_cold void decode_init_static(void)
Definition wmaprodec.c:323
static float sin64[33]
sine table for decorrelation
Definition wmaprodec.c:143
static av_cold void xma_flush(AVCodecContext *avctx)
Definition wmaprodec.c:2069
#define WMAPRO_BLOCK_MIN_BITS
log2 of min block size
Definition wmaprodec.c:122
static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
Decode one WMA frame.
Definition wmaprodec.c:1444
static av_cold int decode_init(WMAProDecodeCtx *s, AVCodecContext *avctx, int num_stream)
Initialize the decoder.
Definition wmaprodec.c:365
#define PRINT_HEX(a, b)
static av_cold int xma_decode_init(AVCodecContext *avctx)
Definition wmaprodec.c:1953
#define VEC2MAXDEPTH
Definition wmaprodec.c:132
static int xma_decode_packet(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition wmaprodec.c:1832
static VLCElem vec4_vlc[604]
4 coefficients per symbol
Definition wmaprodec.c:139
static av_cold int xma_decode_end(AVCodecContext *avctx)
Definition wmaprodec.c:2025
static av_cold int get_rate(AVCodecContext *avctx)
Definition wmaprodec.c:308
static void save_bits(WMAProDecodeCtx *s, GetBitContext *gb, int len, int append)
Fill the bit reservoir with a (partial) frame.
Definition wmaprodec.c:1569
static VLCElem vec1_vlc[562]
1 coefficient per symbol
Definition wmaprodec.c:141
static VLCElem sf_rl_vlc[1406]
scale factor run length vlc
Definition wmaprodec.c:138
static int decode_channel_transform(WMAProDecodeCtx *s)
Decode channel transformation parameters.
Definition wmaprodec.c:805
#define VEC4MAXDEPTH
Definition wmaprodec.c:131
static int wmapro_decode_packet(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Decode a single WMA packet.
Definition wmaprodec.c:1816
#define PRINT(a, b)
#define XMA_MAX_STREAMS
Definition wmaprodec.c:118
#define VEC1MAXDEPTH
Definition wmaprodec.c:133
static void decode_decorrelation_matrix(WMAProDecodeCtx *s, WMAProChannelGrp *chgroup)
Calculate a decorrelation matrix from the bitstream parameters.
Definition wmaprodec.c:755
static int decode_packet(AVCodecContext *avctx, WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition wmaprodec.c:1616
static VLCElem vec2_vlc[562]
2 coefficients per symbol
Definition wmaprodec.c:140
static void inverse_channel_transform(WMAProDecodeCtx *s)
Reconstruct the individual channel data.
Definition wmaprodec.c:1118
static const VLCElem * coef_vlc[2]
coefficient run length vlc codes
Definition wmaprodec.c:142
#define SCALEVLCBITS
Definition wmaprodec.c:130
#define SCALEMAXDEPTH
Definition wmaprodec.c:134
#define MAX_SUBFRAMES
max number of subframes per channel
Definition wmaprodec.c:115
static int decode_subframe_length(WMAProDecodeCtx *s, int offset)
Decode the subframe length.
Definition wmaprodec.c:613
static int decode_subframe(WMAProDecodeCtx *s)
Decode a single subframe (block).
Definition wmaprodec.c:1203
static av_cold int wmapro_decode_end(AVCodecContext *avctx)
Definition wmaprodec.c:299
static av_cold int wmapro_decode_init(AVCodecContext *avctx)
Initialize the decoder.
Definition wmaprodec.c:595
#define XMA_MAX_CHANNELS
Definition wmaprodec.c:120
static int decode_coeffs(WMAProDecodeCtx *s, int c)
Extract the coefficients from the bitstream.
Definition wmaprodec.c:919
#define XMA_MAX_CHANNELS_STREAM
Definition wmaprodec.c:119
#define WMAPRO_BLOCK_MAX_BITS
log2 of max block size
Definition wmaprodec.c:123
#define MAX_FRAMESIZE
maximum compressed frame size
Definition wmaprodec.c:117
static int decode_tilehdr(WMAProDecodeCtx *s)
Decode how the data in the frame is split into subframes.
Definition wmaprodec.c:664
static av_cold int decode_end(WMAProDecodeCtx *s)
Uninitialize the decoder and free all resources.
Definition wmaprodec.c:287
static int decode_scale_factors(WMAProDecodeCtx *s)
Extract scale factors from the bitstream.
Definition wmaprodec.c:1025
#define WMAPRO_MAX_CHANNELS
current decoder limitations
Definition wmaprodec.c:114