Libav
Data Structures | Macros | Enumerations | Functions | Variables
dcadec.c File Reference
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include "libavutil/attributes.h"
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/float_dsp.h"
#include "libavutil/internal.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/samplefmt.h"
#include "avcodec.h"
#include "dca.h"
#include "dca_syncwords.h"
#include "dcadata.h"
#include "dcadsp.h"
#include "dcahuff.h"
#include "fft.h"
#include "fmtconvert.h"
#include "get_bits.h"
#include "internal.h"
#include "mathops.h"
#include "profiles.h"
#include "put_bits.h"
#include "synth_filter.h"

Go to the source code of this file.

Data Structures

struct  BitAlloc
 Bit allocation. More...
 

Macros

#define DCA_DOLBY   101 /* FIXME */
 
#define DCA_CHANNEL_BITS   6
 
#define DCA_CHANNEL_MASK   0x3F
 
#define DCA_LFE   0x80
 
#define HEADER_SIZE   14
 
#define DCA_NSYNCAUX   0x9A1105A0
 
#define MIX_REAR1(samples, s1, rs, coef)
 
#define MIX_REAR2(samples, s1, s2, rs, coef)
 
#define MIX_FRONT3(samples, coef)
 
#define DOWNMIX_TO_STEREO(op1, op2)
 

Enumerations

enum  DCAMode {
  DCA_MONO = 0, DCA_CHANNEL, DCA_STEREO, DCA_STEREO_SUMDIFF,
  DCA_STEREO_TOTAL, DCA_3F, DCA_2F1R, DCA_3F1R,
  DCA_2F2R, DCA_3F2R, DCA_4F2R
}
 

Functions

static av_always_inline int get_bitalloc (GetBitContext *gb, BitAlloc *ba, int idx)
 
static av_cold void dca_init_vlcs (void)
 
static void get_array (GetBitContext *gb, int *dst, int len, int bits)
 
static int dca_parse_audio_coding_header (DCAContext *s, int base_channel)
 
static int dca_parse_frame_header (DCAContext *s)
 
static int get_scale (GetBitContext *gb, int level, int value, int log2range)
 
static int dca_subframe_header (DCAContext *s, int base_channel, int block_index)
 
static void qmf_32_subbands (DCAContext *s, int chans, float samples_in[DCA_SUBBANDS][SAMPLES_PER_SUBBAND], float *samples_out, float scale)
 
static QMF64_tableqmf64_precompute (void)
 
static void qmf_64_subbands (DCAContext *s, int chans, float samples_in[DCA_SUBBANDS_X96K][SAMPLES_PER_SUBBAND], float *samples_out, float scale)
 
static void lfe_interpolation_fir (DCAContext *s, const float *samples_in, float *samples_out)
 
static void dca_downmix (float **samples, int srcfmt, int lfe_present, float coef[DCA_PRIM_CHANNELS_MAX+1][2], const int8_t *channel_mapping)
 
static int decode_blockcode (int code, int levels, int32_t *values)
 
static int decode_blockcodes (int code1, int code2, int levels, int32_t *values)
 
static int dca_subsubframe (DCAContext *s, int base_channel, int block_index)
 
static int dca_filter_channels (DCAContext *s, int block_index, int upsample)
 
static int dca_subframe_footer (DCAContext *s, int base_channel)
 
static int dca_decode_block (DCAContext *s, int base_channel, int block_index)
 Decode a dca frame block. More...
 
static float dca_dmix_code (unsigned code)
 
static int scan_for_extensions (AVCodecContext *avctx)
 
static int set_channel_layout (AVCodecContext *avctx, int channels, int num_core_channels)
 
static int dca_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 Main frame decoding function FIXME add arguments. More...
 
static av_cold int dca_decode_init (AVCodecContext *avctx)
 DCA initialization. More...
 
static av_cold int dca_decode_end (AVCodecContext *avctx)
 

Variables

static const int dca_ext_audio_descr_mask []
 
static const uint64_t dca_core_channel_layout []
 
static BitAlloc dca_bitalloc_index
 indexes for samples VLC select More...
 
static BitAlloc dca_tmode
 transition mode VLCs More...
 
static BitAlloc dca_scalefactor
 scalefactor VLCs More...
 
static BitAlloc dca_smpl_bitalloc [11]
 samples VLCs More...
 
static const uint8_t abits_sizes [7] = { 7, 10, 12, 13, 15, 17, 19 }
 
static const uint8_t abits_levels [7] = { 3, 5, 7, 9, 13, 17, 25 }
 
static const AVOption options []
 
static const AVClass dca_decoder_class
 
AVCodec ff_dca_decoder
 

Macro Definition Documentation

◆ DCA_DOLBY

#define DCA_DOLBY   101 /* FIXME */

Definition at line 132 of file dcadec.c.

◆ DCA_CHANNEL_BITS

#define DCA_CHANNEL_BITS   6

Definition at line 134 of file dcadec.c.

◆ DCA_CHANNEL_MASK

#define DCA_CHANNEL_MASK   0x3F

Definition at line 135 of file dcadec.c.

Referenced by set_channel_layout().

◆ DCA_LFE

#define DCA_LFE   0x80

Definition at line 137 of file dcadec.c.

Referenced by dca_decode_frame(), and dca_parse_frame_header().

◆ HEADER_SIZE

#define HEADER_SIZE   14

Definition at line 139 of file dcadec.c.

◆ DCA_NSYNCAUX

#define DCA_NSYNCAUX   0x9A1105A0

Definition at line 141 of file dcadec.c.

Referenced by dca_subframe_footer().

◆ MIX_REAR1

#define MIX_REAR1 (   samples,
  s1,
  rs,
  coef 
)
Value:
samples[0][i] += samples[s1][i] * coef[rs][0]; \
samples[1][i] += samples[s1][i] * coef[rs][1];

Definition at line 679 of file dcadec.c.

Referenced by dca_downmix().

◆ MIX_REAR2

#define MIX_REAR2 (   samples,
  s1,
  s2,
  rs,
  coef 
)
Value:
samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];

Definition at line 683 of file dcadec.c.

Referenced by dca_downmix().

◆ MIX_FRONT3

#define MIX_FRONT3 (   samples,
  coef 
)
Value:
t = samples[c][i]; \
u = samples[l][i]; \
v = samples[r][i]; \
samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
#define r
Definition: input.c:51
#define u(width,...)

Definition at line 687 of file dcadec.c.

Referenced by dca_downmix().

◆ DOWNMIX_TO_STEREO

#define DOWNMIX_TO_STEREO (   op1,
  op2 
)
Value:
for (i = 0; i < 256; i++) { \
op1 \
op2 \
}

Definition at line 694 of file dcadec.c.

Referenced by dca_downmix().

Enumeration Type Documentation

◆ DCAMode

enum DCAMode
Enumerator
DCA_MONO 
DCA_CHANNEL 
DCA_STEREO 
DCA_STEREO_SUMDIFF 
DCA_STEREO_TOTAL 
DCA_3F 
DCA_2F1R 
DCA_3F1R 
DCA_2F2R 
DCA_3F2R 
DCA_4F2R 

Definition at line 60 of file dcadec.c.

Function Documentation

◆ get_bitalloc()

static av_always_inline int get_bitalloc ( GetBitContext gb,
BitAlloc ba,
int  idx 
)
static

Definition at line 156 of file dcadec.c.

Referenced by dca_subframe_header(), dca_subsubframe(), and get_scale().

◆ dca_init_vlcs()

static av_cold void dca_init_vlcs ( void  )
static

Definition at line 163 of file dcadec.c.

Referenced by dca_decode_init().

◆ get_array()

static void get_array ( GetBitContext gb,
int *  dst,
int  len,
int  bits 
)
inlinestatic

Definition at line 218 of file dcadec.c.

Referenced by dca_parse_audio_coding_header().

◆ dca_parse_audio_coding_header()

static int dca_parse_audio_coding_header ( DCAContext s,
int  base_channel 
)
static

Definition at line 224 of file dcadec.c.

Referenced by dca_parse_frame_header(), and scan_for_extensions().

◆ dca_parse_frame_header()

static int dca_parse_frame_header ( DCAContext s)
static

Definition at line 284 of file dcadec.c.

Referenced by dca_decode_frame().

◆ get_scale()

static int get_scale ( GetBitContext gb,
int  level,
int  value,
int  log2range 
)
inlinestatic

Definition at line 347 of file dcadec.c.

Referenced by dca_subframe_header().

◆ dca_subframe_header()

static int dca_subframe_header ( DCAContext s,
int  base_channel,
int  block_index 
)
static

Definition at line 364 of file dcadec.c.

Referenced by dca_decode_block().

◆ qmf_32_subbands()

static void qmf_32_subbands ( DCAContext s,
int  chans,
float  samples_in[DCA_SUBBANDS][SAMPLES_PER_SUBBAND],
float *  samples_out,
float  scale 
)
static

Definition at line 544 of file dcadec.c.

Referenced by dca_filter_channels().

◆ qmf64_precompute()

static QMF64_table* qmf64_precompute ( void  )
static

Definition at line 567 of file dcadec.c.

Referenced by dca_filter_channels().

◆ qmf_64_subbands()

static void qmf_64_subbands ( DCAContext s,
int  chans,
float  samples_in[DCA_SUBBANDS_X96K][SAMPLES_PER_SUBBAND],
float *  samples_out,
float  scale 
)
static

Definition at line 593 of file dcadec.c.

Referenced by dca_filter_channels().

◆ lfe_interpolation_fir()

static void lfe_interpolation_fir ( DCAContext s,
const float *  samples_in,
float *  samples_out 
)
static

Definition at line 644 of file dcadec.c.

Referenced by dca_filter_channels().

◆ dca_downmix()

static void dca_downmix ( float **  samples,
int  srcfmt,
int  lfe_present,
float  coef[DCA_PRIM_CHANNELS_MAX+1][2],
const int8_t *  channel_mapping 
)
static

Definition at line 700 of file dcadec.c.

Referenced by dca_filter_channels().

◆ decode_blockcode()

static int decode_blockcode ( int  code,
int  levels,
int32_t values 
)
static

Definition at line 764 of file dcadec.c.

Referenced by decode_blockcodes().

◆ decode_blockcodes()

static int decode_blockcodes ( int  code1,
int  code2,
int  levels,
int32_t values 
)
static

Definition at line 778 of file dcadec.c.

Referenced by dca_subsubframe().

◆ dca_subsubframe()

static int dca_subsubframe ( DCAContext s,
int  base_channel,
int  block_index 
)
static

Definition at line 788 of file dcadec.c.

Referenced by dca_decode_block().

◆ dca_filter_channels()

static int dca_filter_channels ( DCAContext s,
int  block_index,
int  upsample 
)
static

Definition at line 935 of file dcadec.c.

Referenced by dca_decode_frame().

◆ dca_subframe_footer()

static int dca_subframe_footer ( DCAContext s,
int  base_channel 
)
static

Definition at line 1010 of file dcadec.c.

Referenced by dca_decode_block().

◆ dca_decode_block()

static int dca_decode_block ( DCAContext s,
int  base_channel,
int  block_index 
)
static

Decode a dca frame block.

Parameters
spointer to the DCAContext

Definition at line 1119 of file dcadec.c.

Referenced by dca_decode_frame(), and scan_for_extensions().

◆ dca_dmix_code()

static float dca_dmix_code ( unsigned  code)
static

Definition at line 1155 of file dcadec.c.

Referenced by set_channel_layout().

◆ scan_for_extensions()

static int scan_for_extensions ( AVCodecContext avctx)
static

Definition at line 1162 of file dcadec.c.

Referenced by dca_decode_frame().

◆ set_channel_layout()

static int set_channel_layout ( AVCodecContext avctx,
int  channels,
int  num_core_channels 
)
static

Definition at line 1264 of file dcadec.c.

Referenced by dca_decode_frame().

◆ dca_decode_frame()

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

Main frame decoding function FIXME add arguments.

Definition at line 1365 of file dcadec.c.

◆ dca_decode_init()

static av_cold int dca_decode_init ( AVCodecContext avctx)
static

DCA initialization.

Parameters
avctxpointer to the AVCodecContext

Definition at line 1544 of file dcadec.c.

◆ dca_decode_end()

static av_cold int dca_decode_end ( AVCodecContext avctx)
static

Definition at line 1567 of file dcadec.c.

Variable Documentation

◆ dca_ext_audio_descr_mask

const int dca_ext_audio_descr_mask[]
static
Initial value:
= {
-1,
-1,
-1,
-1,
}
96/24 extension in core substream
Definition: dca.h:68
XCh channel extension in core substream.
Definition: dca.h:69
XXCh channels extension in core substream.
Definition: dca.h:67

Definition at line 75 of file dcadec.c.

Referenced by dca_decode_frame().

◆ dca_core_channel_layout

const uint64_t dca_core_channel_layout[]
static

Definition at line 95 of file dcadec.c.

Referenced by set_channel_layout().

◆ dca_bitalloc_index

BitAlloc dca_bitalloc_index
static

indexes for samples VLC select

Definition at line 151 of file dcadec.c.

◆ dca_tmode

BitAlloc dca_tmode
static

transition mode VLCs

Definition at line 152 of file dcadec.c.

◆ dca_scalefactor

BitAlloc dca_scalefactor
static

scalefactor VLCs

Definition at line 153 of file dcadec.c.

◆ dca_smpl_bitalloc

BitAlloc dca_smpl_bitalloc[11]
static

samples VLCs

Definition at line 154 of file dcadec.c.

◆ abits_sizes

const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 }
static

Definition at line 785 of file dcadec.c.

Referenced by dca_subsubframe().

◆ abits_levels

const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 }
static

Definition at line 786 of file dcadec.c.

Referenced by dca_subsubframe().

◆ options

const AVOption options[]
static
Initial value:
= {
{ "disable_xch", "disable decoding of the XCh extension", 0x42, AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },
{ "disable_xll", "disable decoding of the XLL extension", 0x42, AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },
{ NULL },
}
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:269
NULL
Definition: eval.c:55
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:265

Definition at line 1577 of file dcadec.c.

◆ dca_decoder_class

const AVClass dca_decoder_class
static
Initial value:
= {
.class_name = "DCA decoder",
.item_name = av_default_item_name,
.option = options,
}
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
av_default_item_name
Definition: dnxhdenc.c:55
static const AVOption options[]
Definition: dcadec.c:1577

Definition at line 1583 of file dcadec.c.

◆ ff_dca_decoder

AVCodec ff_dca_decoder
Initial value:
= {
.name = "dca",
.long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
.priv_data_size = sizeof(DCAContext),
.close = dca_decode_end,
.priv_class = &dca_decoder_class,
}
float, planar
Definition: samplefmt.h:71
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: avcodec.h:889
static av_cold int dca_decode_end(AVCodecContext *avctx)
Definition: dcadec.c:1567
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:148
static int dca_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Main frame decoding function FIXME add arguments.
Definition: dcadec.c:1365
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
Definition: avconv.c:1288
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:60
const AVProfile ff_dca_profiles[]
Definition: profiles.c:39
static av_cold int dca_decode_init(AVCodecContext *avctx)
DCA initialization.
Definition: dcadec.c:1544
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:582
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:700
static const AVClass dca_decoder_class
Definition: dcadec.c:1583
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:838

Definition at line 1590 of file dcadec.c.