blob: bc0aa65b1af3df4654423a79cc67f5e98479d1ee
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_XLL_H |
22 | #define AVCODEC_DCA_XLL_H |
23 | |
24 | #include "libavutil/common.h" |
25 | #include "libavutil/mem.h" |
26 | |
27 | #include "avcodec.h" |
28 | #include "internal.h" |
29 | #include "get_bits.h" |
30 | #include "dca.h" |
31 | #include "dcadsp.h" |
32 | #include "dca_exss.h" |
33 | |
34 | #define DCA_XLL_CHSETS_MAX 3 |
35 | #define DCA_XLL_CHANNELS_MAX 8 |
36 | #define DCA_XLL_BANDS_MAX 2 |
37 | #define DCA_XLL_ADAPT_PRED_ORDER_MAX 16 |
38 | #define DCA_XLL_DECI_HISTORY_MAX 8 |
39 | #define DCA_XLL_DMIX_SCALES_MAX ((DCA_XLL_CHSETS_MAX - 1) * DCA_XLL_CHANNELS_MAX) |
40 | #define DCA_XLL_DMIX_COEFFS_MAX (DCA_XLL_DMIX_SCALES_MAX * DCA_XLL_CHANNELS_MAX) |
41 | #define DCA_XLL_PBR_BUFFER_MAX (240 << 10) |
42 | #define DCA_XLL_SAMPLE_BUFFERS_MAX 3 |
43 | |
44 | typedef struct DCAXllBand { |
45 | int decor_enabled; ///< Pairwise channel decorrelation flag |
46 | int orig_order[DCA_XLL_CHANNELS_MAX]; ///< Original channel order |
47 | int decor_coeff[DCA_XLL_CHANNELS_MAX / 2]; ///< Pairwise channel coefficients |
48 | |
49 | int adapt_pred_order[DCA_XLL_CHANNELS_MAX]; ///< Adaptive predictor order |
50 | int highest_pred_order; ///< Highest adaptive predictor order |
51 | int fixed_pred_order[DCA_XLL_CHANNELS_MAX]; ///< Fixed predictor order |
52 | int adapt_refl_coeff[DCA_XLL_CHANNELS_MAX][DCA_XLL_ADAPT_PRED_ORDER_MAX]; ///< Adaptive predictor reflection coefficients |
53 | |
54 | int dmix_embedded; ///< Downmix performed by encoder in frequency band |
55 | |
56 | int lsb_section_size; ///< Size of LSB section in any segment |
57 | int nscalablelsbs[DCA_XLL_CHANNELS_MAX]; ///< Number of bits to represent the samples in LSB part |
58 | int bit_width_adjust[DCA_XLL_CHANNELS_MAX]; ///< Number of bits discarded by authoring |
59 | |
60 | int32_t *msb_sample_buffer[DCA_XLL_CHANNELS_MAX]; ///< MSB sample buffer pointers |
61 | int32_t *lsb_sample_buffer[DCA_XLL_CHANNELS_MAX]; ///< LSB sample buffer pointers or NULL |
62 | } DCAXllBand; |
63 | |
64 | typedef struct DCAXllChSet { |
65 | // Channel set header |
66 | int nchannels; ///< Number of channels in the channel set (N) |
67 | int residual_encode; ///< Residual encoding mask (0 - residual, 1 - full channel) |
68 | int pcm_bit_res; ///< PCM bit resolution (variable) |
69 | int storage_bit_res; ///< Storage bit resolution (16 or 24) |
70 | int freq; ///< Original sampling frequency (max. 96000 Hz) |
71 | |
72 | int primary_chset; ///< Primary channel set flag |
73 | int dmix_coeffs_present; ///< Downmix coefficients present in stream |
74 | int dmix_embedded; ///< Downmix already performed by encoder |
75 | int dmix_type; ///< Primary channel set downmix type |
76 | int hier_chset; ///< Whether the channel set is part of a hierarchy |
77 | int hier_ofs; ///< Number of preceding channels in a hierarchy (M) |
78 | int dmix_coeff[DCA_XLL_DMIX_COEFFS_MAX]; ///< Downmixing coefficients |
79 | int dmix_scale[DCA_XLL_DMIX_SCALES_MAX]; ///< Downmixing scales |
80 | int dmix_scale_inv[DCA_XLL_DMIX_SCALES_MAX]; ///< Inverse downmixing scales |
81 | int ch_mask; ///< Channel mask for set |
82 | int ch_remap[DCA_XLL_CHANNELS_MAX]; ///< Channel to speaker map |
83 | |
84 | int nfreqbands; ///< Number of frequency bands (1 or 2) |
85 | int nabits; ///< Number of bits to read bit allocation coding parameter |
86 | |
87 | DCAXllBand bands[DCA_XLL_BANDS_MAX]; ///< Frequency bands |
88 | |
89 | // Frequency band coding parameters |
90 | int seg_common; ///< Segment type |
91 | int rice_code_flag[DCA_XLL_CHANNELS_MAX]; ///< Rice coding flag |
92 | int bitalloc_hybrid_linear[DCA_XLL_CHANNELS_MAX]; ///< Binary code length for isolated samples |
93 | int bitalloc_part_a[DCA_XLL_CHANNELS_MAX]; ///< Coding parameter for part A of segment |
94 | int bitalloc_part_b[DCA_XLL_CHANNELS_MAX]; ///< Coding parameter for part B of segment |
95 | int nsamples_part_a[DCA_XLL_CHANNELS_MAX]; ///< Number of samples in part A of segment |
96 | |
97 | // Decimator history |
98 | DECLARE_ALIGNED(32, int32_t, deci_history)[DCA_XLL_CHANNELS_MAX][DCA_XLL_DECI_HISTORY_MAX]; ///< Decimator history for frequency band 1 |
99 | |
100 | // Sample buffers |
101 | unsigned int sample_size[DCA_XLL_SAMPLE_BUFFERS_MAX]; |
102 | int32_t *sample_buffer[DCA_XLL_SAMPLE_BUFFERS_MAX]; |
103 | } DCAXllChSet; |
104 | |
105 | typedef struct DCAXllDecoder { |
106 | AVCodecContext *avctx; |
107 | GetBitContext gb; |
108 | |
109 | int frame_size; ///< Number of bytes in a lossless frame |
110 | int nchsets; ///< Number of channels sets per frame |
111 | int nframesegs; ///< Number of segments per frame |
112 | int nsegsamples_log2; ///< log2(nsegsamples) |
113 | int nsegsamples; ///< Samples in segment per one frequency band |
114 | int nframesamples_log2; ///< log2(nframesamples) |
115 | int nframesamples; ///< Samples in frame per one frequency band |
116 | int seg_size_nbits; ///< Number of bits used to read segment size |
117 | int band_crc_present; ///< Presence of CRC16 within each frequency band |
118 | int scalable_lsbs; ///< MSB/LSB split flag |
119 | int ch_mask_nbits; ///< Number of bits used to read channel mask |
120 | int fixed_lsb_width; ///< Fixed LSB width |
121 | |
122 | DCAXllChSet chset[DCA_XLL_CHSETS_MAX]; ///< Channel sets |
123 | |
124 | int *navi; ///< NAVI table |
125 | unsigned int navi_size; |
126 | |
127 | int nfreqbands; ///< Highest number of frequency bands |
128 | int nchannels; ///< Total number of channels in a hierarchy |
129 | int nreschsets; ///< Number of channel sets that have residual encoded channels |
130 | int nactivechsets; ///< Number of active channel sets to decode |
131 | |
132 | int hd_stream_id; ///< Previous DTS-HD stream ID for detecting changes |
133 | |
134 | uint8_t *pbr_buffer; ///< Peak bit rate (PBR) smoothing buffer |
135 | int pbr_length; ///< Length in bytes of data currently buffered |
136 | int pbr_delay; ///< Delay in frames before decoding buffered data |
137 | |
138 | DCADSPContext *dcadsp; |
139 | |
140 | int output_mask; |
141 | int32_t *output_samples[DCA_SPEAKER_COUNT]; |
142 | } DCAXllDecoder; |
143 | |
144 | int ff_dca_xll_parse(DCAXllDecoder *s, uint8_t *data, DCAExssAsset *asset); |
145 | int ff_dca_xll_filter_frame(DCAXllDecoder *s, AVFrame *frame); |
146 | av_cold void ff_dca_xll_flush(DCAXllDecoder *s); |
147 | av_cold void ff_dca_xll_close(DCAXllDecoder *s); |
148 | |
149 | #endif |
150 |