1 /***************************************************************************** 2 * dts.h 3 ***************************************************************************** 4 * Copyright (C) 2012-2017 L-SMASH project 5 * 6 * Authors: Yusuke Nakamura <muken.the.vfrmaniac@gmail.com> 7 * 8 * Permission to use, copy, modify, and/or distribute this software for any 9 * purpose with or without fee is hereby granted, provided that the above 10 * copyright notice and this permission notice appear in all copies. 11 * 12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19 *****************************************************************************/ 20 21 /* This file is available under an ISC license. */ 22 23 #define DTS_MAX_CORE_SIZE 16384 24 #define DTS_MAX_EXSS_SIZE 32768 25 #define DTS_MAX_NUM_EXSS 4 /* the maximum number of extension substreams */ 26 27 typedef enum 28 { 29 DTS_SUBSTREAM_TYPE_NONE = 0, 30 DTS_SUBSTREAM_TYPE_CORE = 1, 31 DTS_SUBSTREAM_TYPE_EXTENSION = 2, 32 } dts_substream_type; 33 34 typedef struct 35 { 36 uint16_t size; 37 uint16_t channel_layout; 38 uint8_t lower_planes; /* CL, LL and RL */ 39 } dts_xxch_info_t; 40 41 typedef struct 42 { 43 uint32_t sampling_frequency; 44 uint32_t frame_duration; 45 uint16_t frame_size; 46 uint16_t channel_layout; 47 uint8_t channel_arrangement; 48 uint8_t extension_audio_descriptor; 49 uint8_t pcm_resolution; 50 dts_xxch_info_t xxch; 51 } dts_core_info_t; 52 53 typedef struct 54 { 55 uint16_t size; 56 uint16_t channel_layout; 57 uint32_t sampling_frequency; 58 uint32_t frame_duration; 59 uint8_t pcm_resolution; 60 uint8_t stereo_downmix; 61 uint8_t lower_planes; /* CL, LL and RL */ 62 uint8_t dtsx_extension_present; 63 } dts_xll_info_t; 64 65 typedef struct 66 { 67 uint16_t size; 68 uint16_t channel_layout; 69 uint32_t sampling_frequency; 70 uint32_t frame_duration; 71 uint8_t stereo_downmix; 72 uint8_t lfe_present; 73 uint8_t duration_modifier; 74 uint8_t sample_size; 75 } dts_lbr_info_t; 76 77 typedef struct 78 { 79 uint32_t size; 80 uint16_t channel_layout; 81 uint8_t bOne2OneMapChannels2Speakers; 82 uint8_t nuRepresentationType; 83 uint8_t nuCodingMode; 84 lsmash_dts_construction_flag nuCoreExtensionMask; 85 dts_core_info_t core; 86 dts_xll_info_t xll; 87 dts_lbr_info_t lbr; 88 uint16_t xbr_size; 89 uint16_t x96_size; 90 uint16_t aux_size; 91 } dts_audio_asset_t; 92 93 typedef struct 94 { 95 uint32_t sampling_frequency; 96 uint32_t frame_duration; 97 uint8_t nuBits4ExSSFsize; 98 uint8_t bStaticFieldsPresent; 99 uint8_t bMixMetadataEnbl; 100 uint8_t nuNumMixOutConfigs; 101 uint8_t nNumMixOutCh[4]; 102 uint8_t nuNumAudioPresnt; 103 uint8_t nuNumAssets; 104 uint8_t nuActiveExSSMask[8]; 105 uint8_t nuActiveAssetMask[8][4]; 106 uint8_t bBcCorePresent[8]; 107 uint8_t nuBcCoreExtSSIndex[8]; 108 uint8_t nuBcCoreAssetIndex[8]; 109 uint8_t stereo_downmix; 110 uint8_t bit_resolution; 111 dts_audio_asset_t asset[8]; 112 } dts_extension_info_t; 113 114 typedef struct 115 { 116 dts_substream_type substream_type; 117 lsmash_dts_construction_flag flags; 118 lsmash_dts_specific_parameters_t ddts_param; 119 dts_core_info_t core; /* core component and its extensions in core substream */ 120 dts_extension_info_t exss[4]; /* extension substreams */ 121 uint8_t ddts_param_initialized; 122 uint8_t exss_index; 123 uint8_t exss_count; 124 uint32_t frame_duration; 125 uint32_t frame_size; /* size of substream */ 126 lsmash_bits_t *bits; 127 } dts_info_t; 128 129 void dts_setup_parser( dts_info_t *info ); 130 int dts_parse_core_substream( dts_info_t *info ); 131 int dts_parse_extension_substream( dts_info_t *info ); 132 int dts_get_max_channel_count( dts_info_t *info ); 133 dts_substream_type dts_get_substream_type( dts_info_t *info ); 134 int dts_get_exss_index( dts_info_t *info, uint8_t *exss_index ); 135 void dts_update_specific_param( dts_info_t *info ); 136