FFmpeg
Loading...
Searching...
No Matches
dca_lbr.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016 foo86
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVCODEC_DCA_LBR_H
22#define AVCODEC_DCA_LBR_H
23
24#include "libavutil/float_dsp.h"
26#include "libavutil/tx.h"
27
28#include "avcodec.h"
29#include "get_bits.h"
30#include "dca.h"
31#include "dca_exss.h"
32#include "dcadsp.h"
33
34#define DCA_LBR_CHANNELS 6
35#define DCA_LBR_CHANNELS_TOTAL 32
36#define DCA_LBR_SUBBANDS 32
37#define DCA_LBR_TONES 512
38
39#define DCA_LBR_TIME_SAMPLES 128
40#define DCA_LBR_TIME_HISTORY 8
41
46
47typedef struct DCALbrTone {
48 uint8_t x_freq; ///< Spectral line offset
49 uint8_t f_delt; ///< Difference between original and center frequency
50 uint8_t ph_rot; ///< Phase rotation
51 uint8_t pad; ///< Padding field
52 uint8_t amp[DCA_LBR_CHANNELS]; ///< Per-channel amplitude
53 uint8_t phs[DCA_LBR_CHANNELS]; ///< Per-channel phase
55
56typedef struct DCALbrDecoder {
59
60 int sample_rate; ///< Sample rate of LBR audio
61 int ch_mask; ///< LBR speaker mask
62 int flags; ///< Flags for LBR decoder initialization
63 int bit_rate_orig; ///< Original bit rate
64 int bit_rate_scaled; ///< Scaled bit rate
65
66 int nchannels; ///< Number of fullband channels to decode
67 int nchannels_total; ///< Total number of fullband channels
68 int freq_range; ///< Frequency range of LBR audio
69 int band_limit; ///< Band limit factor
70 int limited_rate; ///< Band limited sample rate
71 int limited_range; ///< Band limited frequency range
72 int res_profile; ///< Resolution profile
73 int nsubbands; ///< Number of encoded subbands
74 int g3_avg_only_start_sb; ///< Subband index where grid 3 scale factors end
75 int min_mono_subband; ///< Subband index where mono encoding starts
76 int max_mono_subband; ///< Subband index where mono encoding ends
77
78 int framenum; ///< Lower 5 bits of current frame number
79 int lbr_rand; ///< Seed for subband randomization
80 int warned; ///< Flags for warning suppression
81
82 uint8_t quant_levels[DCA_LBR_CHANNELS / 2][DCA_LBR_SUBBANDS]; ///< Quantization levels
83 uint8_t sb_indices[DCA_LBR_SUBBANDS]; ///< Subband reordering indices
84
85 uint8_t sec_ch_sbms[DCA_LBR_CHANNELS / 2][DCA_LBR_SUBBANDS]; ///< Right channel inversion or mid/side decoding flags
86 uint8_t sec_ch_lrms[DCA_LBR_CHANNELS / 2][DCA_LBR_SUBBANDS]; ///< Flags indicating if left/right channel are swapped
87 uint32_t ch_pres[DCA_LBR_CHANNELS]; ///< Subband allocation flags
88
89 uint8_t grid_1_scf[DCA_LBR_CHANNELS][12][8]; ///< Grid 1 scale factors
90 uint8_t grid_2_scf[DCA_LBR_CHANNELS][3][64]; ///< Grid 2 scale factors
91
92 int8_t grid_3_avg[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS - 4]; ///< Grid 3 average values
93 int8_t grid_3_scf[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS - 4][8]; ///< Grid 3 scale factors
94 uint32_t grid_3_pres[DCA_LBR_CHANNELS]; ///< Grid 3 scale factors presence flags
95
96 uint8_t high_res_scf[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS][8]; ///< High-frequency resolution scale factors
97
98 uint8_t part_stereo[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS / 4][5]; ///< Partial stereo coefficients
99 uint8_t part_stereo_pres; ///< Partial stereo coefficients presence flags
100
101 float lpc_coeff[2][DCA_LBR_CHANNELS][3][2][8]; ///< Predictor coefficients
102
103 float sb_scf[DCA_LBR_SUBBANDS]; ///< Subband randomization scale factors
104
106
107 float *ts_buffer; ///< Time sample buffer base
108 unsigned int ts_size; ///< Time sample buffer size
109
110 DECLARE_ALIGNED(32, float, history)[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS * 4]; ///< IMDCT history
111 DECLARE_ALIGNED(32, float, window)[DCA_LBR_SUBBANDS * 4]; ///< Long window for IMDCT
112
113 DECLARE_ALIGNED(32, float, lfe_data)[64]; ///< Decimated LFE samples
114 DECLARE_ALIGNED(32, float, lfe_history)[5][2]; ///< LFE IIR filter history
115 float lfe_scale; ///< Scale factor of LFE samples before IIR filter
116
117 uint8_t tonal_scf[6]; ///< Tonal scale factors
118 uint16_t tonal_bounds[5][32][2]; ///< Per-group per-subframe start/end positions of tones
119 DCALbrTone tones[DCA_LBR_TONES]; ///< Circular buffer of tones
120 int ntones; ///< Circular buffer head position
121
127
128int ff_dca_lbr_parse(DCALbrDecoder *s, const uint8_t *data, DCAExssAsset *asset);
134
135#endif
Libavcodec external API header.
#define s(width, name)
Definition cbs_vp9.c:198
int ff_dca_lbr_filter_frame(DCALbrDecoder *s, AVFrame *frame)
Definition dca_lbr.c:1737
#define DCA_LBR_SUBBANDS
Definition dca_lbr.h:36
DCALBRHeader
Definition dca_lbr.h:42
@ DCA_LBR_HEADER_SYNC_ONLY
Definition dca_lbr.h:43
@ DCA_LBR_HEADER_DECODER_INIT
Definition dca_lbr.h:44
av_cold int ff_dca_lbr_init(DCALbrDecoder *s)
Definition dca_lbr.c:1823
#define DCA_LBR_CHANNELS
Definition dca_lbr.h:34
int ff_dca_lbr_parse(DCALbrDecoder *s, const uint8_t *data, DCAExssAsset *asset)
Definition dca_lbr.c:1170
av_cold void ff_dca_lbr_close(DCALbrDecoder *s)
Definition dca_lbr.c:1832
av_cold void ff_dca_lbr_flush(DCALbrDecoder *s)
Definition dca_lbr.c:1799
#define DCA_LBR_TONES
Definition dca_lbr.h:37
av_cold void ff_dca_lbr_init_tables(void)
Definition dca_lbr.c:135
static AVFrame * frame
bitstream reader API header.
#define av_cold
Definition attributes.h:117
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
const char data[16]
Definition mxf.c:149
main external API structure.
Definition avcodec.h:443
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
float lpc_coeff[2][DCA_LBR_CHANNELS][3][2][8]
Predictor coefficients.
Definition dca_lbr.h:101
unsigned int ts_size
Time sample buffer size.
Definition dca_lbr.h:108
int res_profile
Resolution profile.
Definition dca_lbr.h:72
int nchannels
Number of fullband channels to decode.
Definition dca_lbr.h:66
float lfe_data[64]
Decimated LFE samples.
Definition dca_lbr.h:113
int flags
Flags for LBR decoder initialization.
Definition dca_lbr.h:62
float * time_samples[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS]
Time samples.
Definition dca_lbr.h:105
uint8_t grid_2_scf[DCA_LBR_CHANNELS][3][64]
Grid 2 scale factors.
Definition dca_lbr.h:90
uint8_t grid_1_scf[DCA_LBR_CHANNELS][12][8]
Grid 1 scale factors.
Definition dca_lbr.h:89
int min_mono_subband
Subband index where mono encoding starts.
Definition dca_lbr.h:75
int sample_rate
Sample rate of LBR audio.
Definition dca_lbr.h:60
AVTXContext * imdct
Definition dca_lbr.h:122
uint8_t tonal_scf[6]
Tonal scale factors.
Definition dca_lbr.h:117
int framenum
Lower 5 bits of current frame number.
Definition dca_lbr.h:78
float lfe_scale
Scale factor of LFE samples before IIR filter.
Definition dca_lbr.h:115
AVCodecContext * avctx
Definition dca_lbr.h:57
int g3_avg_only_start_sb
Subband index where grid 3 scale factors end.
Definition dca_lbr.h:74
DCADSPContext * dcadsp
Definition dca_lbr.h:125
int bit_rate_scaled
Scaled bit rate.
Definition dca_lbr.h:64
uint8_t high_res_scf[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS][8]
High-frequency resolution scale factors.
Definition dca_lbr.h:96
float lfe_history[5][2]
LFE IIR filter history.
Definition dca_lbr.h:114
AVFloatDSPContext * fdsp
Definition dca_lbr.h:124
uint32_t ch_pres[DCA_LBR_CHANNELS]
Subband allocation flags.
Definition dca_lbr.h:87
float window[DCA_LBR_SUBBANDS *4]
Long window for IMDCT.
Definition dca_lbr.h:111
uint16_t tonal_bounds[5][32][2]
Per-group per-subframe start/end positions of tones.
Definition dca_lbr.h:118
uint32_t grid_3_pres[DCA_LBR_CHANNELS]
Grid 3 scale factors presence flags.
Definition dca_lbr.h:94
int8_t grid_3_avg[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS - 4]
Grid 3 average values.
Definition dca_lbr.h:92
int nsubbands
Number of encoded subbands.
Definition dca_lbr.h:73
uint8_t sec_ch_lrms[DCA_LBR_CHANNELS/2][DCA_LBR_SUBBANDS]
Flags indicating if left/right channel are swapped.
Definition dca_lbr.h:86
int freq_range
Frequency range of LBR audio.
Definition dca_lbr.h:68
av_tx_fn imdct_fn
Definition dca_lbr.h:123
uint8_t sb_indices[DCA_LBR_SUBBANDS]
Subband reordering indices.
Definition dca_lbr.h:83
int ntones
Circular buffer head position.
Definition dca_lbr.h:120
int limited_range
Band limited frequency range.
Definition dca_lbr.h:71
int max_mono_subband
Subband index where mono encoding ends.
Definition dca_lbr.h:76
int limited_rate
Band limited sample rate.
Definition dca_lbr.h:70
int ch_mask
LBR speaker mask.
Definition dca_lbr.h:61
uint8_t part_stereo[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS/4][5]
Partial stereo coefficients.
Definition dca_lbr.h:98
int bit_rate_orig
Original bit rate.
Definition dca_lbr.h:63
uint8_t part_stereo_pres
Partial stereo coefficients presence flags.
Definition dca_lbr.h:99
int8_t grid_3_scf[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS - 4][8]
Grid 3 scale factors.
Definition dca_lbr.h:93
float sb_scf[DCA_LBR_SUBBANDS]
Subband randomization scale factors.
Definition dca_lbr.h:103
float * ts_buffer
Time sample buffer base.
Definition dca_lbr.h:107
int nchannels_total
Total number of fullband channels.
Definition dca_lbr.h:67
int warned
Flags for warning suppression.
Definition dca_lbr.h:80
uint8_t quant_levels[DCA_LBR_CHANNELS/2][DCA_LBR_SUBBANDS]
Quantization levels.
Definition dca_lbr.h:82
GetBitContext gb
Definition dca_lbr.h:58
int band_limit
Band limit factor.
Definition dca_lbr.h:69
float history[DCA_LBR_CHANNELS][DCA_LBR_SUBBANDS *4]
IMDCT history.
Definition dca_lbr.h:110
uint8_t sec_ch_sbms[DCA_LBR_CHANNELS/2][DCA_LBR_SUBBANDS]
Right channel inversion or mid/side decoding flags.
Definition dca_lbr.h:85
int lbr_rand
Seed for subband randomization.
Definition dca_lbr.h:79
DCALbrTone tones[DCA_LBR_TONES]
Circular buffer of tones.
Definition dca_lbr.h:119
uint8_t pad
Padding field.
Definition dca_lbr.h:51
uint8_t amp[DCA_LBR_CHANNELS]
Per-channel amplitude.
Definition dca_lbr.h:52
uint8_t phs[DCA_LBR_CHANNELS]
Per-channel phase.
Definition dca_lbr.h:53
uint8_t f_delt
Difference between original and center frequency.
Definition dca_lbr.h:49
uint8_t ph_rot
Phase rotation.
Definition dca_lbr.h:50
uint8_t x_freq
Spectral line offset.
Definition dca_lbr.h:48
void(* av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride)
Function pointer to a function to perform the transform.
Definition tx.h:151