apedec.c File Reference

Monkey's Audio lossless audio decoder. More...

#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "dsputil.h"
#include "bytestream.h"
#include "internal.h"
#include "get_bits.h"
#include "unary.h"
Include dependency graph for apedec.c:

Go to the source code of this file.

Data Structures

struct  APEFilter
 Filters applied to the decoded data. More...
 
struct  APERice
 
struct  APERangecoder
 
struct  APEPredictor
 Filter histories. More...
 
struct  APEContext
 Decoder context. More...
 

Macros

#define MAX_CHANNELS   2
 
#define MAX_BYTESPERSAMPLE   3
 
#define APE_FRAMECODE_MONO_SILENCE   1
 
#define APE_FRAMECODE_STEREO_SILENCE   3
 
#define APE_FRAMECODE_PSEUDO_STEREO   4
 
#define HISTORY_SIZE   512
 
#define PREDICTOR_ORDER   8
 
#define PREDICTOR_SIZE   50
 Total size of all predictor histories. More...
 
#define YDELAYA   (18 + PREDICTOR_ORDER*4)
 
#define YDELAYB   (18 + PREDICTOR_ORDER*3)
 
#define XDELAYA   (18 + PREDICTOR_ORDER*2)
 
#define XDELAYB   (18 + PREDICTOR_ORDER)
 
#define YADAPTCOEFFSA   18
 
#define XADAPTCOEFFSA   14
 
#define YADAPTCOEFFSB   10
 
#define XADAPTCOEFFSB   5
 
#define APE_FILTER_LEVELS   3
 
#define OFFSET(x)   offsetof(APEContext, x)
 
#define PAR   (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
 

Typedefs

typedef struct APEFilter APEFilter
 Filters applied to the decoded data. More...
 
typedef struct APERice APERice
 
typedef struct APERangecoder APERangecoder
 
typedef struct APEPredictor APEPredictor
 Filter histories. More...
 
typedef struct APEContext APEContext
 Decoder context. More...
 

Enumerations

enum  APECompressionLevel {
  COMPRESSION_LEVEL_FAST = 1000, COMPRESSION_LEVEL_NORMAL = 2000, COMPRESSION_LEVEL_HIGH = 3000, COMPRESSION_LEVEL_EXTRA_HIGH = 4000,
  COMPRESSION_LEVEL_INSANE = 5000
}
 Possible compression levels. More...
 

Functions

static void ape_apply_filters (APEContext *ctx, int32_t *decoded0, int32_t *decoded1, int count)
 
static void entropy_decode_mono_0000 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_stereo_0000 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_mono_3860 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_stereo_3860 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_mono_3900 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_stereo_3900 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_stereo_3930 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_mono_3990 (APEContext *ctx, int blockstodecode)
 
static void entropy_decode_stereo_3990 (APEContext *ctx, int blockstodecode)
 
static void predictor_decode_mono_3800 (APEContext *ctx, int count)
 
static void predictor_decode_stereo_3800 (APEContext *ctx, int count)
 
static void predictor_decode_mono_3930 (APEContext *ctx, int count)
 
static void predictor_decode_stereo_3930 (APEContext *ctx, int count)
 
static void predictor_decode_mono_3950 (APEContext *ctx, int count)
 
static void predictor_decode_stereo_3950 (APEContext *ctx, int count)
 
static av_cold int ape_decode_close (AVCodecContext *avctx)
 
static av_cold int ape_decode_init (AVCodecContext *avctx)
 
static void update_rice (APERice *rice, unsigned int x)
 
static int get_rice_ook (GetBitContext *gb, int k)
 
static int ape_decode_value_3860 (APEContext *ctx, GetBitContext *gb, APERice *rice)
 
static int ape_decode_value_3900 (APEContext *ctx, APERice *rice)
 
static int ape_decode_value_3990 (APEContext *ctx, APERice *rice)
 
static void decode_array_0000 (APEContext *ctx, GetBitContext *gb, int32_t *out, APERice *rice, int blockstodecode)
 
static int init_entropy_decoder (APEContext *ctx)
 
static void init_predictor_decoder (APEContext *ctx)
 
static int APESIGN (int32_t x)
 Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero) More...
 
static av_always_inline int filter_fast_3320 (APEPredictor *p, const int decoded, const int filter, const int delayA)
 
static av_always_inline int filter_3800 (APEPredictor *p, const int decoded, const int filter, const int delayA, const int delayB, const int start, const int shift)
 
static void long_filter_high_3800 (int32_t *buffer, int order, int shift, int32_t *coeffs, int32_t *delay, int length)
 
static void long_filter_ehigh_3830 (int32_t *buffer, int length)
 
static av_always_inline int predictor_update_3930 (APEPredictor *p, const int decoded, const int filter, const int delayA)
 
static av_always_inline int predictor_update_filter (APEPredictor *p, const int decoded, const int filter, const int delayA, const int delayB, const int adaptA, const int adaptB)
 
static void do_init_filter (APEFilter *f, int16_t *buf, int order)
 
static void init_filter (APEContext *ctx, APEFilter *f, int16_t *buf, int order)
 
static void do_apply_filter (APEContext *ctx, int version, APEFilter *f, int32_t *data, int count, int order, int fracbits)
 
static void apply_filter (APEContext *ctx, APEFilter *f, int32_t *data0, int32_t *data1, int count, int order, int fracbits)
 
static int init_frame_decoder (APEContext *ctx)
 
static void ape_unpack_mono (APEContext *ctx, int count)
 
static void ape_unpack_stereo (APEContext *ctx, int count)
 
static int ape_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 
static void ape_flush (AVCodecContext *avctx)
 

Variables

static const uint16_t ape_filter_orders [5][APE_FILTER_LEVELS]
 Filter orders depending on compression level. More...
 
static const uint8_t ape_filter_fracbits [5][APE_FILTER_LEVELS]
 Filter fraction bits depending on compression level. More...
 
static const int32_t initial_coeffs_fast_3320 [1]
 
static const int32_t initial_coeffs_a_3800 [3]
 
static const int32_t initial_coeffs_b_3800 [2]
 
static const int32_t initial_coeffs_3930 [4]
 
static const AVOption options []
 
static const AVClass ape_decoder_class
 
AVCodec ff_ape_decoder
 

APE range decoding functions

#define CODE_BITS   32
 
#define TOP_VALUE   ((unsigned int)1 << (CODE_BITS-1))
 
#define SHIFT_BITS   (CODE_BITS - 9)
 
#define EXTRA_BITS   ((CODE_BITS-2) % 8 + 1)
 
#define BOTTOM_VALUE   (TOP_VALUE >> 8)
 
#define MODEL_ELEMENTS   64
 
static const uint16_t counts_3970 [22]
 Fixed probabilities for symbols in Monkey Audio version 3.97. More...
 
static const uint16_t counts_diff_3970 [21]
 Probability ranges for symbols in Monkey Audio version 3.97. More...
 
static const uint16_t counts_3980 [22]
 Fixed probabilities for symbols in Monkey Audio version 3.98. More...
 
static const uint16_t counts_diff_3980 [21]
 Probability ranges for symbols in Monkey Audio version 3.98. More...
 
static void range_start_decoding (APEContext *ctx)
 Start the decoder. More...
 
static void range_dec_normalize (APEContext *ctx)
 Perform normalization. More...
 
static int range_decode_culfreq (APEContext *ctx, int tot_f)
 Calculate culmulative frequency for next symbol. More...
 
static int range_decode_culshift (APEContext *ctx, int shift)
 Decode value with given size in bits. More...
 
static void range_decode_update (APEContext *ctx, int sy_f, int lt_f)
 Update decoding state. More...
 
static int range_decode_bits (APEContext *ctx, int n)
 Decode n bits (n <= 16) without modelling. More...
 
static int range_get_symbol (APEContext *ctx, const uint16_t counts[], const uint16_t counts_diff[])
 Decode symbol. More...
 

Detailed Description

Monkey's Audio lossless audio decoder.

Definition in file apedec.c.

Macro Definition Documentation

#define APE_FILTER_LEVELS   3

Definition at line 73 of file apedec.c.

Referenced by ape_apply_filters(), ape_decode_close(), ape_decode_init(), and init_frame_decoder().

#define APE_FRAMECODE_MONO_SILENCE   1

Definition at line 41 of file apedec.c.

#define APE_FRAMECODE_PSEUDO_STEREO   4

Definition at line 43 of file apedec.c.

Referenced by ape_decode_frame().

#define APE_FRAMECODE_STEREO_SILENCE   3

Definition at line 42 of file apedec.c.

Referenced by ape_unpack_mono(), and ape_unpack_stereo().

#define BOTTOM_VALUE   (TOP_VALUE >> 8)

Definition at line 312 of file apedec.c.

Referenced by range_dec_normalize().

#define CODE_BITS   32

Definition at line 308 of file apedec.c.

#define EXTRA_BITS   ((CODE_BITS-2) % 8 + 1)

Definition at line 311 of file apedec.c.

Referenced by range_start_decoding().

#define MAX_BYTESPERSAMPLE   3

Definition at line 39 of file apedec.c.

#define MAX_CHANNELS   2

Definition at line 38 of file apedec.c.

#define MODEL_ELEMENTS   64

Definition at line 385 of file apedec.c.

Referenced by ape_decode_value_3900(), and ape_decode_value_3990().

#define OFFSET (   x)    offsetof(APEContext, x)

Definition at line 1548 of file apedec.c.

Definition at line 1549 of file apedec.c.

#define PREDICTOR_ORDER   8

Definition at line 46 of file apedec.c.

#define SHIFT_BITS   (CODE_BITS - 9)

Definition at line 310 of file apedec.c.

#define TOP_VALUE   ((unsigned int)1 << (CODE_BITS-1))

Definition at line 309 of file apedec.c.

#define XADAPTCOEFFSA   14

Definition at line 56 of file apedec.c.

Referenced by predictor_decode_stereo_3950().

#define XADAPTCOEFFSB   5

Definition at line 58 of file apedec.c.

Referenced by predictor_decode_stereo_3950().

#define XDELAYA   (18 + PREDICTOR_ORDER*2)
#define XDELAYB   (18 + PREDICTOR_ORDER)

Definition at line 53 of file apedec.c.

Referenced by predictor_decode_stereo_3800(), and predictor_decode_stereo_3950().

#define YADAPTCOEFFSA   18

Definition at line 55 of file apedec.c.

Referenced by predictor_decode_mono_3950(), and predictor_decode_stereo_3950().

#define YADAPTCOEFFSB   10

Definition at line 57 of file apedec.c.

Referenced by predictor_decode_stereo_3950().

#define YDELAYB   (18 + PREDICTOR_ORDER*3)

Typedef Documentation

typedef struct APEContext APEContext

Decoder context.

typedef struct APEFilter APEFilter

Filters applied to the decoded data.

typedef struct APEPredictor APEPredictor

Filter histories.

typedef struct APERangecoder APERangecoder
typedef struct APERice APERice

Enumeration Type Documentation

Possible compression levels.

Enumerator
COMPRESSION_LEVEL_FAST 
COMPRESSION_LEVEL_NORMAL 
COMPRESSION_LEVEL_HIGH 
COMPRESSION_LEVEL_EXTRA_HIGH 
COMPRESSION_LEVEL_INSANE 

Definition at line 64 of file apedec.c.

Function Documentation

static void ape_apply_filters ( APEContext ctx,
int32_t decoded0,
int32_t decoded1,
int  count 
)
static
static av_cold int ape_decode_close ( AVCodecContext avctx)
static

Definition at line 198 of file apedec.c.

Referenced by ape_decode_init().

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

Definition at line 1395 of file apedec.c.

static av_cold int ape_decode_init ( AVCodecContext avctx)
static

Definition at line 213 of file apedec.c.

static int ape_decode_value_3860 ( APEContext ctx,
GetBitContext gb,
APERice rice 
)
inlinestatic

Definition at line 476 of file apedec.c.

Referenced by entropy_decode_mono_3860(), and entropy_decode_stereo_3860().

static int ape_decode_value_3900 ( APEContext ctx,
APERice rice 
)
inlinestatic
static int ape_decode_value_3990 ( APEContext ctx,
APERice rice 
)
inlinestatic

Definition at line 541 of file apedec.c.

Referenced by entropy_decode_mono_3990(), and entropy_decode_stereo_3990().

static void ape_flush ( AVCodecContext avctx)
static

Definition at line 1542 of file apedec.c.

static void ape_unpack_mono ( APEContext ctx,
int  count 
)
static

Definition at line 1349 of file apedec.c.

Referenced by ape_decode_frame().

static void ape_unpack_stereo ( APEContext ctx,
int  count 
)
static

Definition at line 1368 of file apedec.c.

Referenced by ape_decode_frame().

static int APESIGN ( int32_t  x)
inlinestatic

Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero)

Definition at line 813 of file apedec.c.

Referenced by do_apply_filter(), filter_3800(), long_filter_ehigh_3830(), long_filter_high_3800(), predictor_decode_mono_3950(), predictor_update_3930(), and predictor_update_filter().

static void apply_filter ( APEContext ctx,
APEFilter f,
int32_t data0,
int32_t data1,
int  count,
int  order,
int  fracbits 
)
static

Definition at line 1310 of file apedec.c.

Referenced by ape_apply_filters().

static void decode_array_0000 ( APEContext ctx,
GetBitContext gb,
int32_t out,
APERice rice,
int  blockstodecode 
)
static

Definition at line 587 of file apedec.c.

Referenced by entropy_decode_mono_0000(), and entropy_decode_stereo_0000().

static void do_apply_filter ( APEContext ctx,
int  version,
APEFilter f,
int32_t data,
int  count,
int  order,
int  fracbits 
)
static

Definition at line 1257 of file apedec.c.

Referenced by apply_filter().

static void do_init_filter ( APEFilter f,
int16_t *  buf,
int  order 
)
static

Definition at line 1239 of file apedec.c.

Referenced by init_filter().

static void entropy_decode_mono_0000 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 631 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_mono_3860 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 645 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_mono_3900 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 665 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_mono_3990 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 700 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_stereo_0000 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 637 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_stereo_3860 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 653 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_stereo_3900 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 673 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_stereo_3930 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 689 of file apedec.c.

Referenced by ape_decode_init().

static void entropy_decode_stereo_3990 ( APEContext ctx,
int  blockstodecode 
)
static

Definition at line 708 of file apedec.c.

Referenced by ape_decode_init().

static av_always_inline int filter_3800 ( APEPredictor p,
const int  decoded,
const int  filter,
const int  delayA,
const int  delayB,
const int  start,
const int  shift 
)
static

Definition at line 843 of file apedec.c.

Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().

static av_always_inline int filter_fast_3320 ( APEPredictor p,
const int  decoded,
const int  filter,
const int  delayA 
)
static

Definition at line 817 of file apedec.c.

Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().

static int get_rice_ook ( GetBitContext gb,
int  k 
)
inlinestatic

Definition at line 464 of file apedec.c.

Referenced by decode_array_0000().

static int init_entropy_decoder ( APEContext ctx)
static

Definition at line 719 of file apedec.c.

Referenced by init_frame_decoder().

static void init_filter ( APEContext ctx,
APEFilter f,
int16_t *  buf,
int  order 
)
static

Definition at line 1251 of file apedec.c.

Referenced by init_frame_decoder().

static int init_frame_decoder ( APEContext ctx)
static

Definition at line 1333 of file apedec.c.

Referenced by ape_decode_frame().

static void init_predictor_decoder ( APEContext ctx)
static

Definition at line 772 of file apedec.c.

Referenced by init_frame_decoder().

static void long_filter_ehigh_3830 ( int32_t buffer,
int  length 
)
static

Definition at line 911 of file apedec.c.

Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().

static void long_filter_high_3800 ( int32_t buffer,
int  order,
int  shift,
int32_t coeffs,
int32_t delay,
int  length 
)
static

Definition at line 888 of file apedec.c.

Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().

static void predictor_decode_mono_3800 ( APEContext ctx,
int  count 
)
static

Definition at line 989 of file apedec.c.

Referenced by ape_decode_init().

static void predictor_decode_mono_3930 ( APEContext ctx,
int  count 
)
static

Definition at line 1093 of file apedec.c.

Referenced by ape_decode_init().

static void predictor_decode_mono_3950 ( APEContext ctx,
int  count 
)
static

Definition at line 1191 of file apedec.c.

Referenced by ape_decode_init().

static void predictor_decode_stereo_3800 ( APEContext ctx,
int  count 
)
static

Definition at line 933 of file apedec.c.

Referenced by ape_decode_init().

static void predictor_decode_stereo_3930 ( APEContext ctx,
int  count 
)
static

Definition at line 1065 of file apedec.c.

Referenced by ape_decode_init().

static void predictor_decode_stereo_3950 ( APEContext ctx,
int  count 
)
static

Definition at line 1162 of file apedec.c.

Referenced by ape_decode_init().

static av_always_inline int predictor_update_3930 ( APEPredictor p,
const int  decoded,
const int  filter,
const int  delayA 
)
static

Definition at line 1035 of file apedec.c.

Referenced by predictor_decode_mono_3930(), and predictor_decode_stereo_3930().

static av_always_inline int predictor_update_filter ( APEPredictor p,
const int  decoded,
const int  filter,
const int  delayA,
const int  delayB,
const int  adaptA,
const int  adaptB 
)
static

Definition at line 1115 of file apedec.c.

Referenced by predictor_decode_stereo_3950().

static void range_dec_normalize ( APEContext ctx)
inlinestatic

Perform normalization.

Definition at line 323 of file apedec.c.

Referenced by entropy_decode_stereo_3900(), range_decode_culfreq(), and range_decode_culshift().

static int range_decode_bits ( APEContext ctx,
int  n 
)
inlinestatic

Decode n bits (n <= 16) without modelling.

Definition at line 377 of file apedec.c.

Referenced by ape_decode_value_3900(), and ape_decode_value_3990().

static int range_decode_culfreq ( APEContext ctx,
int  tot_f 
)
inlinestatic

Calculate culmulative frequency for next symbol.

Does NO update!

Parameters
ctxdecoder context
tot_fis the total frequency or (code_value)1<<shift
Returns
the culmulative frequency

Definition at line 344 of file apedec.c.

Referenced by ape_decode_value_3990().

static int range_decode_culshift ( APEContext ctx,
int  shift 
)
inlinestatic

Decode value with given size in bits.

Parameters
ctxdecoder context
shiftnumber of bits to decode

Definition at line 356 of file apedec.c.

Referenced by range_decode_bits(), and range_get_symbol().

static void range_decode_update ( APEContext ctx,
int  sy_f,
int  lt_f 
)
inlinestatic

Update decoding state.

Parameters
ctxdecoder context
sy_fthe interval length (frequency of the symbol)
lt_fthe lower end (frequency sum of < symbols)

Definition at line 370 of file apedec.c.

Referenced by ape_decode_value_3990(), range_decode_bits(), and range_get_symbol().

static int range_get_symbol ( APEContext ctx,
const uint16_t  counts[],
const uint16_t  counts_diff[] 
)
inlinestatic

Decode symbol.

Parameters
ctxdecoder context
countsprobability range start position
counts_diffprobability range widths

Definition at line 429 of file apedec.c.

Referenced by ape_decode_value_3900(), and ape_decode_value_3990().

static void range_start_decoding ( APEContext ctx)
inlinestatic

Start the decoder.

Definition at line 315 of file apedec.c.

Referenced by entropy_decode_stereo_3900(), and init_entropy_decoder().

static void update_rice ( APERice rice,
unsigned int  x 
)
inlinestatic

Definition at line 453 of file apedec.c.

Referenced by ape_decode_value_3900(), and ape_decode_value_3990().

Variable Documentation

const AVClass ape_decoder_class
static
Initial value:
= {
.class_name = "APE decoder",
.item_name = av_default_item_name,
.option = options,
}
av_default_item_name
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
static const AVOption options[]
Definition: apedec.c:1550

Definition at line 1556 of file apedec.c.

const uint8_t ape_filter_fracbits[5][APE_FILTER_LEVELS]
static
Initial value:
= {
{ 0, 0, 0 },
{ 11, 0, 0 },
{ 11, 0, 0 },
{ 10, 13, 0 },
{ 11, 13, 15 }
}

Filter fraction bits depending on compression level.

Definition at line 85 of file apedec.c.

Referenced by ape_apply_filters().

const uint16_t ape_filter_orders[5][APE_FILTER_LEVELS]
static
Initial value:
= {
{ 0, 0, 0 },
{ 16, 0, 0 },
{ 64, 0, 0 },
{ 32, 256, 0 },
{ 16, 256, 1280 }
}

Filter orders depending on compression level.

Definition at line 76 of file apedec.c.

Referenced by ape_apply_filters(), ape_decode_init(), and init_frame_decoder().

const uint16_t counts_3970[22]
static
Initial value:
= {
0, 14824, 28224, 39348, 47855, 53994, 58171, 60926,
62682, 63786, 64463, 64878, 65126, 65276, 65365, 65419,
65450, 65469, 65480, 65487, 65491, 65493,
}

Fixed probabilities for symbols in Monkey Audio version 3.97.

Definition at line 390 of file apedec.c.

Referenced by ape_decode_value_3900().

const uint16_t counts_3980[22]
static
Initial value:
= {
0, 19578, 36160, 48417, 56323, 60899, 63265, 64435,
64971, 65232, 65351, 65416, 65447, 65466, 65476, 65482,
65485, 65488, 65490, 65491, 65492, 65493,
}

Fixed probabilities for symbols in Monkey Audio version 3.98.

Definition at line 408 of file apedec.c.

Referenced by ape_decode_value_3990().

const uint16_t counts_diff_3970[21]
static
Initial value:
= {
14824, 13400, 11124, 8507, 6139, 4177, 2755, 1756,
1104, 677, 415, 248, 150, 89, 54, 31,
19, 11, 7, 4, 2,
}

Probability ranges for symbols in Monkey Audio version 3.97.

Definition at line 399 of file apedec.c.

Referenced by ape_decode_value_3900().

const uint16_t counts_diff_3980[21]
static
Initial value:
= {
19578, 16582, 12257, 7906, 4576, 2366, 1170, 536,
261, 119, 65, 31, 19, 10, 6, 3,
3, 2, 1, 1, 1,
}

Probability ranges for symbols in Monkey Audio version 3.98.

Definition at line 417 of file apedec.c.

Referenced by ape_decode_value_3990().

AVCodec ff_ape_decoder
Initial value:
= {
.name = "ape",
.priv_data_size = sizeof(APEContext),
.long_name = NULL_IF_CONFIG_SMALL("Monkey's Audio"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P,
.priv_class = &ape_decoder_class,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int ape_decode_init(AVCodecContext *avctx)
Definition: apedec.c:213
static void ape_flush(AVCodecContext *avctx)
Definition: apedec.c:1542
static int ape_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: apedec.c:1395
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
signed 32 bits, planar
Definition: samplefmt.h:59
static av_cold int ape_decode_close(AVCodecContext *avctx)
Definition: apedec.c:198
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
struct APEContext APEContext
Decoder context.
static void flush(AVCodecContext *avctx)
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
#define CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time...
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
static const AVClass ape_decoder_class
Definition: apedec.c:1556
unsigned 8 bits, planar
Definition: samplefmt.h:57
signed 16 bits, planar
Definition: samplefmt.h:58
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868

Definition at line 1563 of file apedec.c.

const int32_t initial_coeffs_3930[4]
static
Initial value:
= {
360, 317, -109, 98
}

Definition at line 768 of file apedec.c.

Referenced by init_predictor_decoder().

const int32_t initial_coeffs_a_3800[3]
static
Initial value:
= {
64, 115, 64,
}

Definition at line 760 of file apedec.c.

Referenced by init_predictor_decoder().

const int32_t initial_coeffs_b_3800[2]
static
Initial value:
= {
740, 0
}

Definition at line 764 of file apedec.c.

Referenced by init_predictor_decoder().

const int32_t initial_coeffs_fast_3320[1]
static
Initial value:
= {
375,
}

Definition at line 756 of file apedec.c.

Referenced by init_predictor_decoder().

const AVOption options[]
static
Initial value:
= {
{ "max_samples", "maximum number of samples decoded per call", OFFSET(blocks_per_loop), AV_OPT_TYPE_INT, { .i64 = 4608 }, 1, INT_MAX, PAR, "max_samples" },
{ "all", "no maximum. decode all samples for each packet at once", 0, AV_OPT_TYPE_CONST, { .i64 = INT_MAX }, INT_MIN, INT_MAX, PAR, "max_samples" },
{ NULL},
}
#define OFFSET(x)
Definition: apedec.c:1548
NULL
Definition: eval.c:55
#define PAR
Definition: apedec.c:1549

Definition at line 1550 of file apedec.c.