Atrac 3 compatible decoder. More...
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include "avcodec.h"
#include "internal.h"
#include "get_bits.h"
#include "dsputil.h"
#include "bytestream.h"
#include "fft.h"
#include "fmtconvert.h"
#include "atrac.h"
#include "atrac3data.h"
Go to the source code of this file.
Data Structures | |
struct | gain_info |
struct | gain_block |
struct | tonal_component |
struct | channel_unit |
struct | ATRAC3Context |
Macros | |
#define | JOINT_STEREO 0x12 |
#define | STEREO 0x2 |
#define | SAMPLES_PER_FRAME 1024 |
#define | MDCT_SIZE 512 |
#define | INTERPOLATE(old, new, nsample) ((old) + (nsample)*0.125*((new)-(old))) |
Functions | |
static void | IMLT (ATRAC3Context *q, float *pInput, float *pOutput, 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. | |
static int | decode_bytes (const uint8_t *inbuffer, uint8_t *out, int bytes) |
Atrac 3 indata descrambling, only used for data coming from the rm container. | |
static av_cold int | init_atrac3_transforms (ATRAC3Context *q, int is_float) |
static av_cold int | atrac3_decode_close (AVCodecContext *avctx) |
Atrac3 uninit, free all allocated memory. | |
static void | readQuantSpectralCoeffs (GetBitContext *gb, int selector, int codingFlag, int *mantissas, int numCodes) |
/ * Mantissa decoding | |
static int | decodeSpectrum (GetBitContext *gb, float *pOut) |
Restore the quantized band spectrum coefficients. | |
static int | decodeTonalComponents (GetBitContext *gb, tonal_component *pComponent, int numBands) |
Restore the quantized tonal components. | |
static int | decodeGainControl (GetBitContext *gb, gain_block *pGb, int numBands) |
Decode gain parameters for the coded bands. | |
static void | gainCompensateAndOverlap (float *pIn, float *pPrev, float *pOut, gain_info *pGain1, gain_info *pGain2) |
Apply gain parameters and perform the MDCT overlapping part. | |
static int | addTonalComponents (float *pSpectrum, int numComponents, tonal_component *pComponent) |
Combine the tonal band spectrum and regular band spectrum Return position of the last tonal coefficient. | |
static void | reverseMatrixing (float *su1, float *su2, int *pPrevCode, int *pCurrCode) |
static void | getChannelWeights (int indx, int flag, float ch[2]) |
static void | channelWeighting (float *su1, float *su2, int *p3) |
static int | decodeChannelSoundUnit (ATRAC3Context *q, GetBitContext *gb, channel_unit *pSnd, float *pOut, int channelNum, int codingMode) |
Decode a Sound Unit. | |
static int | decodeFrame (ATRAC3Context *q, const uint8_t *databuf, float **out_samples) |
Frame handling. | |
static int | atrac3_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) |
Atrac frame decoding. | |
static av_cold int | atrac3_decode_init (AVCodecContext *avctx) |
Atrac3 initialization. |
Variables | |
static float | mdct_window [MDCT_SIZE] |
static VLC | spectral_coeff_tab [7] |
static float | gain_tab1 [16] |
static float | gain_tab2 [31] |
static DSPContext | dsp |
AVCodec | ff_atrac3_decoder |
Atrac 3 compatible decoder.
This decoder handles Sony's ATRAC3 data.
Container formats used to store atrac 3 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))) |
Definition at line 557 of file atrac3.c.
Referenced by channelWeighting(), and reverseMatrixing().
#define JOINT_STEREO 0x12 |
Definition at line 50 of file atrac3.c.
Referenced by atrac3_decode_init(), decodeChannelSoundUnit(), decodeFrame(), and MP3lame_encode_init().
#define SAMPLES_PER_FRAME 1024 |
Definition at line 53 of file atrac3.c.
Referenced by atrac3_decode_frame(), atrac3_decode_init(), decodeSpectrum(), and decodeTonalComponents().
#define STEREO 0x2 |
Definition at line 51 of file atrac3.c.
Referenced by atrac3_decode_init().
|
static |
Combine the tonal band spectrum and regular band spectrum Return position of the last tonal coefficient.
pSpectrum | output spectrum buffer |
numComponents | amount of tonal components |
pComponent | tonal components for this band |
Definition at line 539 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Atrac3 uninit, free all allocated memory.
Definition at line 227 of file atrac3.c.
Referenced by atrac3_decode_init().
|
static |
Atrac frame decoding.
avctx | pointer to the AVCodecContext |
|
static |
Atrac3 initialization.
avctx | pointer to the AVCodecContext |
|
static |
Definition at line 634 of file atrac3.c.
Referenced by decodeFrame().
|
static |
Atrac 3 indata descrambling, only used for data coming from the rm container.
inbuffer | pointer to 8 bit array of indata |
out | pointer to 8 bit array of outdata |
bytes | amount of bytes |
Definition at line 181 of file atrac3.c.
Referenced by atrac3_decode_frame().
|
static |
Decode a Sound Unit.
gb | the GetBit context |
pSnd | the channel unit to be used |
pOut | the decoded samples before IQMF in float representation |
channelNum | channel number |
codingMode | the coding mode (JOINT_STEREO or regular stereo/mono) |
Definition at line 671 of file atrac3.c.
Referenced by decodeFrame().
|
static |
Frame handling.
q | Atrac3 private context |
databuf | the input data |
Definition at line 737 of file atrac3.c.
Referenced by atrac3_decode_frame().
|
static |
Decode gain parameters for the coded bands.
gb | the GetBit context |
pGb | the gainblock for the current band |
numBands | amount of coded bands |
Definition at line 443 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Restore the quantized band spectrum coefficients.
gb | the GetBit context |
pOut | decoded band spectrum |
Definition at line 308 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Restore the quantized tonal components.
gb | the GetBit context |
pComponent | tone component |
numBands | amount of coded bands |
Definition at line 366 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Apply gain parameters and perform the MDCT overlapping part.
pIn | input float buffer |
pPrev | previous float buffer to perform overlap against |
pOut | output float buffer |
pGain1 | current band gain info |
pGain2 | next band gain info |
Definition at line 482 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Definition at line 621 of file atrac3.c.
Referenced by channelWeighting().
|
static |
Regular 512 points IMDCT without overlapping, with the exception of the swapping of odd bands caused by the reverse spectra of the QMF.
pInput | float input |
pOutput | float output |
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 147 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
|
static |
Definition at line 204 of file atrac3.c.
Referenced by atrac3_decode_init().
|
static |
/ * Mantissa decoding
gb | the GetBit context |
selector | what table is the output values coded with |
codingFlag | constant length coding or variable length coding |
mantissas | mantissa output table |
numCodes | amount of values to get |
Definition at line 250 of file atrac3.c.
Referenced by decodeSpectrum(), and decodeTonalComponents().
|
static |
Definition at line 559 of file atrac3.c.
Referenced by decodeFrame().
|
static |
Definition at line 135 of file atrac3.c.
Referenced by dnxhd_get_blocks(), dvvideo_init(), rtjpeg_decode_init(), vc1_interp_mc(), vc1_mc_1mv(), vc1_mc_4mv_chroma(), vc1_mc_4mv_chroma4(), vc1_mc_4mv_luma(), and vp3_update_thread_context().
AVCodec ff_atrac3_decoder |
|
static |
Definition at line 133 of file atrac3.c.
Referenced by atrac3_decode_init(), and gainCompensateAndOverlap().
|
static |
Definition at line 134 of file atrac3.c.
Referenced by atrac3_decode_init(), and gainCompensateAndOverlap().
|
static |
Definition at line 131 of file atrac3.c.
Referenced by IMLT(), and init_atrac3_transforms().