#include <stdint.h>
#include "avcodec.h"
#include "dsputil.h"
#include "libavutil/intreadwrite.h"
#include "get_bits.h"
#include "libavutil/crc.h"
#include "parser.h"
#include "mlp_parser.h"
#include "mlp.h"
Go to the source code of this file.
Data Structures | |
| struct | SubStream |
| struct | MLPDecodeContext |
Defines | |
| #define | VLC_BITS 9 |
| number of bits used for VLC lookup - longest Huffman code is 9 | |
| #define | MSB_MASK(bits) (-1u << bits) |
| #define | PARAM_BLOCKSIZE (1 << 7) |
| #define | PARAM_MATRIX (1 << 6) |
| #define | PARAM_OUTSHIFT (1 << 5) |
| #define | PARAM_QUANTSTEP (1 << 4) |
| #define | PARAM_FIR (1 << 3) |
| #define | PARAM_IIR (1 << 2) |
| #define | PARAM_HUFFOFFSET (1 << 1) |
| #define | PARAM_PRESENCE (1 << 0) |
Functions | |
| static av_cold void | init_static (void) |
| Initialize static data, constant between all invocations of the codec. | |
| static int32_t | calculate_sign_huff (MLPDecodeContext *m, unsigned int substr, unsigned int ch) |
| static int | read_huff_channels (MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr, unsigned int pos) |
| Read a sample, consisting of either, both or neither of entropy-coded MSBs and plain LSBs. | |
| static av_cold int | mlp_decode_init (AVCodecContext *avctx) |
| static int | read_major_sync (MLPDecodeContext *m, GetBitContext *gb) |
| Read a major sync info header - contains high level information about the stream - sample rate, channel arrangement etc. | |
| static int | read_restart_header (MLPDecodeContext *m, GetBitContext *gbp, const uint8_t *buf, unsigned int substr) |
| Read a restart header from a block in a substream. | |
| static int | read_filter_params (MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr, unsigned int channel, unsigned int filter) |
| Read parameters for one of the prediction filters. | |
| static int | read_matrix_params (MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp) |
| Read parameters for primitive matrices. | |
| static int | read_channel_params (MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp, unsigned int ch) |
| Read channel parameters. | |
| static int | read_decoding_params (MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr) |
| Read decoding parameters that change more often than those in the restart header. | |
| static void | filter_channel (MLPDecodeContext *m, unsigned int substr, unsigned int channel) |
| Generate PCM samples using the prediction filters and residual values read from the data stream, and update the filter state. | |
| static int | read_block_data (MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr) |
| Read a block of PCM residual data (or actual if no filtering active). | |
| static void | generate_2_noise_channels (MLPDecodeContext *m, unsigned int substr) |
| Noise generation functions. | |
| static void | fill_noise_buffer (MLPDecodeContext *m, unsigned int substr) |
| Generate a block of noise, used when restart sync word == 0x31eb. | |
| static void | rematrix_channels (MLPDecodeContext *m, unsigned int substr) |
| Apply the channel matrices in turn to reconstruct the original audio samples. | |
| static int | output_data_internal (MLPDecodeContext *m, unsigned int substr, uint8_t *data, unsigned int *data_size, int is32) |
| Write the audio data into the output buffer. | |
| static int | output_data (MLPDecodeContext *m, unsigned int substr, uint8_t *data, unsigned int *data_size) |
| static int | read_access_unit (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) |
| Read an access unit from the stream. | |
Variables | |
| static const char * | sample_message |
| static VLC | huff_vlc [3] |
| static const int8_t | noise_table [256] |
| Data table used for TrueHD noise generation function. | |
| AVCodec | ff_mlp_decoder |
Definition in file mlpdec.c.
| #define MSB_MASK | ( | bits | ) | (-1u << bits) |
| #define PARAM_BLOCKSIZE (1 << 7) |
| #define PARAM_FIR (1 << 3) |
| #define PARAM_HUFFOFFSET (1 << 1) |
| #define PARAM_IIR (1 << 2) |
| #define PARAM_MATRIX (1 << 6) |
| #define PARAM_OUTSHIFT (1 << 5) |
| #define PARAM_PRESENCE (1 << 0) |
| #define PARAM_QUANTSTEP (1 << 4) |
| #define VLC_BITS 9 |
| static int32_t calculate_sign_huff | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| unsigned int | ch | |||
| ) | [inline, static] |
Definition at line 177 of file mlpdec.c.
Referenced by read_channel_params(), and read_decoding_params().
| static void fill_noise_buffer | ( | MLPDecodeContext * | m, | |
| unsigned int | substr | |||
| ) | [static] |
Generate a block of noise, used when restart sync word == 0x31eb.
Definition at line 881 of file mlpdec.c.
Referenced by rematrix_channels().
| static void filter_channel | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| unsigned int | channel | |||
| ) | [static] |
Generate PCM samples using the prediction filters and residual values read from the data stream, and update the filter state.
Definition at line 764 of file mlpdec.c.
Referenced by read_block_data().
| static void generate_2_noise_channels | ( | MLPDecodeContext * | m, | |
| unsigned int | substr | |||
| ) | [static] |
Noise generation functions.
I'm not sure what these are for - they seem to be some kind of pseudorandom sequence generators, used to generate noise data which is used when the channels are rematrixed. I'm not sure if they provide a practical benefit to compression, or just obfuscate the decoder. Are they for some kind of dithering? Generate two channels of noise, used in the matrix when restart sync word == 0x31ea.
Definition at line 861 of file mlpdec.c.
Referenced by rematrix_channels().
| static av_cold void init_static | ( | void | ) | [static] |
Initialize static data, constant between all invocations of the codec.
Definition at line 160 of file mlpdec.c.
Referenced by mlp_decode_init().
| static av_cold int mlp_decode_init | ( | AVCodecContext * | avctx | ) | [static] |
| static int output_data | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| uint8_t * | data, | |||
| unsigned int * | data_size | |||
| ) | [static] |
| static int output_data_internal | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| uint8_t * | data, | |||
| unsigned int * | data_size, | |||
| int | is32 | |||
| ) | [static] |
Write the audio data into the output buffer.
Definition at line 945 of file mlpdec.c.
Referenced by output_data().
| static int read_access_unit | ( | AVCodecContext * | avctx, | |
| void * | data, | |||
| int * | data_size, | |||
| AVPacket * | avpkt | |||
| ) | [static] |
| static int read_block_data | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gbp, | |||
| unsigned int | substr | |||
| ) | [static] |
Read a block of PCM residual data (or actual if no filtering active).
Definition at line 791 of file mlpdec.c.
Referenced by read_access_unit().
| static int read_channel_params | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| GetBitContext * | gbp, | |||
| unsigned int | ch | |||
| ) | [static] |
Read channel parameters.
Definition at line 654 of file mlpdec.c.
Referenced by read_decoding_params().
| static int read_decoding_params | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gbp, | |||
| unsigned int | substr | |||
| ) | [static] |
Read decoding parameters that change more often than those in the restart header.
Definition at line 711 of file mlpdec.c.
Referenced by read_access_unit().
| static int read_filter_params | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gbp, | |||
| unsigned int | substr, | |||
| unsigned int | channel, | |||
| unsigned int | filter | |||
| ) | [static] |
Read parameters for one of the prediction filters.
Definition at line 516 of file mlpdec.c.
Referenced by read_channel_params().
| static int read_huff_channels | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gbp, | |||
| unsigned int | substr, | |||
| unsigned int | pos | |||
| ) | [inline, static] |
Read a sample, consisting of either, both or neither of entropy-coded MSBs and plain LSBs.
Definition at line 198 of file mlpdec.c.
Referenced by read_block_data().
| static int read_major_sync | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gb | |||
| ) | [static] |
Read a major sync info header - contains high level information about the stream - sample rate, channel arrangement etc.
Most of this information is not actually necessary for decoding, only for playback.
Definition at line 253 of file mlpdec.c.
Referenced by read_access_unit().
| static int read_matrix_params | ( | MLPDecodeContext * | m, | |
| unsigned int | substr, | |||
| GetBitContext * | gbp | |||
| ) | [static] |
Read parameters for primitive matrices.
Definition at line 591 of file mlpdec.c.
Referenced by read_decoding_params().
| static int read_restart_header | ( | MLPDecodeContext * | m, | |
| GetBitContext * | gbp, | |||
| const uint8_t * | buf, | |||
| unsigned int | substr | |||
| ) | [static] |
Read a restart header from a block in a substream.
This contains parameters required to decode the audio that do not change very often. Generally (always) present only in blocks following a major sync.
Definition at line 359 of file mlpdec.c.
Referenced by read_access_unit().
| static void rematrix_channels | ( | MLPDecodeContext * | m, | |
| unsigned int | substr | |||
| ) | [static] |
Apply the channel matrices in turn to reconstruct the original audio samples.
Definition at line 900 of file mlpdec.c.
Referenced by read_access_unit().
Initial value:
{
"mlp",
AVMEDIA_TYPE_AUDIO,
CODEC_ID_MLP,
sizeof(MLPDecodeContext),
mlp_decode_init,
NULL,
NULL,
read_access_unit,
.long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"),
}
const int8_t noise_table[256] [static] |
Initial value:
{
30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
-25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
}
Definition at line 832 of file mlpdec.c.
Referenced by fill_noise_buffer(), main(), and rnd_table_init().
const char* sample_message [static] |
Initial value:
"Please file a bug report following the instructions at "
"http://ffmpeg.org/bugreports.html and include "
"a sample of this file."
Definition at line 42 of file mlpdec.c.
Referenced by read_block_data(), read_major_sync(), and read_restart_header().
1.5.8