孩子晚上睡觉磨牙是什么原因| 吃什么防止脱发掉发| 美妙绝伦是什么意思| 丹参片和复方丹参片有什么区别| 哺乳期抽烟对宝宝有什么影响| 牙齿突然酸痛什么原因| 西元前是什么意思| bpd是胎儿的什么| 玉米什么时候传入中国| 中观是什么意思| 左上腹疼是什么原因| 胃底腺息肉是什么意思| igg阳性是什么意思| 拔牙之后吃什么消炎药| 把妹什么意思| 激素六项都是查什么| 趾高气昂是什么意思| 化工厂是干什么的| 苦瓜不能跟什么一起吃| 肺气肿什么症状| 但爱鲈鱼美的但是什么意思| 锋芒的意思是什么| 芦笋不能和什么一起吃| 总是拉稀是什么原因| 电离辐射是指什么| 胃窦炎吃什么药效果最好| 牙为什么会疼| 泉中水是什么生肖| 疫苗是什么| 农历六月十七是什么日子| 舌头尖疼吃什么药| 鼻子干痒是什么原因| 2025什么年| 经常尿路感染是什么原因| 357是什么意思| 矢车菊在中国叫什么名| 不出汗是什么原因| 太平猴魁属于什么茶| 拉稀吃什么药最有效果| 爱新觉罗是什么意思| 子母环是什么形状图片| 花木兰属什么生肖| 米加白念什么| 泡脚出汗有什么好处| 什么是眼底病| 出伏是什么意思| 医院规培生是什么意思| 什么水果是温性的| 雌二醇过高是什么原因| 吃什么容易便秘| 1度房室传导阻滞是什么意思| 十一月十五号是什么星座| 包皮炎是什么症状| 国家主席是什么级别| 12月9号是什么星座| 犯困是什么原因| 什么是远视眼| 猪八戒姓什么| 玉髓是什么| 尿出血是什么原因| 1921年是什么年| national是什么牌子| 睡觉被口水呛醒是什么原因| 双眼屈光不正是什么意思| 吃什么药升血小板最快| 刘备的马叫什么名字| 新蒜什么时候上市| 滴虫是什么| 做肠镜前一天可以吃什么| picc是什么| 外阴是指什么部位| 重字五行属什么| 狮子座是什么象| 葡萄糖偏低是什么意思| 驻马店有什么大学| 经常生病是什么原因| 为什么呢| 为什么不能随便看手相| sahara是什么牌子| 本帮菜是什么意思| 抗巨细胞病毒抗体igg高是什么意思| 中央民族大学什么档次| p医学代表什么意思| fdp是什么意思| 化疗病人吃什么好| 井里面一个点念什么| 胆红素高是什么意思| 促甲状腺素低是什么原因| 大姨妈为什么会推迟| 怀孕该吃什么补充营养| 涵字五行属什么| 告示是什么意思| 龄字五行属什么| 屁股一侧疼是什么原因| 猫拉稀吃什么药| 宫缩是什么原因引起的| 晨尿浑浊是什么原因| 来龙去脉指什么生肖| 什么是七七事变| 县长什么级别| 红斑狼疮是一种什么病| 4个火读什么| 为什么会一直流鼻涕| 腰椎间盘突出有什么症状| 什么面膜好用| 减肥喝什么水| 一贫如什么| 身体缺钾是什么原因造成的| 周六左眼跳是什么预兆| 胎位 头位是什么意思| 肚子咕噜咕噜响是什么原因| 方得始终什么意思| 人为什么要呼吸| 形声字是什么意思| 大表哥是什么游戏| 大败是什么意思| 人授后吃什么容易着床| 黑金刚是什么药| 坐是什么结构| 大便为什么是黑色的是什么原因| 老虎菜为什么叫老虎菜| 自我价值是什么意思| 丫丫的老公叫什么| 氰化钾是什么| 团委书记是什么级别| 焦点是什么意思| 胃窦溃疡a1期是什么意思| 梦见老公穿新衣服是什么意思| 孕妇为什么不能参加婚礼| 321是什么意思| 小孩放臭屁是什么原因| 小狗是什么意思| 三点水一个高念什么| 精液发红是什么原因| 电音是什么意思| 三高挂号挂什么科| 淋巴炎吃什么药| 48是什么意思| wm是什么牌子| 张伦硕为什么娶钟丽缇| loreal是什么品牌| 什么是绘本| 为什么心里总想一个人| 张国荣属什么生肖| 21三体高风险是什么意思| 脾稍大什么意思| 彼岸花是什么花| 每天早上起床口苦是什么原因| 芒种是什么季节| 一诺千金是什么生肖| 血糖高能喝什么茶| 八带是什么| 给女生送礼物送什么好| 弼马温是什么意思| ivory是什么意思| 野生铁皮石斛什么价| 长白头发缺什么维生素| 手指头痒是什么原因| 神经内科主要看什么病| 菜籽油是什么菜籽做的| 尿频尿急尿不尽挂什么科| 什么情况下月经推迟| 天天吹空调有什么危害| 烧仙草是什么东西| 女人喝什么调节内分泌| 妈妈的弟弟的老婆叫什么| 偶发室上性早搏是什么意思| 例假可以吃什么水果| 肚子胀痛什么原因| 下水是什么意思| 天秤座是什么性格| 为什么会得偏头痛| 妇科凝胶排出的是什么| 吃柿子有什么好处和坏处| 神经性梅毒有什么症状| 疯狂动物城狐狸叫什么| 北京属于什么方向| 日本为什么经常地震| 九月开什么花| 血常规能查出什么病| 便秘应该挂什么科室| 桃子不能和什么水果一起吃| 7月属于什么季节| 巡视员是什么级别| 西四命是什么意思| 1998属什么| 略是什么意思| 感冒什么症状| 腱鞘炎在什么位置| 嫩模是什么意思| 脸上起红疙瘩是什么原因| 女性分泌物增多发黄是什么原因| 得水痘不能吃什么| 北阳台适合种什么植物| led灯是什么| 珞字五行属什么| 偏激是什么意思| 议论纷纷是什么意思| 白领是什么职业| 恍惚什么意思| 待定是什么意思| 每天一杯蜂蜜水有什么好处| 铁娘子是什么意思| 明月照沟渠是什么意思| 男人小腿肿是什么原因| 的确良是什么面料| 丙氨酸氨基转移酶是查什么的| co什么意思| 前列腺增生吃什么药效果最好| 西天取经是什么意思| 苟且是什么意思| 是什么品牌| 攻击是什么意思| 尿路感染检查什么项目| 蒙古国什么时候独立的| 早上5点多是什么时辰| 中暑吃什么药好| 肠胃炎吃什么消炎药| 泽去掉三点水念什么| 狗与什么属相相冲| 脑血管狭窄吃什么药| 祛斑产品什么好| 结肠炎有什么症状表现| 婴儿坐飞机需要什么证件| 戒备心是什么意思| 什么叫做光合作用| 狐臭和汗臭有什么区别| 为什么头发会变白| 玉的五行属性是什么| 令加瓦读什么| c反应蛋白偏高是什么原因| 为什么老是想睡觉| 夏天白鸽煲什么汤最好| 清道夫鱼为什么不能吃| 四点是什么时辰| 碳14是检查什么的| 飞蚊症是什么| 心肌缺血吃什么中药| 拔罐黑紫色说明什么| 早上七点是什么时辰| 净土的意思是什么| p波代表什么| 力所能及什么意思| 宫颈hpv感染是什么病| 马岱字什么| 孕妇忌吃什么| 女人做梦哭醒预示什么| apm是什么品牌| aww是什么意思| 葡萄和提子有什么区别| 怀孕前有什么症状| 蒸桑拿是什么意思| 金针菇为什么不能消化| 张艺谋为什么不娶巩俐| 回眸一笑百媚生什么意思| 兰州大学什么专业最好| 孕妇可以吃什么水果| 皮夹克是什么意思| 老婆生日送什么鲜花| 什么奶茶好喝| 急性化脓性扁桃体炎吃什么药| 隐血试验阴性是什么意思| 滴虫性阴炎有什么症状表现| 12月份什么星座| 百度

福州市工商联(总商会)召开第十四次代表大会


Directory: ../../../ffmpeg/
File: src/libavcodec/dca_exss.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 125 235 53.2%
Functions: 4 5 80.0%
Branches: 79 171 46.2%

Line Branch Exec Source
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 #include "dcadec.h"
22
23 1395 static void parse_xll_parameters(DCAExssParser *s, DCAExssAsset *asset)
24 {
25 // Size of XLL data in extension substream
26 1395 asset->xll_size = get_bits(&s->gb, s->exss_size_nbits) + 1;
27
28 // XLL sync word present flag
29
1/2
✓ Branch 1 taken 1395 times.
✗ Branch 2 not taken.
1395 if (asset->xll_sync_present = get_bits1(&s->gb)) {
30 int xll_delay_nbits;
31
32 // Peak bit rate smoothing buffer size
33 1395 skip_bits(&s->gb, 4);
34
35 // Number of bits for XLL decoding delay
36 1395 xll_delay_nbits = get_bits(&s->gb, 5) + 1;
37
38 // Initial XLL decoding delay in frames
39 1395 asset->xll_delay_nframes = get_bits_long(&s->gb, xll_delay_nbits);
40
41 // Number of bytes offset to XLL sync
42 1395 asset->xll_sync_offset = get_bits(&s->gb, s->exss_size_nbits);
43 } else {
44 asset->xll_delay_nframes = 0;
45 asset->xll_sync_offset = 0;
46 }
47 1395 }
48
49 static void parse_lbr_parameters(DCAExssParser *s, DCAExssAsset *asset)
50 {
51 // Size of LBR component in extension substream
52 asset->lbr_size = get_bits(&s->gb, 14) + 1;
53
54 // LBR sync word present flag
55 if (get_bits1(&s->gb))
56 // LBR sync distance
57 skip_bits(&s->gb, 2);
58 }
59
60 1459 static int parse_descriptor(DCAExssParser *s, DCAExssAsset *asset)
61 {
62 1459 int i, j, drc_present, descr_size, descr_pos = get_bits_count(&s->gb);
63
64 // Size of audio asset descriptor in bytes
65 1459 descr_size = get_bits(&s->gb, 9) + 1;
66
67 // Audio asset identifier
68 1459 asset->asset_index = get_bits(&s->gb, 3);
69
70 //
71 // Per stream static metadata
72 //
73
74
1/2
✓ Branch 0 taken 1459 times.
✗ Branch 1 not taken.
1459 if (s->static_fields_present) {
75 // Asset type descriptor presence
76
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (get_bits1(&s->gb))
77 // Asset type descriptor
78 skip_bits(&s->gb, 4);
79
80 // Language descriptor presence
81
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (get_bits1(&s->gb))
82 // Language descriptor
83 skip_bits(&s->gb, 24);
84
85 // Additional textual information presence
86
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (get_bits1(&s->gb)) {
87 // Byte size of additional text info
88 int text_size = get_bits(&s->gb, 10) + 1;
89
90 // Sanity check available size
91 if (get_bits_left(&s->gb) < text_size * 8)
92 return AVERROR_INVALIDDATA;
93
94 // Additional textual information string
95 skip_bits_long(&s->gb, text_size * 8);
96 }
97
98 // PCM bit resolution
99 1459 asset->pcm_bit_res = get_bits(&s->gb, 5) + 1;
100
101 // Maximum sample rate
102 1459 asset->max_sample_rate = ff_dca_sampling_freqs[get_bits(&s->gb, 4)];
103
104 // Total number of channels
105 1459 asset->nchannels_total = get_bits(&s->gb, 8) + 1;
106
107 // One to one map channel to speakers
108
1/2
✓ Branch 1 taken 1459 times.
✗ Branch 2 not taken.
1459 if (asset->one_to_one_map_ch_to_spkr = get_bits1(&s->gb)) {
109 1459 int spkr_mask_nbits = 0;
110 int spkr_remap_nsets;
111 int nspeakers[8];
112
113 // Embedded stereo flag
114
3/4
✓ Branch 0 taken 1459 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 48 times.
✓ Branch 4 taken 1411 times.
1459 asset->embedded_stereo = asset->nchannels_total > 2 && get_bits1(&s->gb);
115
116 // Embedded 6 channels flag
117
3/4
✓ Branch 0 taken 1334 times.
✓ Branch 1 taken 125 times.
✓ Branch 3 taken 1334 times.
✗ Branch 4 not taken.
1459 asset->embedded_6ch = asset->nchannels_total > 6 && get_bits1(&s->gb);
118
119 // Speaker mask enabled flag
120
1/2
✓ Branch 1 taken 1459 times.
✗ Branch 2 not taken.
1459 if (asset->spkr_mask_enabled = get_bits1(&s->gb)) {
121 // Number of bits for speaker activity mask
122 1459 spkr_mask_nbits = (get_bits(&s->gb, 2) + 1) << 2;
123
124 // Loudspeaker activity mask
125 1459 asset->spkr_mask = get_bits(&s->gb, spkr_mask_nbits);
126 }
127
128 // Number of speaker remapping sets
129
3/4
✓ Branch 1 taken 1182 times.
✓ Branch 2 taken 277 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1182 times.
1459 if ((spkr_remap_nsets = get_bits(&s->gb, 3)) && !spkr_mask_nbits) {
130 if (s->avctx)
131 av_log(s->avctx, AV_LOG_ERROR, "Speaker mask disabled yet there are remapping sets\n");
132 return AVERROR_INVALIDDATA;
133 }
134
135 // Standard loudspeaker layout mask
136
2/2
✓ Branch 0 taken 7092 times.
✓ Branch 1 taken 1459 times.
8551 for (i = 0; i < spkr_remap_nsets; i++)
137 7092 nspeakers[i] = ff_dca_count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
138
139
2/2
✓ Branch 0 taken 7092 times.
✓ Branch 1 taken 1459 times.
8551 for (i = 0; i < spkr_remap_nsets; i++) {
140 // Number of channels to be decoded for speaker remapping
141 7092 int nch_for_remaps = get_bits(&s->gb, 5) + 1;
142
143
2/2
✓ Branch 0 taken 56736 times.
✓ Branch 1 taken 7092 times.
63828 for (j = 0; j < nspeakers[i]; j++) {
144 // Decoded channels to output speaker mapping mask
145 56736 int remap_ch_mask = get_bits_long(&s->gb, nch_for_remaps);
146
147 // Loudspeaker remapping codes
148 56736 skip_bits_long(&s->gb, av_popcount(remap_ch_mask) * 5);
149 }
150 }
151 } else {
152 asset->embedded_stereo = 0;
153 asset->embedded_6ch = 0;
154 asset->spkr_mask_enabled = 0;
155 asset->spkr_mask = 0;
156
157 // Representation type
158 asset->representation_type = get_bits(&s->gb, 3);
159 }
160 }
161
162 //
163 // DRC, DNC and mixing metadata
164 //
165
166 // Dynamic range coefficient presence flag
167 1459 drc_present = get_bits1(&s->gb);
168
169 // Code for dynamic range coefficient
170
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (drc_present)
171 skip_bits(&s->gb, 8);
172
173 // Dialog normalization presence flag
174
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (get_bits1(&s->gb))
175 // Dialog normalization code
176 skip_bits(&s->gb, 5);
177
178 // DRC for stereo downmix
179
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1459 if (drc_present && asset->embedded_stereo)
180 skip_bits(&s->gb, 8);
181
182 // Mixing metadata presence flag
183
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1459 if (s->mix_metadata_enabled && get_bits1(&s->gb)) {
184 int nchannels_dmix;
185
186 // External mixing flag
187 skip_bits1(&s->gb);
188
189 // Post mixing / replacement gain adjustment
190 skip_bits(&s->gb, 6);
191
192 // DRC prior to mixing
193 if (get_bits(&s->gb, 2) == 3)
194 // Custom code for mixing DRC
195 skip_bits(&s->gb, 8);
196 else
197 // Limit for mixing DRC
198 skip_bits(&s->gb, 3);
199
200 // Scaling type for channels of main audio
201 // Scaling parameters of main audio
202 if (get_bits1(&s->gb))
203 for (i = 0; i < s->nmixoutconfigs; i++)
204 skip_bits_long(&s->gb, 6 * s->nmixoutchs[i]);
205 else
206 skip_bits_long(&s->gb, 6 * s->nmixoutconfigs);
207
208 nchannels_dmix = asset->nchannels_total;
209 if (asset->embedded_6ch)
210 nchannels_dmix += 6;
211 if (asset->embedded_stereo)
212 nchannels_dmix += 2;
213
214 for (i = 0; i < s->nmixoutconfigs; i++) {
215 if (!s->nmixoutchs[i]) {
216 if (s->avctx)
217 av_log(s->avctx, AV_LOG_ERROR, "Invalid speaker layout mask for mixing configuration\n");
218 return AVERROR_INVALIDDATA;
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
225 skip_bits_long(&s->gb, av_popcount(mix_map_mask) * 6);
226 }
227 }
228 }
229
230 //
231 // Decoder navigation data
232 //
233
234 // Coding mode for the asset
235 1459 asset->coding_mode = get_bits(&s->gb, 2);
236
237 // Coding components used in asset
238
2/5
✓ Branch 0 taken 1438 times.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1459 switch (asset->coding_mode) {
239 1438 case 0: // Coding mode that may contain multiple coding components
240 1438 asset->extension_mask = get_bits(&s->gb, 12);
241
242
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1438 times.
1438 if (asset->extension_mask & DCA_EXSS_CORE) {
243 // Size of core component in extension substream
244 asset->core_size = get_bits(&s->gb, 14) + 1;
245 // Core sync word present flag
246 if (get_bits1(&s->gb))
247 // Core sync distance
248 skip_bits(&s->gb, 2);
249 }
250
251
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 1414 times.
1438 if (asset->extension_mask & DCA_EXSS_XBR)
252 // Size of XBR extension in extension substream
253 24 asset->xbr_size = get_bits(&s->gb, 14) + 1;
254
255
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 1398 times.
1438 if (asset->extension_mask & DCA_EXSS_XXCH)
256 // Size of XXCH extension in extension substream
257 40 asset->xxch_size = get_bits(&s->gb, 14) + 1;
258
259
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1406 times.
1438 if (asset->extension_mask & DCA_EXSS_X96)
260 // Size of X96 extension in extension substream
261 32 asset->x96_size = get_bits(&s->gb, 12) + 1;
262
263
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1438 times.
1438 if (asset->extension_mask & DCA_EXSS_LBR)
264 parse_lbr_parameters(s, asset);
265
266
2/2
✓ Branch 0 taken 1374 times.
✓ Branch 1 taken 64 times.
1438 if (asset->extension_mask & DCA_EXSS_XLL)
267 1374 parse_xll_parameters(s, asset);
268
269
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1438 times.
1438 if (asset->extension_mask & DCA_EXSS_RSV1)
270 skip_bits(&s->gb, 16);
271
272
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1438 times.
1438 if (asset->extension_mask & DCA_EXSS_RSV2)
273 skip_bits(&s->gb, 16);
274 1438 break;
275
276 21 case 1: // Loss-less coding mode without CBR component
277 21 asset->extension_mask = DCA_EXSS_XLL;
278 21 parse_xll_parameters(s, asset);
279 21 break;
280
281 case 2: // Low bit rate mode
282 asset->extension_mask = DCA_EXSS_LBR;
283 parse_lbr_parameters(s, asset);
284 break;
285
286 case 3: // Auxiliary coding mode
287 asset->extension_mask = 0;
288
289 // Size of auxiliary coded data
290 skip_bits(&s->gb, 14);
291
292 // Auxiliary codec identification
293 skip_bits(&s->gb, 8);
294
295 // Aux sync word present flag
296 if (get_bits1(&s->gb))
297 // Aux sync distance
298 skip_bits(&s->gb, 3);
299 break;
300 }
301
302
2/2
✓ Branch 0 taken 1395 times.
✓ Branch 1 taken 64 times.
1459 if (asset->extension_mask & DCA_EXSS_XLL)
303 // DTS-HD stream ID
304 1395 asset->hd_stream_id = get_bits(&s->gb, 3);
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
313
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (ff_dca_seek_bits(&s->gb, descr_pos + descr_size * 8)) {
314 if (s->avctx)
315 av_log(s->avctx, AV_LOG_ERROR, "Read past end of EXSS asset descriptor\n");
316 return AVERROR_INVALIDDATA;
317 }
318
319 1459 return 0;
320 }
321
322 1459 static int set_exss_offsets(DCAExssAsset *asset)
323 {
324 1459 int offs = asset->asset_offset;
325 1459 int size = asset->asset_size;
326
327
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (asset->extension_mask & DCA_EXSS_CORE) {
328 asset->core_offset = offs;
329 if (asset->core_size > size)
330 return AVERROR_INVALIDDATA;
331 offs += asset->core_size;
332 size -= asset->core_size;
333 }
334
335
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 1435 times.
1459 if (asset->extension_mask & DCA_EXSS_XBR) {
336 24 asset->xbr_offset = offs;
337
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 if (asset->xbr_size > size)
338 return AVERROR_INVALIDDATA;
339 24 offs += asset->xbr_size;
340 24 size -= asset->xbr_size;
341 }
342
343
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 1419 times.
1459 if (asset->extension_mask & DCA_EXSS_XXCH) {
344 40 asset->xxch_offset = offs;
345
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 40 times.
40 if (asset->xxch_size > size)
346 return AVERROR_INVALIDDATA;
347 40 offs += asset->xxch_size;
348 40 size -= asset->xxch_size;
349 }
350
351
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1427 times.
1459 if (asset->extension_mask & DCA_EXSS_X96) {
352 32 asset->x96_offset = offs;
353
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
32 if (asset->x96_size > size)
354 return AVERROR_INVALIDDATA;
355 32 offs += asset->x96_size;
356 32 size -= asset->x96_size;
357 }
358
359
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (asset->extension_mask & DCA_EXSS_LBR) {
360 asset->lbr_offset = offs;
361 if (asset->lbr_size > size)
362 return AVERROR_INVALIDDATA;
363 offs += asset->lbr_size;
364 size -= asset->lbr_size;
365 }
366
367
2/2
✓ Branch 0 taken 1395 times.
✓ Branch 1 taken 64 times.
1459 if (asset->extension_mask & DCA_EXSS_XLL) {
368 1395 asset->xll_offset = offs;
369
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1395 times.
1395 if (asset->xll_size > size)
370 return AVERROR_INVALIDDATA;
371 1395 offs += asset->xll_size;
372 1395 size -= asset->xll_size;
373 }
374
375 1459 return 0;
376 }
377
378 1459 int ff_dca_exss_parse(DCAExssParser *s, const uint8_t *data, int size)
379 {
380 int i, ret, offset, wide_hdr, header_size;
381
382
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if ((ret = init_get_bits8(&s->gb, data, size)) < 0)
383 return ret;
384
385 // Extension substream sync word
386 1459 skip_bits_long(&s->gb, 32);
387
388 // User defined bits
389 1459 skip_bits(&s->gb, 8);
390
391 // Extension substream index
392 1459 s->exss_index = get_bits(&s->gb, 2);
393
394 // Flag indicating short or long header size
395 1459 wide_hdr = get_bits1(&s->gb);
396
397 // Extension substream header length
398 1459 header_size = get_bits(&s->gb, 8 + 4 * wide_hdr) + 1;
399
400 // Check CRC
401
3/4
✓ Branch 0 taken 1413 times.
✓ Branch 1 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1413 times.
1459 if (s->avctx && ff_dca_check_crc(s->avctx, &s->gb, 32 + 8, header_size * 8)) {
402 av_log(s->avctx, AV_LOG_ERROR, "Invalid EXSS header checksum\n");
403 return AVERROR_INVALIDDATA;
404 }
405
406 1459 s->exss_size_nbits = 16 + 4 * wide_hdr;
407
408 // Number of bytes of extension substream
409 1459 s->exss_size = get_bits(&s->gb, s->exss_size_nbits) + 1;
410
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (s->exss_size > size) {
411 if (s->avctx)
412 av_log(s->avctx, AV_LOG_ERROR, "Packet too short for EXSS frame\n");
413 return AVERROR_INVALIDDATA;
414 }
415
416 // Per stream static fields presence flag
417
1/2
✓ Branch 1 taken 1459 times.
✗ Branch 2 not taken.
1459 if (s->static_fields_present = get_bits1(&s->gb)) {
418 int active_exss_mask[8];
419
420 // Reference clock code
421 1459 skip_bits(&s->gb, 2);
422
423 // Extension substream frame duration
424 1459 skip_bits(&s->gb, 3);
425
426 // Timecode presence flag
427
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (get_bits1(&s->gb))
428 // Timecode data
429 skip_bits_long(&s->gb, 36);
430
431 // Number of defined audio presentations
432 1459 s->npresents = get_bits(&s->gb, 3) + 1;
433
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (s->npresents > 1) {
434 if (s->avctx)
435 avpriv_request_sample(s->avctx, "%d audio presentations", s->npresents);
436 return AVERROR_PATCHWELCOME;
437 }
438
439 // Number of audio assets in extension substream
440 1459 s->nassets = get_bits(&s->gb, 3) + 1;
441
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (s->nassets > 1) {
442 if (s->avctx)
443 avpriv_request_sample(s->avctx, "%d audio assets", s->nassets);
444 return AVERROR_PATCHWELCOME;
445 }
446
447 // Active extension substream mask for audio presentation
448
2/2
✓ Branch 0 taken 1459 times.
✓ Branch 1 taken 1459 times.
2918 for (i = 0; i < s->npresents; i++)
449 1459 active_exss_mask[i] = get_bits(&s->gb, s->exss_index + 1);
450
451 // Active audio asset mask
452
2/2
✓ Branch 0 taken 1459 times.
✓ Branch 1 taken 1459 times.
2918 for (i = 0; i < s->npresents; i++)
453 1459 skip_bits_long(&s->gb, av_popcount(active_exss_mask[i]) * 8);
454
455 // Mixing metadata enable flag
456
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (s->mix_metadata_enabled = get_bits1(&s->gb)) {
457 int spkr_mask_nbits;
458
459 // Mixing metadata adjustment level
460 skip_bits(&s->gb, 2);
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
466 s->nmixoutconfigs = get_bits(&s->gb, 2) + 1;
467
468 // Speaker layout mask for mixer output channels
469 for (i = 0; i < s->nmixoutconfigs; i++)
470 s->nmixoutchs[i] = ff_dca_count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
471 }
472 } else {
473 s->npresents = 1;
474 s->nassets = 1;
475 }
476
477 // Size of encoded asset data in bytes
478 1459 offset = header_size;
479
2/2
✓ Branch 0 taken 1459 times.
✓ Branch 1 taken 1459 times.
2918 for (i = 0; i < s->nassets; i++) {
480 1459 s->assets[i].asset_offset = offset;
481 1459 s->assets[i].asset_size = get_bits(&s->gb, s->exss_size_nbits) + 1;
482 1459 offset += s->assets[i].asset_size;
483
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1459 times.
1459 if (offset > s->exss_size) {
484 if (s->avctx)
485 av_log(s->avctx, AV_LOG_ERROR, "EXSS asset out of bounds\n");
486 return AVERROR_INVALIDDATA;
487 }
488 }
489
490 // Audio asset descriptor
491
2/2
✓ Branch 0 taken 1459 times.
✓ Branch 1 taken 1459 times.
2918 for (i = 0; i < s->nassets; i++) {
492
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if ((ret = parse_descriptor(s, &s->assets[i])) < 0)
493 return ret;
494
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if ((ret = set_exss_offsets(&s->assets[i])) < 0) {
495 if (s->avctx)
496 av_log(s->avctx, AV_LOG_ERROR, "Invalid extension size in EXSS asset descriptor\n");
497 return ret;
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
507
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1459 times.
1459 if (ff_dca_seek_bits(&s->gb, header_size * 8)) {
508 if (s->avctx)
509 av_log(s->avctx, AV_LOG_ERROR, "Read past end of EXSS header\n");
510 return AVERROR_INVALIDDATA;
511 }
512
513 1459 return 0;
514 }
515

10月25日什么星座 结婚35周年是什么婚 五个月的宝宝能吃什么辅食 心悸是什么原因造成的 王字旁的字与什么有关
肛门里面疼是什么原因 伤口消毒用什么 6月19日是什么节日 不妄作劳什么意思 堪忧是什么意思
天地人和是什么意思 尿急是什么原因 骨头是什么垃圾 羊膜是什么 卵巢检查做什么项目
为什么8到10周容易胎停 橘白猫是什么品种 喝酒过敏吃什么药 喝什么美白 氨纶是什么面料优缺点
为什么冬天会下雪cj623037.com experiment是什么意思tiangongnft.com 宝宝出牙晚是什么原因hcv8jop5ns5r.cn td什么意思hcv8jop0ns9r.cn 欧了是什么意思hcv8jop7ns3r.cn
前列腺钙化有什么影响hcv9jop4ns2r.cn 体育精神是什么hcv9jop3ns5r.cn 鼓上蚤是什么意思hcv8jop3ns1r.cn 钛对人体有什么好处hcv8jop3ns8r.cn 坚果什么时候吃最好hcv8jop8ns7r.cn
青石是什么石头chuanglingweilai.com 什么是血栓hcv9jop6ns4r.cn 农历八月初五是什么星座bjhyzcsm.com 耳朵突然听不见是什么原因hcv9jop0ns1r.cn 指甲黑线是什么原因hcv8jop0ns4r.cn
穷思竭虑什么意思huizhijixie.com 背后长痘痘什么原因hcv9jop1ns7r.cn 虚岁29岁属什么生肖hcv9jop2ns6r.cn 石乐读什么1949doufunao.com 什么菜不能吃wuhaiwuya.com
百度