Libav
|
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"
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. | |
#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) |
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) | |
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. | |
static const uint8_t | ape_filter_fracbits [5][APE_FILTER_LEVELS] |
Filter fraction bits depending on compression level. | |
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. | |
static const uint16_t | counts_diff_3970 [21] |
Probability ranges for symbols in Monkey Audio version 3.97. | |
static const uint16_t | counts_3980 [22] |
Fixed probabilities for symbols in Monkey Audio version 3.98. | |
static const uint16_t | counts_diff_3980 [21] |
Probability ranges for symbols in Monkey Audio version 3.98. | |
static void | range_start_decoding (APEContext *ctx) |
Start the decoder. | |
static void | range_dec_normalize (APEContext *ctx) |
Perform normalization. | |
static int | range_decode_culfreq (APEContext *ctx, int tot_f) |
Calculate culmulative frequency for next symbol. | |
static int | range_decode_culshift (APEContext *ctx, int shift) |
Decode value with given size in bits. | |
static void | range_decode_update (APEContext *ctx, int sy_f, int lt_f) |
Update decoding state. | |
static int | range_decode_bits (APEContext *ctx, int n) |
Decode n bits (n <= 16) without modelling. | |
static int | range_get_symbol (APEContext *ctx, const uint16_t counts[], const uint16_t counts_diff[]) |
Decode symbol. |
Monkey's Audio lossless audio decoder.
Definition in file apedec.c.
#define APE_FRAMECODE_STEREO_SILENCE 3 |
Definition at line 42 of file apedec.c.
Referenced by ape_unpack_mono(), and ape_unpack_stereo().
#define APE_FRAMECODE_PSEUDO_STEREO 4 |
Definition at line 43 of file apedec.c.
Referenced by ape_decode_frame().
#define HISTORY_SIZE 512 |
Definition at line 45 of file apedec.c.
Referenced by ape_decode_init(), do_apply_filter(), init_filter(), predictor_decode_mono_3800(), predictor_decode_mono_3930(), predictor_decode_mono_3950(), predictor_decode_stereo_3800(), predictor_decode_stereo_3930(), and predictor_decode_stereo_3950().
#define PREDICTOR_SIZE 50 |
Total size of all predictor histories.
Definition at line 48 of file apedec.c.
Referenced by init_predictor_decoder(), predictor_decode_mono_3800(), predictor_decode_mono_3930(), predictor_decode_mono_3950(), predictor_decode_stereo_3800(), predictor_decode_stereo_3930(), and predictor_decode_stereo_3950().
#define YDELAYA (18 + PREDICTOR_ORDER*4) |
Definition at line 50 of file apedec.c.
Referenced by predictor_decode_mono_3800(), predictor_decode_mono_3930(), predictor_decode_mono_3950(), predictor_decode_stereo_3800(), predictor_decode_stereo_3930(), and predictor_decode_stereo_3950().
#define YDELAYB (18 + PREDICTOR_ORDER*3) |
Definition at line 51 of file apedec.c.
Referenced by predictor_decode_mono_3800(), predictor_decode_stereo_3800(), and predictor_decode_stereo_3950().
#define XDELAYA (18 + PREDICTOR_ORDER*2) |
Definition at line 52 of file apedec.c.
Referenced by predictor_decode_stereo_3800(), predictor_decode_stereo_3930(), and predictor_decode_stereo_3950().
#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 XADAPTCOEFFSA 14 |
Definition at line 56 of file apedec.c.
Referenced by predictor_decode_stereo_3950().
#define YADAPTCOEFFSB 10 |
Definition at line 57 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 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 EXTRA_BITS ((CODE_BITS-2) % 8 + 1) |
Definition at line 310 of file apedec.c.
Referenced by range_start_decoding().
#define BOTTOM_VALUE (TOP_VALUE >> 8) |
Definition at line 311 of file apedec.c.
Referenced by range_dec_normalize().
#define MODEL_ELEMENTS 64 |
Definition at line 384 of file apedec.c.
Referenced by ape_decode_value_3900(), and ape_decode_value_3990().
#define OFFSET | ( | x | ) | offsetof(APEContext, x) |
#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) |
enum APECompressionLevel |
|
static |
Definition at line 1318 of file apedec.c.
Referenced by predictor_decode_mono_3930(), predictor_decode_mono_3950(), predictor_decode_stereo_3930(), and predictor_decode_stereo_3950().
|
static |
Definition at line 630 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 636 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 644 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 652 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 664 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 672 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 688 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 699 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 707 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 988 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 932 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 1092 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 1064 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 1190 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 1161 of file apedec.c.
Referenced by ape_decode_init().
|
static |
Definition at line 198 of file apedec.c.
Referenced by ape_decode_init().
|
static |
|
inlinestatic |
Start the decoder.
Definition at line 314 of file apedec.c.
Referenced by entropy_decode_stereo_3900(), and init_entropy_decoder().
|
inlinestatic |
Perform normalization.
Definition at line 322 of file apedec.c.
Referenced by entropy_decode_stereo_3900(), range_decode_culfreq(), and range_decode_culshift().
|
inlinestatic |
Calculate culmulative frequency for next symbol.
Does NO update!
ctx | decoder context |
tot_f | is the total frequency or (code_value)1<<shift |
Definition at line 343 of file apedec.c.
Referenced by ape_decode_value_3990().
|
inlinestatic |
Decode value with given size in bits.
ctx | decoder context |
shift | number of bits to decode |
Definition at line 355 of file apedec.c.
Referenced by range_decode_bits(), and range_get_symbol().
|
inlinestatic |
Update decoding state.
ctx | decoder context |
sy_f | the interval length (frequency of the symbol) |
lt_f | the lower end (frequency sum of < symbols) |
Definition at line 369 of file apedec.c.
Referenced by ape_decode_value_3990(), range_decode_bits(), and range_get_symbol().
|
inlinestatic |
Decode n bits (n <= 16) without modelling.
Definition at line 376 of file apedec.c.
Referenced by ape_decode_value_3900(), and ape_decode_value_3990().
|
inlinestatic |
Decode symbol.
ctx | decoder context |
counts | probability range start position |
counts_diff | probability range widths |
Definition at line 428 of file apedec.c.
Referenced by ape_decode_value_3900(), and ape_decode_value_3990().
Definition at line 452 of file apedec.c.
Referenced by ape_decode_value_3900(), and ape_decode_value_3990().
|
inlinestatic |
Definition at line 463 of file apedec.c.
Referenced by decode_array_0000().
|
inlinestatic |
Definition at line 475 of file apedec.c.
Referenced by entropy_decode_mono_3860(), and entropy_decode_stereo_3860().
|
inlinestatic |
Definition at line 507 of file apedec.c.
Referenced by entropy_decode_mono_3900(), entropy_decode_stereo_3900(), and entropy_decode_stereo_3930().
|
inlinestatic |
Definition at line 540 of file apedec.c.
Referenced by entropy_decode_mono_3990(), and entropy_decode_stereo_3990().
|
static |
Definition at line 586 of file apedec.c.
Referenced by entropy_decode_mono_0000(), and entropy_decode_stereo_0000().
|
static |
Definition at line 718 of file apedec.c.
Referenced by init_frame_decoder().
|
static |
Definition at line 771 of file apedec.c.
Referenced by init_frame_decoder().
|
inlinestatic |
Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero)
Definition at line 812 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 |
Definition at line 816 of file apedec.c.
Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().
|
static |
Definition at line 842 of file apedec.c.
Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().
|
static |
Definition at line 887 of file apedec.c.
Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().
Definition at line 910 of file apedec.c.
Referenced by predictor_decode_mono_3800(), and predictor_decode_stereo_3800().
|
static |
Definition at line 1034 of file apedec.c.
Referenced by predictor_decode_mono_3930(), and predictor_decode_stereo_3930().
|
static |
Definition at line 1114 of file apedec.c.
Referenced by predictor_decode_stereo_3950().
Definition at line 1238 of file apedec.c.
Referenced by init_filter().
|
static |
Definition at line 1250 of file apedec.c.
Referenced by init_frame_decoder().
|
static |
Definition at line 1256 of file apedec.c.
Referenced by apply_filter().
|
static |
Definition at line 1309 of file apedec.c.
Referenced by ape_apply_filters().
|
static |
Definition at line 1332 of file apedec.c.
Referenced by ape_decode_frame().
|
static |
Definition at line 1348 of file apedec.c.
Referenced by ape_decode_frame().
|
static |
Definition at line 1367 of file apedec.c.
Referenced by ape_decode_frame().
|
static |
|
static |
|
static |
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().
|
static |
Filter fraction bits depending on compression level.
Definition at line 85 of file apedec.c.
Referenced by ape_apply_filters().
|
static |
Fixed probabilities for symbols in Monkey Audio version 3.97.
Definition at line 389 of file apedec.c.
Referenced by ape_decode_value_3900().
|
static |
Probability ranges for symbols in Monkey Audio version 3.97.
Definition at line 398 of file apedec.c.
Referenced by ape_decode_value_3900().
|
static |
Fixed probabilities for symbols in Monkey Audio version 3.98.
Definition at line 407 of file apedec.c.
Referenced by ape_decode_value_3990().
|
static |
Probability ranges for symbols in Monkey Audio version 3.98.
Definition at line 416 of file apedec.c.
Referenced by ape_decode_value_3990().
|
static |
Definition at line 755 of file apedec.c.
Referenced by init_predictor_decoder().
|
static |
Definition at line 759 of file apedec.c.
Referenced by init_predictor_decoder().
|
static |
Definition at line 763 of file apedec.c.
Referenced by init_predictor_decoder().
|
static |
Definition at line 767 of file apedec.c.
Referenced by init_predictor_decoder().
|
static |
|
static |
AVCodec ff_ape_decoder |