#include "avcodec.h"
#include "dsputil.h"
#include "bitstream.h"
#include "bytestream.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... | |
Defines | |
| #define | ALT_BITSTREAM_READER_LE | 
| #define | BLOCKS_PER_LOOP 4608 | 
| #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 | 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 | 
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 av_cold int | ape_decode_init (AVCodecContext *avctx) | 
| static av_cold int | ape_decode_close (AVCodecContext *avctx) | 
| 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.   | |
| static void | update_rice (APERice *rice, int x) | 
| static int | ape_decode_value (APEContext *ctx, APERice *rice) | 
| static void | entropy_decode (APEContext *ctx, int blockstodecode, int stereo) | 
| static void | 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 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 | predictor_decode_stereo (APEContext *ctx, int count) | 
| static void | predictor_decode_mono (APEContext *ctx, int count) | 
| 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 void | ape_apply_filters (APEContext *ctx, int32_t *decoded0, int32_t *decoded1, int count) | 
| static void | 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 *data_size, const uint8_t *buf, int buf_size) | 
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 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 const int32_t | initial_coeffs [4] | 
| AVCodec | ape_decoder | 
Definition in file apedec.c.
| #define APE_FILTER_LEVELS 3 | 
Definition at line 70 of file apedec.c.
Referenced by ape_apply_filters(), ape_decode_close(), ape_decode_init(), and init_frame_decoder().
| #define APE_FRAMECODE_PSEUDO_STEREO 4 | 
| #define APE_FRAMECODE_STEREO_SILENCE 3 | 
Definition at line 39 of file apedec.c.
Referenced by ape_unpack_mono(), ape_unpack_stereo(), and entropy_decode().
| #define BLOCKS_PER_LOOP 4608 | 
| #define HISTORY_SIZE 512 | 
Definition at line 42 of file apedec.c.
Referenced by ape_decode_init(), do_apply_filter(), init_filter(), predictor_decode_mono(), and predictor_decode_stereo().
| #define PREDICTOR_SIZE 50 | 
Total size of all predictor histories.
Definition at line 45 of file apedec.c.
Referenced by init_predictor_decoder(), predictor_decode_mono(), and predictor_decode_stereo().
| #define XADAPTCOEFFSA 14 | 
| #define XADAPTCOEFFSB 5 | 
| #define XDELAYA (18 + PREDICTOR_ORDER*2) | 
| #define XDELAYB (18 + PREDICTOR_ORDER) | 
| #define YADAPTCOEFFSA 18 | 
Definition at line 52 of file apedec.c.
Referenced by predictor_decode_mono(), and predictor_decode_stereo().
| #define YADAPTCOEFFSB 10 | 
| #define YDELAYA (18 + PREDICTOR_ORDER*4) | 
Definition at line 47 of file apedec.c.
Referenced by predictor_decode_mono(), and predictor_decode_stereo().
| #define YDELAYB (18 + PREDICTOR_ORDER*3) | 
| enum APECompressionLevel | 
| 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] | 
        
| static int ape_decode_frame | ( | AVCodecContext * | avctx, | |
| void * | data, | |||
| int * | data_size, | |||
| const uint8_t * | buf, | |||
| int | buf_size | |||
| ) |  [static] | 
        
| static av_cold int ape_decode_init | ( | AVCodecContext * | avctx | ) |  [static] | 
        
| static int ape_decode_value | ( | APEContext * | ctx, | |
| APERice * | rice | |||
| ) |  [inline, static] | 
        
| static void ape_unpack_mono | ( | APEContext * | ctx, | |
| int | count | |||
| ) |  [static] | 
        
| static void ape_unpack_stereo | ( | APEContext * | ctx, | |
| int | count | |||
| ) |  [static] | 
        
| static int APESIGN | ( | int32_t | x | ) |  [inline, static] | 
        
Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero).
Definition at line 500 of file apedec.c.
Referenced by predictor_decode_mono(), 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] | 
        
| static void do_apply_filter | ( | APEContext * | ctx, | |
| int | version, | |||
| APEFilter * | f, | |||
| int32_t * | data, | |||
| int | count, | |||
| int | order, | |||
| int | fracbits | |||
| ) |  [inline, static] | 
        
| static void do_init_filter | ( | APEFilter * | f, | |
| int16_t * | buf, | |||
| int | order | |||
| ) |  [static] | 
        
| static void entropy_decode | ( | APEContext * | ctx, | |
| int | blockstodecode, | |||
| int | stereo | |||
| ) |  [static] | 
        
| static void init_entropy_decoder | ( | APEContext * | ctx | ) |  [static] | 
        
| static void init_filter | ( | APEContext * | ctx, | |
| APEFilter * | f, | |||
| int16_t * | buf, | |||
| int | order | |||
| ) |  [static] | 
        
| static void init_frame_decoder | ( | APEContext * | ctx | ) |  [static] | 
        
| static void init_predictor_decoder | ( | APEContext * | ctx | ) |  [static] | 
        
| static void predictor_decode_mono | ( | APEContext * | ctx, | |
| int | count | |||
| ) |  [static] | 
        
| static void predictor_decode_stereo | ( | APEContext * | ctx, | |
| int | count | |||
| ) |  [static] | 
        
| static 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] | 
        
| static void update_rice | ( | APERice * | rice, | |
| int | x | |||
| ) |  [inline, static] | 
        
Initial value:
 {
    "ape",
    CODEC_TYPE_AUDIO,
    CODEC_ID_APE,
    sizeof(APEContext),
    ape_decode_init,
    NULL,
    ape_decode_close,
    ape_decode_frame,
    .long_name = NULL_IF_CONFIG_SMALL("Monkey's Audio"),
}
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 }
}
Definition at line 82 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 }
}
Definition at line 73 of file apedec.c.
Referenced by ape_apply_filters(), ape_decode_init(), and init_frame_decoder().
const int32_t initial_coeffs[4] [static]           | 
        
Initial value:
 {
    360, 317, -109, 98
}
Definition at line 477 of file apedec.c.
Referenced by init_predictor_decoder().
 1.5.8