#include "avcodec.h"
#include "wma.h"
#include <assert.h>
Go to the source code of this file.
Defines | |
#define | EXPVLCBITS 8 |
#define | EXPMAX ((19+EXPVLCBITS-1)/EXPVLCBITS) |
#define | HGAINVLCBITS 9 |
#define | HGAINMAX ((13+HGAINVLCBITS-1)/HGAINVLCBITS) |
Functions | |
static void | wma_lsp_to_curve_init (WMACodecContext *s, int frame_len) |
static int | wma_decode_init (AVCodecContext *avctx) |
static float | pow_m1_4 (WMACodecContext *s, float x) |
compute x^-0.25 with an exponent and mantissa table. | |
static void | wma_lsp_to_curve (WMACodecContext *s, float *out, float *val_max_ptr, int n, float *lsp) |
NOTE: We use the same code as Vorbis here. | |
static void | decode_exp_lsp (WMACodecContext *s, int ch) |
decode exponents coded with LSP coefficients (same idea as Vorbis) | |
static int | decode_exp_vlc (WMACodecContext *s, int ch) |
decode exponents coded with VLC codes | |
static void | wma_window (WMACodecContext *s, float *out) |
Apply MDCT window and add into output. | |
static int | wma_decode_block (WMACodecContext *s) |
static int | wma_decode_frame (WMACodecContext *s, int16_t *samples) |
static int | wma_decode_superframe (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) |
static av_cold void | flush (AVCodecContext *avctx) |
Variables | |
static const float | pow_tab [] |
pow(10, i / 16.0) for i in -60. | |
AVCodec | ff_wmav1_decoder |
AVCodec | ff_wmav2_decoder |
This decoder handles Microsoft Windows Media Audio data, versions 1 & 2. WMA v1 is identified by audio format 0x160 in Microsoft media files (ASF/AVI/WAV). WMA v2 is identified by audio format 0x161.
To use this decoder, a calling application must supply the extra data bytes provided with the WMA data. These are the extra, codec-specific bytes at the end of a WAVEFORMATEX data structure. Transmit these bytes to the decoder using the extradata[_size] fields in AVCodecContext. There should be 4 extra bytes for v1 data and 6 extra bytes for v2 data.
Definition in file wmadec.c.
#define EXPMAX ((19+EXPVLCBITS-1)/EXPVLCBITS) |
#define EXPVLCBITS 8 |
#define HGAINMAX ((13+HGAINVLCBITS-1)/HGAINVLCBITS) |
#define HGAINVLCBITS 9 |
static void decode_exp_lsp | ( | WMACodecContext * | s, | |
int | ch | |||
) | [static] |
decode exponents coded with LSP coefficients (same idea as Vorbis)
Definition at line 229 of file wmadec.c.
Referenced by wma_decode_block().
static int decode_exp_vlc | ( | WMACodecContext * | s, | |
int | ch | |||
) | [static] |
decode exponents coded with VLC codes
Definition at line 331 of file wmadec.c.
Referenced by wma_decode_block().
static av_cold void flush | ( | AVCodecContext * | avctx | ) | [static] |
static float pow_m1_4 | ( | WMACodecContext * | s, | |
float | x | |||
) | [inline, static] |
compute x^-0.25 with an exponent and mantissa table.
We use linear interpolation to reduce the mantissa table size at a small speed expense (linear interpolation approximately doubles the number of bits of precision).
Definition at line 148 of file wmadec.c.
Referenced by wma_lsp_to_curve().
static int wma_decode_block | ( | WMACodecContext * | s | ) | [static] |
Definition at line 447 of file wmadec.c.
Referenced by wma_decode_frame().
static int wma_decode_frame | ( | WMACodecContext * | s, | |
int16_t * | samples | |||
) | [static] |
static int wma_decode_init | ( | AVCodecContext * | avctx | ) | [static] |
static int wma_decode_superframe | ( | AVCodecContext * | avctx, | |
void * | data, | |||
int * | data_size, | |||
AVPacket * | avpkt | |||
) | [static] |
static void wma_lsp_to_curve | ( | WMACodecContext * | s, | |
float * | out, | |||
float * | val_max_ptr, | |||
int | n, | |||
float * | lsp | |||
) | [static] |
NOTE: We use the same code as Vorbis here.
Definition at line 199 of file wmadec.c.
Referenced by decode_exp_lsp().
static void wma_lsp_to_curve_init | ( | WMACodecContext * | s, | |
int | frame_len | |||
) | [static] |
static void wma_window | ( | WMACodecContext * | s, | |
float * | out | |||
) | [static] |
Apply MDCT window and add into output.
We ensure that when the windows overlap their squared sum is always 1 (MDCT reconstruction rule).
Definition at line 395 of file wmadec.c.
Referenced by wma_decode_block().
Initial value:
{ "wmav1", AVMEDIA_TYPE_AUDIO, CODEC_ID_WMAV1, sizeof(WMACodecContext), wma_decode_init, NULL, ff_wma_end, wma_decode_superframe, .flush=flush, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"), }
Initial value:
{ "wmav2", AVMEDIA_TYPE_AUDIO, CODEC_ID_WMAV2, sizeof(WMACodecContext), wma_decode_init, NULL, ff_wma_end, wma_decode_superframe, .flush=flush, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"), }
const float pow_tab[] [static] |