FFmpeg
Loading...
Searching...
No Matches
alac.c File Reference

ALAC (Apple Lossless Audio Codec) decoder. More...

#include <inttypes.h>
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "get_bits.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "thread.h"
#include "unary.h"
#include "mathops.h"
#include "alac_data.h"
#include "alacdsp.h"

Go to the source code of this file.

Data Structures

struct  ALACContext
 

Macros

#define ALAC_EXTRADATA_SIZE   36
 

Functions

static unsigned int decode_scalar (GetBitContext *gb, int k, int bps)
 
static int rice_decompress (ALACContext *alac, int32_t *output_buffer, int nb_samples, int bps, int rice_history_mult)
 
static int sign_only (int v)
 
static void lpc_prediction (int32_t *error_buffer, uint32_t *buffer_out, int nb_samples, int bps, int16_t *lpc_coefs, int lpc_order, int lpc_quant)
 
static int decode_element (AVCodecContext *avctx, AVFrame *frame, int ch_index, int channels)
 
static int alac_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
 
static av_cold int alac_decode_close (AVCodecContext *avctx)
 
static int allocate_buffers (ALACContext *alac)
 
static int alac_set_info (ALACContext *alac)
 
static av_cold int alac_decode_init (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass alac_class
 
const FFCodec ff_alac_decoder
 

Detailed Description

ALAC (Apple Lossless Audio Codec) decoder.

Author
2005 David Hammerton
See also
http://crazney.net/programs/itunes/alac.html

Note: This decoder expects a 36-byte QuickTime atom to be passed through the extradata[_size] fields. This atom is tacked onto the end of an 'alac' stsd atom and has the following format:

32 bits atom size 32 bits tag ("alac") 32 bits tag version (0) 32 bits samples per frame (used when not set explicitly in the frames) 8 bits compatible version (0) 8 bits sample size 8 bits history mult (40) 8 bits initial history (10) 8 bits rice param limit (14) 8 bits channels 16 bits maxRun (255) 32 bits max coded frame size (0 means unknown) 32 bits average bitrate (0 means unknown) 32 bits samplerate

Definition in file alac.c.

Macro Definition Documentation

◆ ALAC_EXTRADATA_SIZE

#define ALAC_EXTRADATA_SIZE   36

Definition at line 63 of file alac.c.

Referenced by alac_decode_init(), alac_encode_init(), and mov_read_wave().

Function Documentation

◆ decode_scalar()

static unsigned int decode_scalar ( GetBitContext * gb,
int k,
int bps )
inlinestatic

Definition at line 91 of file alac.c.

Referenced by rice_decompress().

◆ rice_decompress()

static int rice_decompress ( ALACContext * alac,
int32_t * output_buffer,
int nb_samples,
int bps,
int rice_history_mult )
static

Definition at line 113 of file alac.c.

Referenced by decode_element().

◆ sign_only()

static int sign_only ( int v)
inlinestatic

Definition at line 171 of file alac.c.

Referenced by lpc_prediction().

◆ lpc_prediction()

static void lpc_prediction ( int32_t * error_buffer,
uint32_t * buffer_out,
int nb_samples,
int bps,
int16_t * lpc_coefs,
int lpc_order,
int lpc_quant )
static

Definition at line 176 of file alac.c.

Referenced by decode_element().

◆ decode_element()

static int decode_element ( AVCodecContext * avctx,
AVFrame * frame,
int ch_index,
int channels )
static

Definition at line 239 of file alac.c.

Referenced by alac_decode_frame().

◆ alac_decode_frame()

static int alac_decode_frame ( AVCodecContext * avctx,
AVFrame * frame,
int * got_frame_ptr,
AVPacket * avpkt )
static

Definition at line 421 of file alac.c.

◆ alac_decode_close()

static av_cold int alac_decode_close ( AVCodecContext * avctx)
static

Definition at line 479 of file alac.c.

◆ allocate_buffers()

static int allocate_buffers ( ALACContext * alac)
static

Definition at line 494 of file alac.c.

Referenced by alac_decode_init().

◆ alac_set_info()

static int alac_set_info ( ALACContext * alac)
static

Definition at line 522 of file alac.c.

Referenced by alac_decode_init().

◆ alac_decode_init()

static av_cold int alac_decode_init ( AVCodecContext * avctx)
static

Definition at line 553 of file alac.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "extra_bits_bug", "Force non-standard decoding process",
0x42 , AV_OPT_TYPE_BOOL, { .i64 = 0 },
{ NULL },
}
#define NULL
Definition coverity.c:32
#define AV_OPT_FLAG_AUDIO_PARAM
Definition opt.h:356
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition opt.h:355
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326

Definition at line 606 of file alac.c.

◆ alac_class

const AVClass alac_class
static
Initial value:
= {
.class_name = "alac",
.item_name = av_default_item_name,
.option = options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85

Definition at line 613 of file alac.c.

◆ ff_alac_decoder

const FFCodec ff_alac_decoder
Initial value:
= {
.p.name = "alac",
CODEC_LONG_NAME("ALAC (Apple Lossless Audio Codec)"),
.p.type = AVMEDIA_TYPE_AUDIO,
.priv_data_size = sizeof(ALACContext),
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &alac_class
}
static av_cold int alac_decode_close(AVCodecContext *avctx)
Definition alac.c:479
static int alac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition alac.c:421
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition alac.c:553
static const AVClass alac_class
Definition alac.c:613
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition codec.h:94
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition codec.h:98
@ AV_CODEC_ID_ALAC
Definition codec_id.h:469
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201

Definition at line 620 of file alac.c.