FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
alsdec.c File Reference

MPEG-4 ALS decoder. More...

#include <inttypes.h>
#include "avcodec.h"
#include "get_bits.h"
#include "unary.h"
#include "mpeg4audio.h"
#include "bytestream.h"
#include "bgmc.h"
#include "bswapdsp.h"
#include "internal.h"
#include "libavutil/samplefmt.h"
#include "libavutil/crc.h"
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct   ALSSpecificConfig
 
struct   ALSChannelData
 
struct   ALSDecContext
 
struct   ALSBlockData
 

Macros

#define  MISSING_ERR(cond, str, errval)
 
 

Enumerations

 

Functions

 
  Read an ALSSpecificConfig from a buffer into the output struct.
 
  Check the ALSSpecificConfig for unsupported features.
 
static void  parse_bs_info (const uint32_t bs_info, unsigned int n, unsigned int div, unsigned int **div_blocks, unsigned int *num_blocks)
  Parse the bs_info field to extract the block partitioning used in block switching mode, refer to ISO/IEC 14496-3, section 11.6.2.
 
static int32_t  decode_rice (GetBitContext *gb, unsigned int k)
  Read and decode a Rice codeword.
 
static void  parcor_to_lpc (unsigned int k, const int32_t *par, int32_t *cof)
  Convert PARCOR coefficient k to direct filter coefficient.
 
static void  get_block_sizes (ALSDecContext *ctx, unsigned int *div_blocks, uint32_t *bs_info)
  Read block switching field if necessary and set actual block sizes.
 
  Read the block data for a constant block.
 
  Decode the block data for a constant block.
 
  Read the block data for a non-constant block.
 
  Decode the block data for a non-constant block.
 
static int  read_block (ALSDecContext *ctx, ALSBlockData *bd)
  Read the block data.
 
static int  decode_block (ALSDecContext *ctx, ALSBlockData *bd)
  Decode the block data.
 
static int  read_decode_block (ALSDecContext *ctx, ALSBlockData *bd)
  Read and decode block data successively.
 
static void  zero_remaining (unsigned int b, unsigned int b_max, const unsigned int *div_blocks, int32_t *buf)
  Compute the number of samples left to decode for the current frame and sets these samples to zero.
 
static int  decode_blocks_ind (ALSDecContext *ctx, unsigned int ra_frame, unsigned int c, const unsigned int *div_blocks, unsigned int *js_blocks)
  Decode blocks independently.
 
static int  decode_blocks (ALSDecContext *ctx, unsigned int ra_frame, unsigned int c, const unsigned int *div_blocks, unsigned int *js_blocks)
  Decode blocks dependently.
 
static int  als_weighting (GetBitContext *gb, int k, int off)
 
static int  read_channel_data (ALSDecContext *ctx, ALSChannelData *cd, int c)
  Read the channel data.
 
static int  revert_channel_correlation (ALSDecContext *ctx, ALSBlockData *bd, ALSChannelData **cd, int *reverted, unsigned int offset, int c)
  Recursively reverts the inter-channel correlation for a block.
 
static int  read_frame_data (ALSDecContext *ctx, unsigned int ra_frame)
  Read the frame data.
 
static int  decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
  Decode an ALS frame.
 
static av_cold int  decode_end (AVCodecContext *avctx)
  Uninitialize the ALS decoder.
 
static av_cold int  decode_init (AVCodecContext *avctx)
  Initialize the ALS decoder.
 
static av_cold void  flush (AVCodecContext *avctx)
  Flush (reset) the frame ID after seeking.
 

Variables

static const int8_t  parcor_rice_table [3][20][2]
  Rice parameters and corresponding index offsets for decoding the indices of scaled PARCOR values.
 
static const int16_t  parcor_scaled_values []
  Scaled PARCOR values used for the first two PARCOR coefficients.
 
static const uint8_t  ltp_gain_values [4][4]
  Gain values of p(0) for long-term prediction.
 
static const int16_t  mcc_weightings []
  Inter-channel weighting factors for multi-channel correlation.
 
static const uint8_t  tail_code [16][6]
  Tail codes used in arithmetic coding using block Gilbert-Moore codes.
 
 

Detailed Description

MPEG-4 ALS decoder.

Author
Thilo Borgmann <thilo.borgmann at mail.de>

Definition in file alsdec.c.

Macro Definition Documentation

#define MISSING_ERR (   cond,
  str,
  errval 
)
Value:
{ \
if (cond) { \
avpriv_report_missing_feature(ctx->avctx, \
str); \
error = errval; \
} \
}

Referenced by check_specific_config().

#define INTERLEAVE_OUTPUT (   bps )
Value:
{ \
int##bps##_t *dest = (int##bps##_t*)frame->data[0]; \
shift = bps - ctx->avctx->bits_per_raw_sample; \
if (!ctx->cs_switch) { \
for (sample = 0; sample < ctx->cur_frame_length; sample++) \
for (c = 0; c < avctx->channels; c++) \
*dest++ = ctx->raw_samples[c][sample] << shift; \
} else { \
for (sample = 0; sample < ctx->cur_frame_length; sample++) \
for (c = 0; c < avctx->channels; c++) \
*dest++ = ctx->raw_samples[sconf->chan_pos[c]][sample] << shift; \
} \
}

Referenced by decode_frame().

Enumeration Type Documentation

enum RA_Flag
Enumerator:
RA_FLAG_NONE
RA_FLAG_FRAMES
RA_FLAG_HEADER

Definition at line 148 of file alsdec.c.

Function Documentation

static av_cold void dprint_specific_config ( ALSDecContextctx )
static

Definition at line 250 of file alsdec.c.

Referenced by read_specific_config().

static av_cold int read_specific_config ( ALSDecContextctx )
static

Read an ALSSpecificConfig from a buffer into the output struct.

Definition at line 280 of file alsdec.c.

Referenced by decode_init().

static int check_specific_config ( ALSDecContextctx )
static

Check the ALSSpecificConfig for unsupported features.

Definition at line 425 of file alsdec.c.

Referenced by decode_init().

static void parse_bs_info ( const uint32_t  bs_info,
unsigned int  n,
unsigned int  div,
unsigned int **  div_blocks,
unsigned int *  num_blocks 
)
static

Parse the bs_info field to extract the block partitioning used in block switching mode, refer to ISO/IEC 14496-3, section 11.6.2.

Definition at line 450 of file alsdec.c.

Referenced by get_block_sizes().

static int32_t decode_rice ( GetBitContextgb,
unsigned int  k 
)
static

Read and decode a Rice codeword.

Definition at line 473 of file alsdec.c.

Referenced by als_weighting(), and read_var_block_data().

static void parcor_to_lpc ( unsigned int  k,
const int32_tpar,
int32_tcof 
)
static

Convert PARCOR coefficient k to direct filter coefficient.

Definition at line 491 of file alsdec.c.

Referenced by decode_var_block_data().

static void get_block_sizes ( ALSDecContextctx,
unsigned int *  div_blocks,
uint32_t *  bs_info 
)
static

Read block switching field if necessary and set actual block sizes.

Also assure that the block sizes of the last frame correspond to the actual number of samples.

Definition at line 511 of file alsdec.c.

Referenced by read_frame_data().

static int read_const_block_data ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Read the block data for a constant block.

Definition at line 564 of file alsdec.c.

Referenced by read_block().

static void decode_const_block_data ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Decode the block data for a constant block.

Definition at line 594 of file alsdec.c.

Referenced by decode_block().

static int read_var_block_data ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Read the block data for a non-constant block.

Definition at line 608 of file alsdec.c.

Referenced by read_block().

static int decode_var_block_data ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Decode the block data for a non-constant block.

Definition at line 875 of file alsdec.c.

Referenced by decode_block().

static int read_block ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Read the block data.

Definition at line 984 of file alsdec.c.

Referenced by read_decode_block(), and read_frame_data().

static int decode_block ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Decode the block data.

Definition at line 1003 of file alsdec.c.

Referenced by read_decode_block(), and read_frame_data().

static int read_decode_block ( ALSDecContextctx,
ALSBlockDatabd 
)
static

Read and decode block data successively.

Definition at line 1029 of file alsdec.c.

Referenced by decode_blocks(), and decode_blocks_ind().

static void zero_remaining ( unsigned int  b,
unsigned int  b_max,
const unsigned int *  div_blocks,
int32_tbuf 
)
static

Compute the number of samples left to decode for the current frame and sets these samples to zero.

Definition at line 1043 of file alsdec.c.

Referenced by decode_blocks(), and decode_blocks_ind().

static int decode_blocks_ind ( ALSDecContextctx,
unsigned int  ra_frame,
unsigned int  c,
const unsigned int *  div_blocks,
unsigned int *  js_blocks 
)
static

Decode blocks independently.

Definition at line 1058 of file alsdec.c.

Referenced by read_frame_data().

static int decode_blocks ( ALSDecContextctx,
unsigned int  ra_frame,
unsigned int  c,
const unsigned int *  div_blocks,
unsigned int *  js_blocks 
)
static

Decode blocks dependently.

Definition at line 1098 of file alsdec.c.

Referenced by read_frame_data().

static int als_weighting ( GetBitContextgb,
int  k,
int  off 
)
inlinestatic

Definition at line 1182 of file alsdec.c.

Referenced by read_channel_data().

static int read_channel_data ( ALSDecContextctx,
ALSChannelDatacd,
int  c 
)
static

Read the channel data.

Definition at line 1191 of file alsdec.c.

Referenced by read_frame_data().

static int revert_channel_correlation ( ALSDecContextctx,
ALSBlockDatabd,
ALSChannelData **  cd,
int *  reverted,
unsigned int  offset,
int  c 
)
static

Recursively reverts the inter-channel correlation for a block.

Definition at line 1238 of file alsdec.c.

Referenced by read_frame_data().

static int read_frame_data ( ALSDecContextctx,
unsigned int  ra_frame 
)
static

Read the frame data.

< block sizes.

Definition at line 1323 of file alsdec.c.

Referenced by decode_frame().

static int decode_frame ( AVCodecContextavctx,
voiddata,
int *  got_frame_ptr,
AVPacketavpkt 
)
static

Decode an ALS frame.

Definition at line 1470 of file alsdec.c.

static av_cold int decode_end ( AVCodecContextavctx )
static

Uninitialize the ALS decoder.

Definition at line 1598 of file alsdec.c.

Referenced by decode_init().

static av_cold int decode_init ( AVCodecContextavctx )
static

Initialize the ALS decoder.

Definition at line 1633 of file alsdec.c.

static av_cold void flush ( AVCodecContextavctx )
static

Flush (reset) the frame ID after seeking.

Definition at line 1795 of file alsdec.c.

Variable Documentation

const int8_t parcor_rice_table[3][20][2]
static
Initial value:
= {
{ {-52, 4}, {-29, 5}, {-31, 4}, { 19, 4}, {-16, 4},
{ 12, 3}, { -7, 3}, { 9, 3}, { -5, 3}, { 6, 3},
{ -4, 3}, { 3, 3}, { -3, 2}, { 3, 2}, { -2, 2},
{ 3, 2}, { -1, 2}, { 2, 2}, { -1, 2}, { 2, 2} },
{ {-58, 3}, {-42, 4}, {-46, 4}, { 37, 5}, {-36, 4},
{ 29, 4}, {-29, 4}, { 25, 4}, {-23, 4}, { 20, 4},
{-17, 4}, { 16, 4}, {-12, 4}, { 12, 3}, {-10, 4},
{ 7, 3}, { -4, 4}, { 3, 3}, { -1, 3}, { 1, 3} },
{ {-59, 3}, {-45, 5}, {-50, 4}, { 38, 4}, {-39, 4},
{ 32, 4}, {-30, 4}, { 25, 3}, {-23, 3}, { 20, 3},
{-20, 3}, { 16, 3}, {-13, 3}, { 10, 3}, { -7, 3},
{ 3, 3}, { 0, 3}, { -1, 3}, { 2, 3}, { -1, 2} }
}

Rice parameters and corresponding index offsets for decoding the indices of scaled PARCOR values.

The table chosen is set globally by the encoder and stored in ALSSpecificConfig.

Definition at line 47 of file alsdec.c.

Referenced by read_var_block_data().

const int16_t parcor_scaled_values[]
static

Scaled PARCOR values used for the first two PARCOR coefficients.

To be indexed by the Rice coded indices. Generated by: parcor_scaled_values[i] = 32 + ((i * (i+1)) << 7) - (1 << 20) Actual values are divided by 32 in order to be stored in 16 bits.

Definition at line 68 of file alsdec.c.

Referenced by read_var_block_data().

const uint8_t ltp_gain_values[4][4]
static
Initial value:
= {
{ 0, 8, 16, 24},
{32, 40, 48, 56},
{64, 70, 76, 82},
{88, 92, 96, 100}
}

Gain values of p(0) for long-term prediction.

To be indexed by the Rice coded indices.

Definition at line 107 of file alsdec.c.

Referenced by read_var_block_data().

const int16_t mcc_weightings[]
static
Initial value:
= {
204, 192, 179, 166, 153, 140, 128, 115,
102, 89, 76, 64, 51, 38, 25, 12,
0, -12, -25, -38, -51, -64, -76, -89,
-102, -115, -128, -140, -153, -166, -179, -192
}

Inter-channel weighting factors for multi-channel correlation.

To be indexed by the Rice coded indices.

Definition at line 118 of file alsdec.c.

Referenced by als_weighting().

const uint8_t tail_code[16][6]
static
Initial value:
= {
{ 74, 44, 25, 13, 7, 3},
{ 68, 42, 24, 13, 7, 3},
{ 58, 39, 23, 13, 7, 3},
{126, 70, 37, 19, 10, 5},
{132, 70, 37, 20, 10, 5},
{124, 70, 38, 20, 10, 5},
{120, 69, 37, 20, 11, 5},
{116, 67, 37, 20, 11, 5},
{108, 66, 36, 20, 10, 5},
{102, 62, 36, 20, 10, 5},
{ 88, 58, 34, 19, 10, 5},
{162, 89, 49, 25, 13, 7},
{156, 87, 49, 26, 14, 7},
{150, 86, 47, 26, 14, 7},
{142, 84, 47, 26, 14, 7},
{131, 79, 46, 26, 14, 7}
}

Tail codes used in arithmetic coding using block Gilbert-Moore codes.

Definition at line 128 of file alsdec.c.

Referenced by read_var_block_data().

AVCodec ff_als_decoder
Initial value:
= {
.name = "als",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 Audio Lossless Coding (ALS)"),
.priv_data_size = sizeof(ALSDecContext),
}

Definition at line 1803 of file alsdec.c.


Generated on Sun Sep 14 2014 18:56:20 for FFmpeg by   doxygen 1.8.2

AltStyle によって変換されたページ (->オリジナル) /