FFmpeg  4.0
Data Structures | Macros | Functions | Variables
atrac1.c File Reference

ATRAC1 compatible decoder. More...

#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include "libavutil/float_dsp.h"
#include "avcodec.h"
#include "get_bits.h"
#include "fft.h"
#include "internal.h"
#include "sinewin.h"
#include "atrac.h"
#include "atrac1data.h"

Go to the source code of this file.

Data Structures

struct  AT1SUCtx
 Sound unit struct, one unit is used per channel. More...
 
struct  AT1Ctx
 The atrac1 context, holds all needed parameters for decoding. More...
 

Macros

#define AT1_MAX_BFU   52
 max number of block floating units in a sound unit More...
 
#define AT1_SU_SIZE   212
 number of bytes in a sound unit More...
 
#define AT1_SU_SAMPLES   512
 number of samples in a sound unit More...
 
#define AT1_FRAME_SIZE   AT1_SU_SIZE * 2
 
#define AT1_SU_MAX_BITS   AT1_SU_SIZE * 8
 
#define AT1_MAX_CHANNELS   2
 
#define AT1_QMF_BANDS   3
 
#define IDX_LOW_BAND   0
 
#define IDX_MID_BAND   1
 
#define IDX_HIGH_BAND   2
 

Functions

static void at1_imdct (AT1Ctx *q, float *spec, float *out, int nbits, int rev_spec)
 
static int at1_imdct_block (AT1SUCtx *su, AT1Ctx *q)
 
static int at1_parse_bsm (GetBitContext *gb, int log2_block_cnt[AT1_QMF_BANDS])
 Parse the block size mode byte. More...
 
static int at1_unpack_dequant (GetBitContext *gb, AT1SUCtx *su, float spec[AT1_SU_SAMPLES])
 
static void at1_subband_synthesis (AT1Ctx *q, AT1SUCtx *su, float *pOut)
 
static int atrac1_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 
static av_cold int atrac1_decode_end (AVCodecContext *avctx)
 
static av_cold int atrac1_decode_init (AVCodecContext *avctx)
 

Variables

static const uint16_t samples_per_band [3] = {128, 128, 256}
 size of the transform in samples in the long mode for each QMF band More...
 
static const uint8_t mdct_long_nbits [3] = {7, 7, 8}
 
AVCodec ff_atrac1_decoder
 

Detailed Description

ATRAC1 compatible decoder.

This decoder handles raw ATRAC1 data and probably SDDS data.

Definition in file atrac1.c.

Macro Definition Documentation

◆ AT1_MAX_BFU

#define AT1_MAX_BFU   52

max number of block floating units in a sound unit

Definition at line 45 of file atrac1.c.

Referenced by at1_unpack_dequant().

◆ AT1_SU_SIZE

#define AT1_SU_SIZE   212

number of bytes in a sound unit

Definition at line 46 of file atrac1.c.

◆ AT1_SU_SAMPLES

#define AT1_SU_SAMPLES   512

number of samples in a sound unit

Definition at line 47 of file atrac1.c.

Referenced by atrac1_decode_frame().

◆ AT1_FRAME_SIZE

#define AT1_FRAME_SIZE   AT1_SU_SIZE * 2

Definition at line 48 of file atrac1.c.

◆ AT1_SU_MAX_BITS

#define AT1_SU_MAX_BITS   AT1_SU_SIZE * 8

Definition at line 49 of file atrac1.c.

Referenced by at1_unpack_dequant().

◆ AT1_MAX_CHANNELS

#define AT1_MAX_CHANNELS   2

Definition at line 50 of file atrac1.c.

Referenced by atrac1_decode_init().

◆ AT1_QMF_BANDS

#define AT1_QMF_BANDS   3

Definition at line 52 of file atrac1.c.

Referenced by at1_imdct_block(), and at1_unpack_dequant().

◆ IDX_LOW_BAND

#define IDX_LOW_BAND   0

Definition at line 53 of file atrac1.c.

◆ IDX_MID_BAND

#define IDX_MID_BAND   1

Definition at line 54 of file atrac1.c.

◆ IDX_HIGH_BAND

#define IDX_HIGH_BAND   2

Definition at line 55 of file atrac1.c.

Referenced by at1_parse_bsm().

Function Documentation

◆ at1_imdct()

static void at1_imdct ( AT1Ctx q,
float *  spec,
float *  out,
int  nbits,
int  rev_spec 
)
static

Definition at line 91 of file atrac1.c.

Referenced by at1_imdct_block().

◆ at1_imdct_block()

static int at1_imdct_block ( AT1SUCtx su,
AT1Ctx q 
)
static

Definition at line 106 of file atrac1.c.

Referenced by atrac1_decode_frame().

◆ at1_parse_bsm()

static int at1_parse_bsm ( GetBitContext gb,
int  log2_block_cnt[AT1_QMF_BANDS] 
)
static

Parse the block size mode byte.

Definition at line 167 of file atrac1.c.

Referenced by atrac1_decode_frame().

◆ at1_unpack_dequant()

static int at1_unpack_dequant ( GetBitContext gb,
AT1SUCtx su,
float  spec[AT1_SU_SAMPLES] 
)
static

< the word length indexes for each BFU

< the scalefactor indexes for each BFU

Definition at line 190 of file atrac1.c.

Referenced by atrac1_decode_frame().

◆ at1_subband_synthesis()

static void at1_subband_synthesis ( AT1Ctx q,
AT1SUCtx su,
float *  pOut 
)
static

Definition at line 255 of file atrac1.c.

Referenced by atrac1_decode_frame().

◆ atrac1_decode_frame()

static int atrac1_decode_frame ( AVCodecContext avctx,
void data,
int got_frame_ptr,
AVPacket avpkt 
)
static

Definition at line 272 of file atrac1.c.

◆ atrac1_decode_end()

static av_cold int atrac1_decode_end ( AVCodecContext avctx)
static

Definition at line 319 of file atrac1.c.

Referenced by atrac1_decode_init().

◆ atrac1_decode_init()

static av_cold int atrac1_decode_init ( AVCodecContext avctx)
static

Definition at line 333 of file atrac1.c.

Variable Documentation

◆ samples_per_band

const uint16_t samples_per_band[3] = {128, 128, 256}
static

size of the transform in samples in the long mode for each QMF band

Definition at line 87 of file atrac1.c.

Referenced by at1_imdct_block().

◆ mdct_long_nbits

const uint8_t mdct_long_nbits[3] = {7, 7, 8}
static

Definition at line 88 of file atrac1.c.

Referenced by at1_imdct_block().

◆ ff_atrac1_decoder

AVCodec ff_atrac1_decoder
Initial value:
= {
.name = "atrac1",
.long_name = NULL_IF_CONFIG_SMALL("ATRAC1 (Adaptive TRansform Acoustic Coding)"),
.priv_data_size = sizeof(AT1Ctx),
.capabilities = AV_CODEC_CAP_DR1,
}
float, planar
Definition: samplefmt.h:69
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int atrac1_decode_init(AVCodecContext *avctx)
Definition: atrac1.c:333
static av_cold int atrac1_decode_end(AVCodecContext *avctx)
Definition: atrac1.c:319
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
The atrac1 context, holds all needed parameters for decoding.
Definition: atrac1.c:74
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
static int atrac1_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: atrac1.c:272
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:701
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 380 of file atrac1.c.