FFmpeg
|
#include <math.h>
#include <stddef.h>
#include "libavutil/attributes.h"
#include "libavutil/float_dsp.h"
#include "libavutil/libm.h"
#include "libavutil/mem_internal.h"
#include "libavutil/thread.h"
#include "libavutil/tx.h"
#include "avcodec.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
#include "atrac.h"
#include "atrac3data.h"
Go to the source code of this file.
Data Structures | |
struct | GainBlock |
struct | TonalComponent |
struct | ChannelUnit |
struct | ATRAC3Context |
Macros | |
#define | MIN_CHANNELS 1 |
#define | MAX_CHANNELS 8 |
#define | MAX_JS_PAIRS 8 / 2 |
#define | JOINT_STEREO 0x12 |
#define | SINGLE 0x2 |
#define | SAMPLES_PER_FRAME 1024 |
#define | MDCT_SIZE 512 |
#define | ATRAC3_VLC_BITS 8 |
#define | INTERPOLATE(old, new, nsample) ((old) + (nsample) * 0.125 * ((new) - (old))) |
Functions | |
static void | imlt (ATRAC3Context *q, float *input, float *output, int odd_band) |
Regular 512 points IMDCT without overlapping, with the exception of the swapping of odd bands caused by the reverse spectra of the QMF. More... | |
static int | decode_bytes (const uint8_t *input, uint8_t *out, int bytes) |
static av_cold void | init_imdct_window (void) |
static av_cold int | atrac3_decode_close (AVCodecContext *avctx) |
static void | read_quant_spectral_coeffs (GetBitContext *gb, int selector, int coding_flag, int *mantissas, int num_codes) |
Mantissa decoding. More... | |
static int | decode_spectrum (GetBitContext *gb, float *output) |
Restore the quantized band spectrum coefficients. More... | |
static int | decode_tonal_components (GetBitContext *gb, TonalComponent *components, int num_bands) |
Restore the quantized tonal components. More... | |
static int | decode_gain_control (GetBitContext *gb, GainBlock *block, int num_bands) |
Decode gain parameters for the coded bands. More... | |
static int | add_tonal_components (float *spectrum, int num_components, TonalComponent *components) |
Combine the tonal band spectrum and regular band spectrum. More... | |
static void | reverse_matrixing (float *su1, float *su2, int *prev_code, int *curr_code) |
static void | get_channel_weights (int index, int flag, float ch[2]) |
static void | channel_weighting (float *su1, float *su2, int *p3) |
static int | decode_channel_sound_unit (ATRAC3Context *q, GetBitContext *gb, ChannelUnit *snd, float *output, int channel_num, int coding_mode) |
Decode a Sound Unit. More... | |
static int | decode_frame (AVCodecContext *avctx, const uint8_t *databuf, float **out_samples) |
static int | al_decode_frame (AVCodecContext *avctx, const uint8_t *databuf, int size, float **out_samples) |
static int | atrac3_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) |
static int | atrac3al_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) |
static av_cold void | atrac3_init_static_data (void) |
static av_cold int | atrac3_decode_init (AVCodecContext *avctx) |
Variables | |
static float | mdct_window [MDCT_SIZE] |
static VLCElem | atrac3_vlc_table [7 *1<< ATRAC3_VLC_BITS] |
static VLC | spectral_coeff_tab [7] |
const FFCodec | ff_atrac3_decoder |
const FFCodec | ff_atrac3al_decoder |
ATRAC3 compatible decoder. This decoder handles Sony's ATRAC3 data.
Container formats used to store ATRAC3 data: RealMedia (.rm), RIFF WAV (.wav, .at3), Sony OpenMG (.oma, .aa3).
To use this decoder, a calling application must supply the extradata bytes provided in the containers above.
Definition in file atrac3.c.
#define INTERPOLATE | ( | old, | |
new, | |||
nsample | |||
) | ((old) + (nsample) * 0.125 * ((new) - (old))) |
|
static |
Regular 512 points IMDCT without overlapping, with the exception of the swapping of odd bands caused by the reverse spectra of the QMF.
odd_band | 1 if the band is an odd band |
Reverse the odd bands before IMDCT, this is an effect of the QMF transform or it gives better compression to do it this way. FIXME: It should be possible to handle this in imdct_calc for that to happen a modification of the prerotation step of all SIMD code and C code is needed. Or fix the functions before so they generate a pre reversed spectrum.
Definition at line 134 of file atrac3.c.
Referenced by decode_channel_sound_unit().
Definition at line 160 of file atrac3.c.
Referenced by atrac3_decode_frame().
|
static |
Definition at line 183 of file atrac3.c.
Referenced by atrac3_init_static_data().
|
static |
|
static |
Mantissa decoding.
selector | which table the output values are coded with |
coding_flag | constant length coding or variable length coding |
mantissas | mantissa output table |
num_codes | number of values to get |
Definition at line 218 of file atrac3.c.
Referenced by decode_spectrum(), and decode_tonal_components().
|
static |
Restore the quantized band spectrum coefficients.
Definition at line 272 of file atrac3.c.
Referenced by decode_channel_sound_unit().
|
static |
Restore the quantized tonal components.
components | tonal components |
num_bands | number of coded bands |
Definition at line 330 of file atrac3.c.
Referenced by decode_channel_sound_unit().
|
static |
Decode gain parameters for the coded bands.
block | the gainblock for the current band |
num_bands | amount of coded bands |
Definition at line 414 of file atrac3.c.
Referenced by decode_channel_sound_unit().
|
static |
Combine the tonal band spectrum and regular band spectrum.
spectrum | output spectrum buffer |
num_components | number of tonal components |
components | tonal components for this band |
Definition at line 450 of file atrac3.c.
Referenced by decode_channel_sound_unit().
Definition at line 471 of file atrac3.c.
Referenced by decode_frame().
Definition at line 533 of file atrac3.c.
Referenced by channel_weighting().
Definition at line 546 of file atrac3.c.
Referenced by decode_frame().
|
static |
Decode a Sound Unit.
snd | the channel unit to be used |
output | the decoded samples before IQMF in float representation |
channel_num | channel number |
coding_mode | the coding mode (JOINT_STEREO or single channels) |
Definition at line 577 of file atrac3.c.
Referenced by al_decode_frame(), and decode_frame().
|
static |
Definition at line 644 of file atrac3.c.
Referenced by atrac3_decode_frame().
|
static |
Definition at line 758 of file atrac3.c.
Referenced by atrac3al_decode_frame().
|
static |
|
static |
|
static |
Definition at line 853 of file atrac3.c.
Referenced by atrac3_decode_init().
|
static |
Definition at line 124 of file atrac3.c.
Referenced by imlt(), and init_imdct_window().
|
static |
Definition at line 125 of file atrac3.c.
Referenced by atrac3_init_static_data().
|
static |
Definition at line 126 of file atrac3.c.
Referenced by atrac3_init_static_data(), and read_quant_spectral_coeffs().
const FFCodec ff_atrac3_decoder |
const FFCodec ff_atrac3al_decoder |