辰代表什么意思| 眼黄瘤什么方法治疗最好| 9月14日是什么星座| singing是什么意思| 女人梦见桃子预示什么| 贫血是什么引起的| 绝经什么意思| 白细胞低有什么危害| 2026年是什么命| 1.4什么星座| ipv是什么疫苗| a型血的人是什么性格| 黑色素沉淀是什么原因引起的| 为什么伤口愈合会痒| 是代表什么意思| 甲亢吃什么药最有效| 龙凤呈祥是什么生肖| 溃疡是什么意思| 55岁属什么| 小狗能吃什么水果| 慎重考虑是什么意思| 脑卒中是什么意思| 心里不舒服是什么原因| 女生来大姨妈要注意什么| 东南方是什么生肖| 怀孕哭对宝宝有什么影响| 开黄腔什么意思| kt是什么意思| minute什么意思| 脸上脂溢性皮炎用什么药| 1943年属羊的是什么命| 去海边穿什么| 六月二十三是什么日子| 低血压要注意些什么| 发烧输液输的是什么药| 麦粒肿不能吃什么食物| 非萎缩性胃炎吃什么药效果好| 韧带是什么| 欲钱看正月初一是什么生肖| 民航是什么意思| 梦到蛇什么意思| lemon是什么意思| 肝实质回声密集是什么意思| 晚上十一点多是什么时辰| 什么是六合| 鲈鱼吃什么| zorro是什么牌子的打火机| 数字1代表什么意思| 晚上十一点多是什么时辰| 三八是什么意思| 咳嗽喝什么汤| 芳菲的意思是什么| 后脑勺出汗是什么原因| 手足口病忌口什么食物| 子宫癌筛查做什么检查| 黄曲霉菌是什么颜色| 肿瘤标志物高说明什么| acc是什么| 狻猊是什么动物| onlycook是什么牌子| 经常吃海带有什么好处和坏处| 初字五行属什么| 静脉曲张 看什么科| 河南属于什么气候| gabor是什么牌子| 葡萄籽什么牌子效果好| 大便隐血阳性是什么意思| 燕麦色是什么颜色| 临床医学是什么| 上眼皮浮肿是什么原因| 女生吃木瓜有什么好处| 硕字五行属什么| 大便变黑是什么原因| 深紫色配什么颜色好看| 晚上8点半是什么时辰| 男生早上为什么会晨勃| au750是什么意思| 长期便秘是什么原因引起的| 1103是什么星座| 夏天的诗句有什么| 喝酒对胃有什么伤害| 小三阳是什么意思| 内能与什么因素有关| 容易受惊吓是什么原因| 胆黄素高是怎么回事有什么危害| 心包积液挂什么科| 口臭是什么原因| 足底筋膜炎挂什么科| 胃体隆起是什么意思| 脾胃不好可以吃什么水果| 723是什么意思| qs是什么意思| 开水烫伤用什么方法好的最快| 男女身份证号码有什么区分| 地球是什么形状的| 大姨妈来了吃什么| 八字桃花是什么意思| 脐橙什么意思| 黄体期出血是什么原因| 经络是什么意思| 维生素d滴剂什么时候吃最好| 额头炎是什么症状| 迪桑特属于什么档次| sale是什么牌子| 艺体生是什么意思| obsidian什么意思| 花千骨什么时候上映的| 梦见房子漏水是什么意思| 睾丸疼痛挂什么科| 女人每天吃什么抗衰老| 熬夜伤什么器官| 维生素d低是什么原因| dsa检查是什么意思| 酋长是什么意思| 空是什么结构| 无脑是什么意思| 打扮的意思是什么| 气胸吃什么药| 阿托品是什么药| 貂蝉属什么生肖| 告别是什么意思| 包头古代叫什么| 口气臭吃什么能改善| 羊和什么属相最配| 上梁不正下梁歪是什么意思| 发烧流鼻血是什么原因| 3月18日什么星座| 伟五行属什么| 菊花茶为什么会变绿色| 腱鞘炎挂什么科| 额窦炎吃什么药效果好| 检查甲亢挂什么科| 绿头牌是什么意思| 沙拉酱可以做什么美食| 赘婿是什么意思| 名分是什么意思| 穹窿是什么意思| 什么的舞蹈| 监护是什么意思| 婴儿老是放屁是什么原因| 特警属于什么编制| 小便不利是什么意思| 狗男和什么属相最配| 星月菩提五行属什么| 眼角膜脱落什么症状| 阿联酋和迪拜什么关系| 雷诺氏病是一种什么病| 鼻子流黄水是什么原因| 为什么人会衰老| 乳腺增生吃什么食物好| 尿胆原是什么意思| 什么叫开门见床头| 一个月不来月经是什么原因| 为难的难是什么意思| 甘油三脂高是什么意思| 是什么货币符号| 什么行业最赚钱投资小| 豆五行属什么| er是什么| mbti测试是什么| 悬壶济世是什么意思| 奶黄包的馅是什么做的| 梦见碗是什么意思| 血糖高看什么科| 缺钾什么症状| 从来不吃窝边草是什么生肖| 大佐相当于中国的什么军衔| 助产学是干什么的| 97年属什么今年多大| 薄荷音是什么意思| 醋泡脚有什么好处| 天冬与麦冬有什么区别| 同房出血是什么原因造成的| 大黄是什么药材| 牦牛角手串有什么作用| 胎毒是什么样子的图片| 甲沟炎涂什么药膏| 骂人是什么意思| 今天属相是什么生肖| 泌乳素是什么意思| bld是什么意思| 黑芝麻不能和什么一起吃| 水豚吃什么| 谷丙转氨酶偏高是什么原因| 乙肝病毒表面抗原阳性是什么意思| 心包隐窝是什么意思| 睾丸积液是什么原因造成的| 半夜喉咙痒咳嗽是什么原因| 粉色代表什么| 驾校教练需要什么条件| 蕾丝边是指什么意思| 武林外传的客栈叫什么| 喜欢花的女人是什么性格| 做核磁共振需要注意什么| 什么血型最招蚊子| 无助是什么意思| 纵欲是什么意思| 母公司是什么意思| 乳房头疼是什么原因| 虫介念什么| 生源地是什么意思| 晚上睡不着觉是什么原因| 状物是什么意思| 卿本佳人什么意思| 梦见皮带断了什么预兆| bmi指数是什么| 小孩铅过高有什么症状| 睾丸痛吃什么药| 牙痛吃什么药效果最好| 尿频尿急尿痛吃什么药| 大便干硬是什么原因| 木是什么意思| 尿道感染吃什么药好得快| 雪村和赵英俊什么关系| 金木水火土代表什么| 一步两步三步四步望着天是什么歌| 输血前常规检查是什么| 每次睡觉都做梦为什么| 爆裂性骨折什么意思| 大三阳是什么| 雏形是什么意思| 依然如故的故是什么意思| 法令纹用什么填充效果最好| 女生适合喝什么茶| 婴儿蓝是什么颜色| 眩晕症是什么原因造成的| 阳痿吃什么中成药| 肌肉劳损用什么药| 经期同房需要注意什么| 空调什么度数最省电| bid是什么意思啊| 飞机杯长什么样| 脾切除对身体有什么影响| 卫生湿巾是干什么用的| 肾素活性高是什么原因| ccs医学是什么意思| 皮尔卡丹属于什么档次| 暴龙眼镜什么档次| 来大姨妈可以吃什么水果| 荒淫无度是什么意思| 乙肝病毒表面抗体弱阳性什么意思| 三个女是什么字| 分泌物过氧化氢阳性是什么意思| 肾结石吃什么水果好| 止咳平喘什么药最有效| 吸烟有害健康为什么国家还生产烟| 鼻塞黄鼻涕吃什么药| 心脏斑块是什么意思啊| 2004年是什么生肖| 叫什么| 多动症去医院挂什么科室| 牙黄是什么原因引起的| 1108是什么星座| 汗管瘤用什么药能去掉| lsil什么意思| 碳水化合物指的是什么食物| 七什么八什么| 哕是什么意思| 鲶鱼吃什么食物| 怀孕有什么现象| 斑鸠是什么意思| 桑叶茶有什么好处| 家有喜事指什么生肖| 尿酸高吃什么药降尿酸效果好| 百度

西固区举办2017年社会工作者职业水平考试考前培训


Directory: ../../../ffmpeg/
File: src/libavcodec/aacsbr_fixed.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 276 292 94.5%
Functions: 8 8 100.0%
Branches: 164 174 94.3%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2013
3 * MIPS Technologies, Inc., California.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * AAC Spectral Band Replication decoding functions (fixed-point)
30 * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
31 * Copyright (c) 2009-2010 Alex Converse <alex.converse@gmail.com>
32 *
33 * This file is part of FFmpeg.
34 *
35 * FFmpeg is free software; you can redistribute it and/or
36 * modify it under the terms of the GNU Lesser General Public
37 * License as published by the Free Software Foundation; either
38 * version 2.1 of the License, or (at your option) any later version.
39 *
40 * FFmpeg is distributed in the hope that it will be useful,
41 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
43 * Lesser General Public License for more details.
44 *
45 * You should have received a copy of the GNU Lesser General Public
46 * License along with FFmpeg; if not, write to the Free Software
47 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
48 */
49
50 /**
51 * @file
52 * AAC Spectral Band Replication decoding functions (fixed-point)
53 * Note: Rounding-to-nearest used unless otherwise stated
54 * @author Robert Swain ( rob opendot cl )
55 * @author Stanislav Ocovaj ( stanislav.ocovaj imgtec com )
56 */
57 #define USE_FIXED 1
58
59 #include "aac.h"
60 #include "sbr.h"
61 #include "aacsbr.h"
62 #include "aacsbrdata.h"
63 #include "aacps.h"
64 #include "sbrdsp.h"
65 #include "libavutil/internal.h"
66 #include "libavutil/libm.h"
67 #include "libavutil/avassert.h"
68
69 #include <stdint.h>
70 #include <float.h>
71 #include <math.h>
72
73 static void aacsbr_func_ptr_init(AACSBRContext *c);
74 static const int CONST_LN2 = Q31(0.6931471806/256); // ln(2)/256
75 static const int CONST_RECIP_LN2 = Q31(0.7213475204); // 0.5/ln(2)
76 static const int CONST_076923 = Q31(0.76923076923076923077f);
77
78 static const int fixed_log_table[10] =
79 {
80 Q31(1.0/2), Q31(1.0/3), Q31(1.0/4), Q31(1.0/5), Q31(1.0/6),
81 Q31(1.0/7), Q31(1.0/8), Q31(1.0/9), Q31(1.0/10), Q31(1.0/11)
82 };
83
84 24 static int fixed_log(int x)
85 {
86 int i, ret, xpow, tmp;
87
88 24 ret = x;
89 24 xpow = x;
90
2/2
✓ Branch 0 taken 120 times.
✓ Branch 1 taken 24 times.
144 for (i=0; i<10; i+=2){
91 120 xpow = (int)(((int64_t)xpow * x + 0x40000000) >> 31);
92 120 tmp = (int)(((int64_t)xpow * fixed_log_table[i] + 0x40000000) >> 31);
93 120 ret -= tmp;
94
95 120 xpow = (int)(((int64_t)xpow * x + 0x40000000) >> 31);
96 120 tmp = (int)(((int64_t)xpow * fixed_log_table[i+1] + 0x40000000) >> 31);
97 120 ret += tmp;
98 }
99
100 24 return ret;
101 }
102
103 static const int fixed_exp_table[7] =
104 {
105 Q31(1.0/2), Q31(1.0/6), Q31(1.0/24), Q31(1.0/120),
106 Q31(1.0/720), Q31(1.0/5040), Q31(1.0/40320)
107 };
108
109 12 static int fixed_exp(int x)
110 {
111 int i, ret, xpow, tmp;
112
113 12 ret = 0x800000 + x;
114 12 xpow = x;
115
2/2
✓ Branch 0 taken 84 times.
✓ Branch 1 taken 12 times.
96 for (i=0; i<7; i++){
116 84 xpow = (int)(((int64_t)xpow * x + 0x400000) >> 23);
117 84 tmp = (int)(((int64_t)xpow * fixed_exp_table[i] + 0x40000000) >> 31);
118 84 ret += tmp;
119 }
120
121 12 return ret;
122 }
123
124 12 static void make_bands(int16_t* bands, int start, int stop, int num_bands)
125 {
126 int k, previous, present;
127 12 int base, prod, nz = 0;
128
129 12 base = (stop << 23) / start;
130
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 12 times.
85 while (base < 0x40000000){
131 73 base <<= 1;
132 73 nz++;
133 }
134 12 base = fixed_log(base - 0x80000000);
135 12 base = (((base + 0x80) >> 8) + (8-nz)*CONST_LN2) / num_bands;
136 12 base = fixed_exp(base);
137
138 12 previous = start;
139 12 prod = start << 23;
140
141
2/2
✓ Branch 0 taken 111 times.
✓ Branch 1 taken 12 times.
123 for (k = 0; k < num_bands-1; k++) {
142 111 prod = (int)(((int64_t)prod * base + 0x400000) >> 23);
143 111 present = (prod + 0x400000) >> 23;
144 111 bands[k] = present - previous;
145 111 previous = present;
146 }
147 12 bands[num_bands-1] = stop - previous;
148 12 }
149
150 /// Dequantization and stereo decoding (14496-3 sp04 p203)
151 2082 static void sbr_dequant(SpectralBandReplication *sbr, int id_aac)
152 {
153 int k, e;
154 int ch;
155
156
4/4
✓ Branch 0 taken 1705 times.
✓ Branch 1 taken 377 times.
✓ Branch 2 taken 1280 times.
✓ Branch 3 taken 425 times.
3362 if (id_aac == TYPE_CPE && sbr->bs_coupling) {
157
2/2
✓ Branch 0 taken 277 times.
✓ Branch 1 taken 1003 times.
1280 int alpha = sbr->data[0].bs_amp_res ? 2 : 1;
158
2/2
✓ Branch 0 taken 277 times.
✓ Branch 1 taken 1003 times.
1280 int pan_offset = sbr->data[0].bs_amp_res ? 12 : 24;
159
2/2
✓ Branch 0 taken 1642 times.
✓ Branch 1 taken 1280 times.
2922 for (e = 1; e <= sbr->data[0].bs_num_env; e++) {
160
2/2
✓ Branch 0 taken 17423 times.
✓ Branch 1 taken 1642 times.
19065 for (k = 0; k < sbr->n[sbr->data[0].bs_freq_res[e]]; k++) {
161 SoftFloat temp1, temp2, fac;
162
163 17423 temp1.exp = sbr->data[0].env_facs_q[e][k] * alpha + 14;
164
2/2
✓ Branch 0 taken 4733 times.
✓ Branch 1 taken 12690 times.
17423 if (temp1.exp & 1)
165 4733 temp1.mant = 759250125;
166 else
167 12690 temp1.mant = 0x20000000;
168 17423 temp1.exp = (temp1.exp >> 1) + 1;
169
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17423 times.
17423 if (temp1.exp > 66) { // temp1 > 1E20
170 av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n");
171 temp1 = FLOAT_1;
172 }
173
174 17423 temp2.exp = (pan_offset - sbr->data[1].env_facs_q[e][k]) * alpha;
175
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17423 times.
17423 if (temp2.exp & 1)
176 temp2.mant = 759250125;
177 else
178 17423 temp2.mant = 0x20000000;
179 17423 temp2.exp = (temp2.exp >> 1) + 1;
180 17423 fac = av_div_sf(temp1, av_add_sf(FLOAT_1, temp2));
181 17423 sbr->data[0].env_facs[e][k] = fac;
182 17423 sbr->data[1].env_facs[e][k] = av_mul_sf(fac, temp2);
183 }
184 }
185
2/2
✓ Branch 0 taken 1557 times.
✓ Branch 1 taken 1280 times.
2837 for (e = 1; e <= sbr->data[0].bs_num_noise; e++) {
186
2/2
✓ Branch 0 taken 4142 times.
✓ Branch 1 taken 1557 times.
5699 for (k = 0; k < sbr->n_q; k++) {
187 SoftFloat temp1, temp2, fac;
188
189 4142 temp1.exp = NOISE_FLOOR_OFFSET - \
190 4142 sbr->data[0].noise_facs_q[e][k] + 2;
191 4142 temp1.mant = 0x20000000;
192
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4142 times.
4142 av_assert0(temp1.exp <= 66);
193 4142 temp2.exp = 12 - sbr->data[1].noise_facs_q[e][k] + 1;
194 4142 temp2.mant = 0x20000000;
195 4142 fac = av_div_sf(temp1, av_add_sf(FLOAT_1, temp2));
196 4142 sbr->data[0].noise_facs[e][k] = fac;
197 4142 sbr->data[1].noise_facs[e][k] = av_mul_sf(fac, temp2);
198 }
199 }
200 } else { // SCE or one non-coupled CPE
201
4/4
✓ Branch 0 taken 1275 times.
✓ Branch 1 taken 754 times.
✓ Branch 2 taken 1227 times.
✓ Branch 3 taken 802 times.
2029 for (ch = 0; ch < (id_aac == TYPE_CPE) + 1; ch++) {
202
2/2
✓ Branch 0 taken 727 times.
✓ Branch 1 taken 500 times.
1227 int alpha = sbr->data[ch].bs_amp_res ? 2 : 1;
203
2/2
✓ Branch 0 taken 2304 times.
✓ Branch 1 taken 1227 times.
3531 for (e = 1; e <= sbr->data[ch].bs_num_env; e++)
204
2/2
✓ Branch 0 taken 24131 times.
✓ Branch 1 taken 2304 times.
26435 for (k = 0; k < sbr->n[sbr->data[ch].bs_freq_res[e]]; k++){
205 SoftFloat temp1;
206
207 24131 temp1.exp = alpha * sbr->data[ch].env_facs_q[e][k] + 12;
208
2/2
✓ Branch 0 taken 2958 times.
✓ Branch 1 taken 21173 times.
24131 if (temp1.exp & 1)
209 2958 temp1.mant = 759250125;
210 else
211 21173 temp1.mant = 0x20000000;
212 24131 temp1.exp = (temp1.exp >> 1) + 1;
213
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24131 times.
24131 if (temp1.exp > 66) { // temp1 > 1E20
214 av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n");
215 temp1 = FLOAT_1;
216 }
217 24131 sbr->data[ch].env_facs[e][k] = temp1;
218 }
219
2/2
✓ Branch 0 taken 1954 times.
✓ Branch 1 taken 1227 times.
3181 for (e = 1; e <= sbr->data[ch].bs_num_noise; e++)
220
2/2
✓ Branch 0 taken 5702 times.
✓ Branch 1 taken 1954 times.
7656 for (k = 0; k < sbr->n_q; k++){
221 5702 sbr->data[ch].noise_facs[e][k].exp = NOISE_FLOOR_OFFSET - \
222 5702 sbr->data[ch].noise_facs_q[e][k] + 1;
223 5702 sbr->data[ch].noise_facs[e][k].mant = 0x20000000;
224 }
225 }
226 }
227 2082 }
228
229 /** High Frequency Generation (14496-3 sp04 p214+) and Inverse Filtering
230 * (14496-3 sp04 p214)
231 * Warning: This routine does not seem numerically stable.
232 */
233 3787 static void sbr_hf_inverse_filter(SBRDSPContext *dsp,
234 int (*alpha0)[2], int (*alpha1)[2],
235 const int X_low[32][40][2], int k0)
236 {
237 int k;
238 int shift, round;
239
240
2/2
✓ Branch 0 taken 68098 times.
✓ Branch 1 taken 3787 times.
71885 for (k = 0; k < k0; k++) {
241 SoftFloat phi[3][2][2];
242 SoftFloat a00, a01, a10, a11;
243 SoftFloat dk;
244
245 68098 dsp->autocorrelate(X_low[k], phi);
246
247 68098 dk = av_sub_sf(av_mul_sf(phi[2][1][0], phi[1][0][0]),
248 av_mul_sf(av_add_sf(av_mul_sf(phi[1][1][0], phi[1][1][0]),
249 av_mul_sf(phi[1][1][1], phi[1][1][1])), FLOAT_0999999));
250
251
2/2
✓ Branch 0 taken 1715 times.
✓ Branch 1 taken 66383 times.
68098 if (!dk.mant) {
252 1715 a10 = FLOAT_0;
253 1715 a11 = FLOAT_0;
254 } else {
255 SoftFloat temp_real, temp_im;
256 66383 temp_real = av_sub_sf(av_sub_sf(av_mul_sf(phi[0][0][0], phi[1][1][0]),
257 av_mul_sf(phi[0][0][1], phi[1][1][1])),
258 av_mul_sf(phi[0][1][0], phi[1][0][0]));
259 66383 temp_im = av_sub_sf(av_add_sf(av_mul_sf(phi[0][0][0], phi[1][1][1]),
260 av_mul_sf(phi[0][0][1], phi[1][1][0])),
261 av_mul_sf(phi[0][1][1], phi[1][0][0]));
262
263 66383 a10 = av_div_sf(temp_real, dk);
264 66383 a11 = av_div_sf(temp_im, dk);
265 }
266
267
2/2
✓ Branch 0 taken 1716 times.
✓ Branch 1 taken 66382 times.
68098 if (!phi[1][0][0].mant) {
268 1716 a00 = FLOAT_0;
269 1716 a01 = FLOAT_0;
270 } else {
271 SoftFloat temp_real, temp_im;
272 66382 temp_real = av_add_sf(phi[0][0][0],
273 av_add_sf(av_mul_sf(a10, phi[1][1][0]),
274 av_mul_sf(a11, phi[1][1][1])));
275 66382 temp_im = av_add_sf(phi[0][0][1],
276 av_sub_sf(av_mul_sf(a11, phi[1][1][0]),
277 av_mul_sf(a10, phi[1][1][1])));
278
279 66382 temp_real.mant = -temp_real.mant;
280 66382 temp_im.mant = -temp_im.mant;
281 66382 a00 = av_div_sf(temp_real, phi[1][0][0]);
282 66382 a01 = av_div_sf(temp_im, phi[1][0][0]);
283 }
284
285 68098 shift = a00.exp;
286
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 68096 times.
68098 if (shift >= 3)
287 2 alpha0[k][0] = 0x7fffffff;
288
2/2
✓ Branch 0 taken 2050 times.
✓ Branch 1 taken 66046 times.
68096 else if (shift <= -30)
289 2050 alpha0[k][0] = 0;
290 else {
291 66046 shift = 1-shift;
292
2/2
✓ Branch 0 taken 1836 times.
✓ Branch 1 taken 64210 times.
66046 if (shift <= 0)
293 1836 alpha0[k][0] = a00.mant * (1<<-shift);
294 else {
295 64210 round = 1 << (shift-1);
296 64210 alpha0[k][0] = (a00.mant + round) >> shift;
297 }
298 }
299
300 68098 shift = a01.exp;
301
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 68096 times.
68098 if (shift >= 3)
302 2 alpha0[k][1] = 0x7fffffff;
303
2/2
✓ Branch 0 taken 2000 times.
✓ Branch 1 taken 66096 times.
68096 else if (shift <= -30)
304 2000 alpha0[k][1] = 0;
305 else {
306 66096 shift = 1-shift;
307
2/2
✓ Branch 0 taken 14380 times.
✓ Branch 1 taken 51716 times.
66096 if (shift <= 0)
308 14380 alpha0[k][1] = a01.mant * (1<<-shift);
309 else {
310 51716 round = 1 << (shift-1);
311 51716 alpha0[k][1] = (a01.mant + round) >> shift;
312 }
313 }
314 68098 shift = a10.exp;
315
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 68096 times.
68098 if (shift >= 3)
316 2 alpha1[k][0] = 0x7fffffff;
317
2/2
✓ Branch 0 taken 1985 times.
✓ Branch 1 taken 66111 times.
68096 else if (shift <= -30)
318 1985 alpha1[k][0] = 0;
319 else {
320 66111 shift = 1-shift;
321
2/2
✓ Branch 0 taken 75 times.
✓ Branch 1 taken 66036 times.
66111 if (shift <= 0)
322 75 alpha1[k][0] = a10.mant * (1<<-shift);
323 else {
324 66036 round = 1 << (shift-1);
325 66036 alpha1[k][0] = (a10.mant + round) >> shift;
326 }
327 }
328
329 68098 shift = a11.exp;
330
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 68098 times.
68098 if (shift >= 3)
331 alpha1[k][1] = 0x7fffffff;
332
2/2
✓ Branch 0 taken 2045 times.
✓ Branch 1 taken 66053 times.
68098 else if (shift <= -30)
333 2045 alpha1[k][1] = 0;
334 else {
335 66053 shift = 1-shift;
336
2/2
✓ Branch 0 taken 85 times.
✓ Branch 1 taken 65968 times.
66053 if (shift <= 0)
337 85 alpha1[k][1] = a11.mant * (1<<-shift);
338 else {
339 65968 round = 1 << (shift-1);
340 65968 alpha1[k][1] = (a11.mant + round) >> shift;
341 }
342 }
343
344 68098 shift = (int)(((int64_t)(alpha1[k][0]>>1) * (alpha1[k][0]>>1) + \
345 68098 (int64_t)(alpha1[k][1]>>1) * (alpha1[k][1]>>1) + \
346 68098 0x40000000) >> 31);
347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 68098 times.
68098 if (shift >= 0x20000000){
348 alpha1[k][0] = 0;
349 alpha1[k][1] = 0;
350 alpha0[k][0] = 0;
351 alpha0[k][1] = 0;
352 }
353
354 68098 shift = (int)(((int64_t)(alpha0[k][0]>>1) * (alpha0[k][0]>>1) + \
355 68098 (int64_t)(alpha0[k][1]>>1) * (alpha0[k][1]>>1) + \
356 68098 0x40000000) >> 31);
357
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 68096 times.
68098 if (shift >= 0x20000000){
358 2 alpha1[k][0] = 0;
359 2 alpha1[k][1] = 0;
360 2 alpha0[k][0] = 0;
361 2 alpha0[k][1] = 0;
362 }
363 }
364 3787 }
365
366 /// Chirp Factors (14496-3 sp04 p214)
367 3787 static void sbr_chirp(SpectralBandReplication *sbr, SBRData *ch_data)
368 {
369 int i;
370 int new_bw;
371 static const int bw_tab[] = { 0, 1610612736, 1932735283, 2104533975 };
372 int64_t accu;
373
374
2/2
✓ Branch 0 taken 10213 times.
✓ Branch 1 taken 3787 times.
14000 for (i = 0; i < sbr->n_q; i++) {
375
2/2
✓ Branch 0 taken 799 times.
✓ Branch 1 taken 9414 times.
10213 if (ch_data->bs_invf_mode[0][i] + ch_data->bs_invf_mode[1][i] == 1)
376 799 new_bw = 1288490189;
377 else
378 9414 new_bw = bw_tab[ch_data->bs_invf_mode[0][i]];
379
380
2/2
✓ Branch 0 taken 2080 times.
✓ Branch 1 taken 8133 times.
10213 if (new_bw < ch_data->bw_array[i]){
381 2080 accu = (int64_t)new_bw * 1610612736;
382 2080 accu += (int64_t)ch_data->bw_array[i] * 0x20000000;
383 2080 new_bw = (int)((accu + 0x40000000) >> 31);
384 } else {
385 8133 accu = (int64_t)new_bw * 1946157056;
386 8133 accu += (int64_t)ch_data->bw_array[i] * 201326592;
387 8133 new_bw = (int)((accu + 0x40000000) >> 31);
388 }
389
2/2
✓ Branch 0 taken 7712 times.
✓ Branch 1 taken 2501 times.
10213 ch_data->bw_array[i] = new_bw < 0x2000000 ? 0 : new_bw;
390 }
391 3787 }
392
393 /**
394 * Calculation of levels of additional HF signal components (14496-3 sp04 p219)
395 * and Calculation of gain (14496-3 sp04 p219)
396 */
397 3787 static void sbr_gain_calc(SpectralBandReplication *sbr,
398 SBRData *ch_data, const int e_a[2])
399 {
400 int e, k, m;
401 // max gain limits : -3dB, 0dB, 3dB, inf dB (limiter off)
402 static const SoftFloat limgain[4] = { { 760155524, 0 }, { 0x20000000, 1 },
403 { 758351638, 1 }, { 625000000, 34 } };
404
405
2/2
✓ Branch 0 taken 5588 times.
✓ Branch 1 taken 3787 times.
9375 for (e = 0; e < ch_data->bs_num_env; e++) {
406
4/4
✓ Branch 0 taken 5309 times.
✓ Branch 1 taken 279 times.
✓ Branch 2 taken 5226 times.
✓ Branch 3 taken 83 times.
5588 int delta = !((e == e_a[1]) || (e == e_a[0]));
407
2/2
✓ Branch 0 taken 17704 times.
✓ Branch 1 taken 5588 times.
23292 for (k = 0; k < sbr->n_lim; k++) {
408 SoftFloat gain_boost, gain_max;
409 SoftFloat sum[2];
410 17704 sum[0] = sum[1] = FLOAT_0;
411
2/2
✓ Branch 0 taken 127837 times.
✓ Branch 1 taken 17704 times.
145541 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
412 127837 const SoftFloat temp = av_div_sf(sbr->e_origmapped[e][m],
413 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]));
414 127837 sbr->q_m[e][m] = av_sqrt_sf(av_mul_sf(temp, sbr->q_mapped[e][m]));
415 127837 sbr->s_m[e][m] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(ch_data->s_indexmapped[e + 1][m], 0)));
416
2/2
✓ Branch 0 taken 123205 times.
✓ Branch 1 taken 4632 times.
127837 if (!sbr->s_mapped[e][m]) {
417
2/2
✓ Branch 0 taken 115357 times.
✓ Branch 1 taken 7848 times.
123205 if (delta) {
418 115357 sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],
419 av_mul_sf(av_add_sf(FLOAT_1, sbr->e_curr[e][m]),
420 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));
421 } else {
422 7848 sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],
423 av_add_sf(FLOAT_1, sbr->e_curr[e][m])));
424 }
425 } else {
426 4632 sbr->gain[e][m] = av_sqrt_sf(
427 av_div_sf(
428 av_mul_sf(sbr->e_origmapped[e][m], sbr->q_mapped[e][m]),
429 av_mul_sf(
430 av_add_sf(FLOAT_1, sbr->e_curr[e][m]),
431 av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));
432 }
433 127837 sbr->gain[e][m] = av_add_sf(sbr->gain[e][m], FLOAT_MIN);
434 }
435
2/2
✓ Branch 0 taken 127837 times.
✓ Branch 1 taken 17704 times.
145541 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
436 127837 sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);
437 127837 sum[1] = av_add_sf(sum[1], sbr->e_curr[e][m]);
438 }
439 17704 gain_max = av_mul_sf(limgain[sbr->bs_limiter_gains],
440 av_sqrt_sf(
441 av_div_sf(
442 av_add_sf(FLOAT_EPSILON, sum[0]),
443 av_add_sf(FLOAT_EPSILON, sum[1]))));
444
2/2
✓ Branch 0 taken 3741 times.
✓ Branch 1 taken 13963 times.
17704 if (av_gt_sf(gain_max, FLOAT_100000))
445 3741 gain_max = FLOAT_100000;
446
2/2
✓ Branch 0 taken 127837 times.
✓ Branch 1 taken 17704 times.
145541 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
447 127837 SoftFloat q_m_max = av_div_sf(
448 av_mul_sf(sbr->q_m[e][m], gain_max),
449 sbr->gain[e][m]);
450
2/2
✓ Branch 0 taken 33576 times.
✓ Branch 1 taken 94261 times.
127837 if (av_gt_sf(sbr->q_m[e][m], q_m_max))
451 33576 sbr->q_m[e][m] = q_m_max;
452
2/2
✓ Branch 0 taken 33576 times.
✓ Branch 1 taken 94261 times.
127837 if (av_gt_sf(sbr->gain[e][m], gain_max))
453 33576 sbr->gain[e][m] = gain_max;
454 }
455 17704 sum[0] = sum[1] = FLOAT_0;
456
2/2
✓ Branch 0 taken 127837 times.
✓ Branch 1 taken 17704 times.
145541 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
457 127837 sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);
458 127837 sum[1] = av_add_sf(sum[1],
459 av_mul_sf(
460 av_mul_sf(sbr->e_curr[e][m],
461 sbr->gain[e][m]),
462 sbr->gain[e][m]));
463 127837 sum[1] = av_add_sf(sum[1],
464 av_mul_sf(sbr->s_m[e][m], sbr->s_m[e][m]));
465
4/4
✓ Branch 0 taken 119187 times.
✓ Branch 1 taken 8650 times.
✓ Branch 2 taken 117689 times.
✓ Branch 3 taken 1498 times.
127837 if (delta && !sbr->s_m[e][m].mant)
466 117689 sum[1] = av_add_sf(sum[1],
467 av_mul_sf(sbr->q_m[e][m], sbr->q_m[e][m]));
468 }
469 17704 gain_boost = av_sqrt_sf(
470 av_div_sf(
471 av_add_sf(FLOAT_EPSILON, sum[0]),
472 av_add_sf(FLOAT_EPSILON, sum[1])));
473
2/2
✓ Branch 0 taken 1483 times.
✓ Branch 1 taken 16221 times.
17704 if (av_gt_sf(gain_boost, FLOAT_1584893192))
474 1483 gain_boost = FLOAT_1584893192;
475
476
2/2
✓ Branch 0 taken 127837 times.
✓ Branch 1 taken 17704 times.
145541 for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
477 127837 sbr->gain[e][m] = av_mul_sf(sbr->gain[e][m], gain_boost);
478 127837 sbr->q_m[e][m] = av_mul_sf(sbr->q_m[e][m], gain_boost);
479 127837 sbr->s_m[e][m] = av_mul_sf(sbr->s_m[e][m], gain_boost);
480 }
481 }
482 }
483 3787 }
484
485 /// Assembling HF Signals (14496-3 sp04 p220)
486 3787 static void sbr_hf_assemble(int Y1[38][64][2],
487 const int X_high[64][40][2],
488 SpectralBandReplication *sbr, SBRData *ch_data,
489 const int e_a[2])
490 {
491 int e, i, j, m;
492
2/2
✓ Branch 0 taken 1148 times.
✓ Branch 1 taken 2639 times.
3787 const int h_SL = 4 * !sbr->bs_smoothing_mode;
493 3787 const int kx = sbr->kx[1];
494 3787 const int m_max = sbr->m[1];
495 static const SoftFloat h_smooth[5] = {
496 { 715827883, -1 },
497 { 647472402, -1 },
498 { 937030863, -2 },
499 { 989249804, -3 },
500 { 546843842, -4 },
501 };
502 3787 SoftFloat (*g_temp)[48] = ch_data->g_temp, (*q_temp)[48] = ch_data->q_temp;
503 3787 int indexnoise = ch_data->f_indexnoise;
504 3787 int indexsine = ch_data->f_indexsine;
505
506
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 3778 times.
3787 if (sbr->reset) {
507
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 9 times.
17 for (i = 0; i < h_SL; i++) {
508 8 memcpy(g_temp[i + 2*ch_data->t_env[0]], sbr->gain[0], m_max * sizeof(sbr->gain[0][0]));
509 8 memcpy(q_temp[i + 2*ch_data->t_env[0]], sbr->q_m[0], m_max * sizeof(sbr->q_m[0][0]));
510 }
511
2/2
✓ Branch 0 taken 1146 times.
✓ Branch 1 taken 2632 times.
3778 } else if (h_SL) {
512
2/2
✓ Branch 0 taken 4584 times.
✓ Branch 1 taken 1146 times.
5730 for (i = 0; i < 4; i++) {
513 4584 memcpy(g_temp[i + 2 * ch_data->t_env[0]],
514 4584 g_temp[i + 2 * ch_data->t_env_num_env_old],
515 sizeof(g_temp[0]));
516 4584 memcpy(q_temp[i + 2 * ch_data->t_env[0]],
517 4584 q_temp[i + 2 * ch_data->t_env_num_env_old],
518 sizeof(q_temp[0]));
519 }
520 }
521
522
2/2
✓ Branch 0 taken 5588 times.
✓ Branch 1 taken 3787 times.
9375 for (e = 0; e < ch_data->bs_num_env; e++) {
523
2/2
✓ Branch 0 taken 121184 times.
✓ Branch 1 taken 5588 times.
126772 for (i = 2 * ch_data->t_env[e]; i < 2 * ch_data->t_env[e + 1]; i++) {
524 121184 memcpy(g_temp[h_SL + i], sbr->gain[e], m_max * sizeof(sbr->gain[0][0]));
525 121184 memcpy(q_temp[h_SL + i], sbr->q_m[e], m_max * sizeof(sbr->q_m[0][0]));
526 }
527 }
528
529
2/2
✓ Branch 0 taken 5588 times.
✓ Branch 1 taken 3787 times.
9375 for (e = 0; e < ch_data->bs_num_env; e++) {
530
2/2
✓ Branch 0 taken 121184 times.
✓ Branch 1 taken 5588 times.
126772 for (i = 2 * ch_data->t_env[e]; i < 2 * ch_data->t_env[e + 1]; i++) {
531 SoftFloat g_filt_tab[48];
532 SoftFloat q_filt_tab[48];
533 SoftFloat *g_filt, *q_filt;
534
535
6/6
✓ Branch 0 taken 36736 times.
✓ Branch 1 taken 84448 times.
✓ Branch 2 taken 36694 times.
✓ Branch 3 taken 42 times.
✓ Branch 4 taken 36634 times.
✓ Branch 5 taken 60 times.
121184 if (h_SL && e != e_a[0] && e != e_a[1]) {
536 36634 g_filt = g_filt_tab;
537 36634 q_filt = q_filt_tab;
538
2/2
✓ Branch 0 taken 622778 times.
✓ Branch 1 taken 36634 times.
659412 for (m = 0; m < m_max; m++) {
539 622778 const int idx1 = i + h_SL;
540 622778 g_filt[m].mant = g_filt[m].exp = 0;
541 622778 q_filt[m].mant = q_filt[m].exp = 0;
542
2/2
✓ Branch 0 taken 3113890 times.
✓ Branch 1 taken 622778 times.
3736668 for (j = 0; j <= h_SL; j++) {
543 3113890 g_filt[m] = av_add_sf(g_filt[m],
544 3113890 av_mul_sf(g_temp[idx1 - j][m],
545 h_smooth[j]));
546 3113890 q_filt[m] = av_add_sf(q_filt[m],
547 3113890 av_mul_sf(q_temp[idx1 - j][m],
548 h_smooth[j]));
549 }
550 }
551 } else {
552 84550 g_filt = g_temp[i + h_SL];
553 84550 q_filt = q_temp[i];
554 }
555
556 121184 sbr->dsp.hf_g_filt(Y1[i] + kx, X_high + kx, g_filt, m_max,
557 121184 i + ENVELOPE_ADJUSTMENT_OFFSET);
558
559
4/4
✓ Branch 0 taken 120826 times.
✓ Branch 1 taken 358 times.
✓ Branch 2 taken 119686 times.
✓ Branch 3 taken 1140 times.
121184 if (e != e_a[0] && e != e_a[1]) {
560 119686 sbr->dsp.hf_apply_noise[indexsine](Y1[i] + kx, sbr->s_m[e],
561 q_filt, indexnoise,
562 kx, m_max);
563 } else {
564 1498 int idx = indexsine&1;
565 1498 int A = (1-((indexsine+(kx & 1))&2));
566 1498 int B = (A^(-idx)) + idx;
567 1498 unsigned *out = &Y1[i][kx][idx];
568 int shift;
569 unsigned round;
570
571 1498 SoftFloat *in = sbr->s_m[e];
572
2/2
✓ Branch 0 taken 17400 times.
✓ Branch 1 taken 1498 times.
18898 for (m = 0; m+1 < m_max; m+=2) {
573 int shift2;
574 17400 shift = 22 - in[m ].exp;
575 17400 shift2= 22 - in[m+1].exp;
576
2/4
✓ Branch 0 taken 17400 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 17400 times.
17400 if (shift < 1 || shift2 < 1) {
577 av_log(NULL, AV_LOG_ERROR, "Overflow in sbr_hf_assemble, shift=%d,%d\n", shift, shift2);
578 return;
579 }
580
2/2
✓ Branch 0 taken 600 times.
✓ Branch 1 taken 16800 times.
17400 if (shift < 32) {
581 600 round = 1 << (shift-1);
582 600 out[2*m ] += (int)(in[m ].mant * A + round) >> shift;
583 }
584
585
2/2
✓ Branch 0 taken 152 times.
✓ Branch 1 taken 17248 times.
17400 if (shift2 < 32) {
586 152 round = 1 << (shift2-1);
587 152 out[2*m+2] += (int)(in[m+1].mant * B + round) >> shift2;
588 }
589 }
590
2/2
✓ Branch 0 taken 1004 times.
✓ Branch 1 taken 494 times.
1498 if(m_max&1)
591 {
592 1004 shift = 22 - in[m ].exp;
593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1004 times.
1004 if (shift < 1) {
594 av_log(NULL, AV_LOG_ERROR, "Overflow in sbr_hf_assemble, shift=%d\n", shift);
595 return;
596
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1004 times.
1004 } else if (shift < 32) {
597 round = 1 << (shift-1);
598 out[2*m ] += (int)(in[m ].mant * A + round) >> shift;
599 }
600 }
601 }
602 121184 indexnoise = (indexnoise + m_max) & 0x1ff;
603 121184 indexsine = (indexsine + 1) & 3;
604 }
605 }
606 3787 ch_data->f_indexnoise = indexnoise;
607 3787 ch_data->f_indexsine = indexsine;
608 }
609
610 #include "aacsbr_template.c"
611

多巴胺高是什么原因 梦见生孩子是什么意思 mep是什么意思 促排卵针什么时候打 lee属于什么档次
痛风喝酒会有什么后果 天蝎和什么星座最配 抬头是什么 螺旋杆菌吃什么药 为什么不吃猪肉
晚上喝红酒有什么好处和坏处 先兆性流产是什么症状 男同是什么意思 莲子吃了有什么好处 眼前有亮光闪是什么问题
猪脚和猪蹄有什么区别 土霉素喂鸡有什么作用 参乌健脑胶囊适合什么人吃 女性盆腔炎吃什么药 耸肩是什么原因造成的
紫颠是什么病怎样治hcv7jop9ns7r.cn 卡替治疗是什么意思hcv8jop3ns0r.cn 桃子和什么不能一起吃hcv9jop6ns7r.cn 肾穿刺是什么意思hcv8jop5ns2r.cn 十二年是什么婚hcv7jop6ns8r.cn
尿隐血弱阳性什么意思hcv9jop1ns8r.cn 过命之交是什么意思hcv9jop6ns0r.cn 尿急吃什么药hcv7jop7ns2r.cn 薄如蝉翼是什么意思adwl56.com 促黄体生成素是什么hcv8jop0ns5r.cn
人为什么会磨牙hcv8jop8ns4r.cn 癫痫不能吃什么youbangsi.com 什么叫做靶向治疗hcv7jop9ns1r.cn 脚后跟开裂用什么药hcv8jop3ns1r.cn 促排卵是什么意思hcv9jop6ns0r.cn
貔貅是什么动物hcv9jop4ns2r.cn 颈椎病是什么症状hcv8jop4ns0r.cn 夏天爱出汗是什么原因hcv8jop4ns6r.cn 槟榔吃多了有什么危害hcv9jop7ns4r.cn 2月24日是什么星座sscsqa.com
百度