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
22
24 {
25 // Size of XLL data in extension substream
27
28 // XLL sync word present flag
30 int xll_delay_nbits;
31
32 // Peak bit rate smoothing buffer size
34
35 // Number of bits for XLL decoding delay
36 xll_delay_nbits =
get_bits(&
s->gb, 5) + 1;
37
38 // Initial XLL decoding delay in frames
40
41 // Number of bytes offset to XLL sync
43 } else {
46 }
47 }
48
50 {
51 // Size of LBR component in extension substream
53
54 // LBR sync word present flag
56 // LBR sync distance
58 }
59
61 {
63
64 // Size of audio asset descriptor in bytes
66
67 // Audio asset identifier
69
70 //
71 // Per stream static metadata
72 //
73
74 if (
s->static_fields_present) {
75 // Asset type descriptor presence
77 // Asset type descriptor
79
80 // Language descriptor presence
82 // Language descriptor
84
85 // Additional textual information presence
87 // Byte size of additional text info
89
90 // Sanity check available size
93
94 // Additional textual information string
96 }
97
98 // PCM bit resolution
100
101 // Maximum sample rate
103
104 // Total number of channels
106
107 // One to one map channel to speakers
109 int spkr_mask_nbits = 0;
110 int spkr_remap_nsets;
111 int nspeakers[8];
112
113 // Embedded stereo flag
115
116 // Embedded 6 channels flag
118
119 // Speaker mask enabled flag
121 // Number of bits for speaker activity mask
122 spkr_mask_nbits = (
get_bits(&
s->gb, 2) + 1) << 2;
123
124 // Loudspeaker activity mask
126 }
127
128 // Number of speaker remapping sets
129 if ((spkr_remap_nsets =
get_bits(&
s->gb, 3)) && !spkr_mask_nbits) {
133 }
134
135 // Standard loudspeaker layout mask
136 for (
i = 0;
i < spkr_remap_nsets;
i++)
138
139 for (
i = 0;
i < spkr_remap_nsets;
i++) {
140 // Number of channels to be decoded for speaker remapping
141 int nch_for_remaps =
get_bits(&
s->gb, 5) + 1;
142
143 for (j = 0; j < nspeakers[
i]; j++) {
144 // Decoded channels to output speaker mapping mask
146
147 // Loudspeaker remapping codes
149 }
150 }
151 } else {
156
157 // Representation type
159 }
160 }
161
162 //
163 // DRC, DNC and mixing metadata
164 //
165
166 // Dynamic range coefficient presence flag
168
169 // Code for dynamic range coefficient
170 if (drc_present)
172
173 // Dialog normalization presence flag
175 // Dialog normalization code
177
178 // DRC for stereo downmix
181
182 // Mixing metadata presence flag
183 if (
s->mix_metadata_enabled &&
get_bits1(&
s->gb)) {
184 int nchannels_dmix;
185
186 // External mixing flag
188
189 // Post mixing / replacement gain adjustment
191
192 // DRC prior to mixing
194 // Custom code for mixing DRC
196 else
197 // Limit for mixing DRC
199
200 // Scaling type for channels of main audio
201 // Scaling parameters of main audio
203 for (
i = 0;
i <
s->nmixoutconfigs;
i++)
205 else
207
210 nchannels_dmix += 6;
212 nchannels_dmix += 2;
213
214 for (
i = 0;
i <
s->nmixoutconfigs;
i++) {
215 if (!
s->nmixoutchs[
i]) {
219 }
220 for (j = 0; j < nchannels_dmix; j++) {
221 // Mix output mask
222 int mix_map_mask =
get_bits(&
s->gb,
s->nmixoutchs[
i]);
223
224 // Mixing coefficients
226 }
227 }
228 }
229
230 //
231 // Decoder navigation data
232 //
233
234 // Coding mode for the asset
236
237 // Coding components used in asset
239 case 0: // Coding mode that may contain multiple coding components
241
243 // Size of core component in extension substream
245 // Core sync word present flag
247 // Core sync distance
249 }
250
252 // Size of XBR extension in extension substream
254
256 // Size of XXCH extension in extension substream
258
260 // Size of X96 extension in extension substream
262
265
268
271
274 break;
275
276 case 1: // Loss-less coding mode without CBR component
279 break;
280
281 case 2: // Low bit rate mode
284 break;
285
286 case 3: // Auxiliary coding mode
288
289 // Size of auxiliary coded data
291
292 // Auxiliary codec identification
294
295 // Aux sync word present flag
297 // Aux sync distance
299 break;
300 }
301
303 // DTS-HD stream ID
305
306 // One to one mixing flag
307 // Per channel main audio scaling flag
308 // Main audio scaling codes
309 // Decode asset in secondary decoder flag
310 // Revision 2 DRC metadata
311 // Reserved
312 // Zero pad
317 }
318
319 return 0;
320 }
321
323 {
326
333 }
334
341 }
342
349 }
350
357 }
358
365 }
366
373 }
374
375 return 0;
376 }
377
379 {
381
384
385 // Extension substream sync word
387
388 // User defined bits
390
391 // Extension substream index
393
394 // Flag indicating short or long header size
396
397 // Extension substream header length
398 header_size =
get_bits(&
s->gb, 8 + 4 * wide_hdr) + 1;
399
400 // Check CRC
404 }
405
406 s->exss_size_nbits = 16 + 4 * wide_hdr;
407
408 // Number of bytes of extension substream
409 s->exss_size =
get_bits(&
s->gb,
s->exss_size_nbits) + 1;
410 if (
s->exss_size >
size) {
414 }
415
416 // Per stream static fields presence flag
417 if (
s->static_fields_present =
get_bits1(&
s->gb)) {
418 int active_exss_mask[8];
419
420 // Reference clock code
422
423 // Extension substream frame duration
425
426 // Timecode presence flag
428 // Timecode data
430
431 // Number of defined audio presentations
433 if (
s->npresents > 1) {
437 }
438
439 // Number of audio assets in extension substream
441 if (
s->nassets > 1) {
445 }
446
447 // Active extension substream mask for audio presentation
448 for (
i = 0;
i <
s->npresents;
i++)
449 active_exss_mask[
i] =
get_bits(&
s->gb,
s->exss_index + 1);
450
451 // Active audio asset mask
452 for (
i = 0;
i <
s->npresents;
i++)
454
455 // Mixing metadata enable flag
457 int spkr_mask_nbits;
458
459 // Mixing metadata adjustment level
461
462 // Number of bits for mixer output speaker activity mask
463 spkr_mask_nbits = (
get_bits(&
s->gb, 2) + 1) << 2;
464
465 // Number of mixing configurations
467
468 // Speaker layout mask for mixer output channels
469 for (
i = 0;
i <
s->nmixoutconfigs;
i++)
471 }
472 } else {
475 }
476
477 // Size of encoded asset data in bytes
479 for (
i = 0;
i <
s->nassets;
i++) {
481 s->assets[
i].asset_size =
get_bits(&
s->gb,
s->exss_size_nbits) + 1;
487 }
488 }
489
490 // Audio asset descriptor
491 for (
i = 0;
i <
s->nassets;
i++) {
498 }
499 }
500
501 // Backward compatible core present
502 // Backward compatible core substream index
503 // Backward compatible core asset index
504 // Reserved
505 // Byte align
506 // CRC16 of extension substream header
511 }
512
513 return 0;
514 }