#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include "avcodec.h"
#include "get_bits.h"
#include "dsputil.h"
#include "bytestream.h"
#include "fft.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 | 
| Defines | |
| #define | JOINT_STEREO 0x12 | 
| #define | STEREO 0x2 | 
| #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 void | init_atrac3_transforms (ATRAC3Context *q) | 
| 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) | 
| Frame handling. | |
| static int | atrac3_decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) | 
| Atrac frame decoding. | |
| static av_cold int | atrac3_decode_init (AVCodecContext *avctx) | 
| Atrac3 initialization. | |
| Variables | |
| static float | mdct_window [512] | 
| static VLC | spectral_coeff_tab [7] | 
| static float | gain_tab1 [16] | 
| static float | gain_tab2 [31] | 
| static DSPContext | dsp | 
| AVCodec | ff_atrac3_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 546 of file atrac3.c.
Referenced by channelWeighting(), reverseMatrixing(), and Super2xSaI_ex().
| #define JOINT_STEREO 0x12 | 
Definition at line 48 of file atrac3.c.
Referenced by atrac3_decode_init(), cook_decode_init(), decodeChannelSoundUnit(), decodeFrame(), and MP3lame_encode_init().
| #define STEREO 0x2 | 
| static int addTonalComponents | ( | float * | pSpectrum, | |
| int | numComponents, | |||
| tonal_component * | pComponent | |||
| ) |  [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 528 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static av_cold int atrac3_decode_close | ( | AVCodecContext * | avctx | ) |  [static] | 
| static int atrac3_decode_frame | ( | AVCodecContext * | avctx, | |
| void * | data, | |||
| int * | data_size, | |||
| AVPacket * | avpkt | |||
| ) |  [static] | 
| static av_cold int atrac3_decode_init | ( | AVCodecContext * | avctx | ) |  [static] | 
| static void channelWeighting | ( | float * | su1, | |
| float * | su2, | |||
| int * | p3 | |||
| ) |  [static] | 
| static int decode_bytes | ( | const uint8_t * | inbuffer, | |
| uint8_t * | out, | |||
| int | bytes | |||
| ) |  [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 175 of file atrac3.c.
Referenced by atrac3_decode_frame(), and decode_bytes_and_gain().
| static int decodeChannelSoundUnit | ( | ATRAC3Context * | q, | |
| GetBitContext * | gb, | |||
| channel_unit * | pSnd, | |||
| float * | pOut, | |||
| int | channelNum, | |||
| int | codingMode | |||
| ) |  [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 660 of file atrac3.c.
Referenced by decodeFrame().
| static int decodeFrame | ( | ATRAC3Context * | q, | |
| const uint8_t * | databuf | |||
| ) |  [static] | 
Frame handling.
| q | Atrac3 private context | |
| databuf | the input data | 
Definition at line 724 of file atrac3.c.
Referenced by atrac3_decode_frame().
| static int decodeGainControl | ( | GetBitContext * | gb, | |
| gain_block * | pGb, | |||
| int | numBands | |||
| ) |  [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 432 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static int decodeSpectrum | ( | GetBitContext * | gb, | |
| float * | pOut | |||
| ) |  [static] | 
Restore the quantized band spectrum coefficients.
| gb | the GetBit context | |
| pOut | decoded band spectrum | 
Definition at line 297 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static int decodeTonalComponents | ( | GetBitContext * | gb, | |
| tonal_component * | pComponent, | |||
| int | numBands | |||
| ) |  [static] | 
Restore the quantized tonal components.
| gb | the GetBit context | |
| pComponent | tone component | |
| numBands | amount of coded bands | 
Definition at line 355 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static void gainCompensateAndOverlap | ( | float * | pIn, | |
| float * | pPrev, | |||
| float * | pOut, | |||
| gain_info * | pGain1, | |||
| gain_info * | pGain2 | |||
| ) |  [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 471 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static void getChannelWeights | ( | int | indx, | |
| int | flag, | |||
| float | ch[2] | |||
| ) |  [static] | 
| static void IMLT | ( | ATRAC3Context * | q, | |
| float * | pInput, | |||
| float * | pOutput, | |||
| int | odd_band | |||
| ) |  [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 141 of file atrac3.c.
Referenced by decodeChannelSoundUnit().
| static av_cold void init_atrac3_transforms | ( | ATRAC3Context * | q | ) |  [static] | 
| static void readQuantSpectralCoeffs | ( | GetBitContext * | gb, | |
| int | selector, | |||
| int | codingFlag, | |||
| int * | mantissas, | |||
| int | numCodes | |||
| ) |  [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 239 of file atrac3.c.
Referenced by decodeSpectrum(), and decodeTonalComponents().
| static void reverseMatrixing | ( | float * | su1, | |
| float * | su2, | |||
| int * | pPrevCode, | |||
| int * | pCurrCode | |||
| ) |  [static] | 
| DSPContext dsp  [static] | 
Definition at line 129 of file atrac3.c.
Referenced by apply_window(), dnxhd_get_blocks(), dvvideo_init(), rv34_output_macroblock(), vc1_interp_mc(), vc1_mc_1mv(), vc1_mc_4mv_chroma(), vc1_mc_4mv_luma(), and vp3_update_thread_context().
Initial value:
{
    .name = "atrac3",
    .type = AVMEDIA_TYPE_AUDIO,
    .id = CODEC_ID_ATRAC3,
    .priv_data_size = sizeof(ATRAC3Context),
    .init = atrac3_decode_init,
    .close = atrac3_decode_close,
    .decode = atrac3_decode_frame,
    .long_name = NULL_IF_CONFIG_SMALL("Atrac 3 (Adaptive TRansform Acoustic Coding 3)"),
}
| float gain_tab1[16]  [static] | 
Definition at line 127 of file atrac3.c.
Referenced by atrac3_decode_init(), and gainCompensateAndOverlap().
| float gain_tab2[31]  [static] | 
Definition at line 128 of file atrac3.c.
Referenced by atrac3_decode_init(), and gainCompensateAndOverlap().
| float mdct_window[512]  [static] | 
| VLC spectral_coeff_tab[7]  [static] | 
 1.5.8
 1.5.8