54 #ifndef AVCODEC_MIPS_AACSBR_MIPS_H 55 #define AVCODEC_MIPS_AACSBR_MIPS_H 64 float z[320],
float W[2][32][32][2],
int buf_idx)
69 int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
73 for(i = 0; i < 36; i++)
77 "lw %[temp0], 0(%[w1]) \n\t" 78 "lw %[temp1], 4(%[w1]) \n\t" 79 "lw %[temp2], 8(%[w1]) \n\t" 80 "lw %[temp3], 12(%[w1]) \n\t" 81 "lw %[temp4], 16(%[w1]) \n\t" 82 "lw %[temp5], 20(%[w1]) \n\t" 83 "lw %[temp6], 24(%[w1]) \n\t" 84 "lw %[temp7], 28(%[w1]) \n\t" 85 "sw %[temp0], 0(%[w0]) \n\t" 86 "sw %[temp1], 4(%[w0]) \n\t" 87 "sw %[temp2], 8(%[w0]) \n\t" 88 "sw %[temp3], 12(%[w0]) \n\t" 89 "sw %[temp4], 16(%[w0]) \n\t" 90 "sw %[temp5], 20(%[w0]) \n\t" 91 "sw %[temp6], 24(%[w0]) \n\t" 92 "sw %[temp7], 28(%[w0]) \n\t" 96 : [w0]
"+r"(w0), [w1]
"+r"(w1),
97 [temp0]
"=&r"(temp0), [temp1]
"=&r"(temp1),
98 [temp2]
"=&r"(temp2), [temp3]
"=&r"(temp3),
99 [temp4]
"=&r"(temp4), [temp5]
"=&r"(temp5),
100 [temp6]
"=&r"(temp6), [temp7]
"=&r"(temp7)
108 for(i = 0; i < 128; i++)
112 "lw %[temp0], 0(%[w1]) \n\t" 113 "lw %[temp1], 4(%[w1]) \n\t" 114 "lw %[temp2], 8(%[w1]) \n\t" 115 "lw %[temp3], 12(%[w1]) \n\t" 116 "lw %[temp4], 16(%[w1]) \n\t" 117 "lw %[temp5], 20(%[w1]) \n\t" 118 "lw %[temp6], 24(%[w1]) \n\t" 119 "lw %[temp7], 28(%[w1]) \n\t" 120 "sw %[temp0], 0(%[w0]) \n\t" 121 "sw %[temp1], 4(%[w0]) \n\t" 122 "sw %[temp2], 8(%[w0]) \n\t" 123 "sw %[temp3], 12(%[w0]) \n\t" 124 "sw %[temp4], 16(%[w0]) \n\t" 125 "sw %[temp5], 20(%[w0]) \n\t" 126 "sw %[temp6], 24(%[w0]) \n\t" 127 "sw %[temp7], 28(%[w0]) \n\t" 131 : [w0]
"+r"(w0), [w1]
"+r"(w1),
132 [temp0]
"=&r"(temp0), [temp1]
"=&r"(temp1),
133 [temp2]
"=&r"(temp2), [temp3]
"=&r"(temp3),
134 [temp4]
"=&r"(temp4), [temp5]
"=&r"(temp5),
135 [temp6]
"=&r"(temp6), [temp7]
"=&r"(temp7)
141 for (i = 0; i < 32; i++) {
153 #if !HAVE_MIPS32R6 && !HAVE_MIPS64R6 154 static void sbr_qmf_synthesis_mips(
FFTContext *mdct,
156 float *
out,
float X[2][38][64],
157 float mdct_buf[2][64],
158 float *
v0,
int *v_off,
const unsigned int div)
162 const int step = 128 >> div;
164 float temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12, temp13;
165 float temp14, temp15, temp16, temp17, temp18, temp19;
166 float *vv0, *
s0, *dst;
169 for (i = 0; i < 32; i++) {
171 int saved_samples = (1280 - 128) >> div;
179 for (n = 0; n < 32; n++) {
180 X[0][
i][ n] = -X[0][
i][n];
181 X[0][
i][32+n] = X[1][
i][31-n];
197 s0 = (
float*)sbr_qmf_window;
203 ".set noreorder \n\t" 204 "lwc1 %[temp4], 0(%[v0]) \n\t" 205 "lwc1 %[temp5], 0(%[s0]) \n\t" 206 "lwc1 %[temp6], 4(%[v0]) \n\t" 207 "lwc1 %[temp7], 4(%[s0]) \n\t" 208 "lwc1 %[temp8], 8(%[v0]) \n\t" 209 "lwc1 %[temp9], 8(%[s0]) \n\t" 210 "lwc1 %[temp10], 12(%[v0]) \n\t" 211 "lwc1 %[temp11], 12(%[s0]) \n\t" 212 "lwc1 %[temp12], 768(%[v0]) \n\t" 213 "lwc1 %[temp13], 256(%[s0]) \n\t" 214 "lwc1 %[temp14], 772(%[v0]) \n\t" 215 "lwc1 %[temp15], 260(%[s0]) \n\t" 216 "lwc1 %[temp16], 776(%[v0]) \n\t" 217 "lwc1 %[temp17], 264(%[s0]) \n\t" 218 "lwc1 %[temp18], 780(%[v0]) \n\t" 219 "lwc1 %[temp19], 268(%[s0]) \n\t" 221 "mul.s %[temp0], %[temp4], %[temp5] \n\t" 222 "lwc1 %[temp4], 1024(%[v0]) \n\t" 223 "mul.s %[temp1], %[temp6], %[temp7] \n\t" 224 "lwc1 %[temp5], 512(%[s0]) \n\t" 225 "mul.s %[temp2], %[temp8], %[temp9] \n\t" 226 "lwc1 %[temp6], 1028(%[v0]) \n\t" 227 "mul.s %[temp3], %[temp10], %[temp11] \n\t" 228 "lwc1 %[temp7], 516(%[s0]) \n\t" 229 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 230 "lwc1 %[temp8], 1032(%[v0]) \n\t" 231 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 232 "lwc1 %[temp9], 520(%[s0]) \n\t" 233 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 234 "lwc1 %[temp10], 1036(%[v0]) \n\t" 235 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 236 "lwc1 %[temp11], 524(%[s0]) \n\t" 237 "lwc1 %[temp12], 1792(%[v0]) \n\t" 238 "lwc1 %[temp13], 768(%[s0]) \n\t" 239 "lwc1 %[temp14], 1796(%[v0]) \n\t" 240 "lwc1 %[temp15], 772(%[s0]) \n\t" 241 "lwc1 %[temp16], 1800(%[v0]) \n\t" 242 "lwc1 %[temp17], 776(%[s0]) \n\t" 243 "lwc1 %[temp18], 1804(%[v0]) \n\t" 244 "lwc1 %[temp19], 780(%[s0]) \n\t" 245 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 246 "lwc1 %[temp4], 2048(%[v0]) \n\t" 247 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 248 "lwc1 %[temp5], 1024(%[s0]) \n\t" 249 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 250 "lwc1 %[temp6], 2052(%[v0]) \n\t" 251 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 252 "lwc1 %[temp7], 1028(%[s0]) \n\t" 253 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 254 "lwc1 %[temp8], 2056(%[v0]) \n\t" 255 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 256 "lwc1 %[temp9], 1032(%[s0]) \n\t" 257 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 258 "lwc1 %[temp10], 2060(%[v0]) \n\t" 259 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 260 "lwc1 %[temp11], 1036(%[s0]) \n\t" 261 "lwc1 %[temp12], 2816(%[v0]) \n\t" 262 "lwc1 %[temp13], 1280(%[s0]) \n\t" 263 "lwc1 %[temp14], 2820(%[v0]) \n\t" 264 "lwc1 %[temp15], 1284(%[s0]) \n\t" 265 "lwc1 %[temp16], 2824(%[v0]) \n\t" 266 "lwc1 %[temp17], 1288(%[s0]) \n\t" 267 "lwc1 %[temp18], 2828(%[v0]) \n\t" 268 "lwc1 %[temp19], 1292(%[s0]) \n\t" 269 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 270 "lwc1 %[temp4], 3072(%[v0]) \n\t" 271 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 272 "lwc1 %[temp5], 1536(%[s0]) \n\t" 273 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 274 "lwc1 %[temp6], 3076(%[v0]) \n\t" 275 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 276 "lwc1 %[temp7], 1540(%[s0]) \n\t" 277 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 278 "lwc1 %[temp8], 3080(%[v0]) \n\t" 279 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 280 "lwc1 %[temp9], 1544(%[s0]) \n\t" 281 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 282 "lwc1 %[temp10], 3084(%[v0]) \n\t" 283 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 284 "lwc1 %[temp11], 1548(%[s0]) \n\t" 285 "lwc1 %[temp12], 3840(%[v0]) \n\t" 286 "lwc1 %[temp13], 1792(%[s0]) \n\t" 287 "lwc1 %[temp14], 3844(%[v0]) \n\t" 288 "lwc1 %[temp15], 1796(%[s0]) \n\t" 289 "lwc1 %[temp16], 3848(%[v0]) \n\t" 290 "lwc1 %[temp17], 1800(%[s0]) \n\t" 291 "lwc1 %[temp18], 3852(%[v0]) \n\t" 292 "lwc1 %[temp19], 1804(%[s0]) \n\t" 293 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 294 "lwc1 %[temp4], 4096(%[v0]) \n\t" 295 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 296 "lwc1 %[temp5], 2048(%[s0]) \n\t" 297 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 298 "lwc1 %[temp6], 4100(%[v0]) \n\t" 299 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 300 "lwc1 %[temp7], 2052(%[s0]) \n\t" 301 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 302 "lwc1 %[temp8], 4104(%[v0]) \n\t" 304 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 305 "lwc1 %[temp9], 2056(%[s0]) \n\t" 307 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 308 "lwc1 %[temp10], 4108(%[v0]) \n\t" 310 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 311 "lwc1 %[temp11], 2044(%[s0]) \n\t" 312 "lwc1 %[temp12], 4848(%[v0]) \n\t" 313 "lwc1 %[temp13], 2288(%[s0]) \n\t" 314 "lwc1 %[temp14], 4852(%[v0]) \n\t" 315 "lwc1 %[temp15], 2292(%[s0]) \n\t" 316 "lwc1 %[temp16], 4856(%[v0]) \n\t" 317 "lwc1 %[temp17], 2296(%[s0]) \n\t" 318 "lwc1 %[temp18], 4860(%[v0]) \n\t" 319 "lwc1 %[temp19], 2300(%[s0]) \n\t" 320 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 321 "lwc1 %[temp4], 0(%[v0]) \n\t" 322 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 323 "lwc1 %[temp5], 0(%[s0]) \n\t" 324 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 325 "lwc1 %[temp6], 4(%[v0]) \n\t" 326 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 327 "lwc1 %[temp7], 4(%[s0]) \n\t" 328 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 329 "lwc1 %[temp8], 8(%[v0]) \n\t" 330 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 331 "lwc1 %[temp9], 8(%[s0]) \n\t" 332 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 333 "lwc1 %[temp10], 12(%[v0]) \n\t" 334 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 335 "lwc1 %[temp11], 12(%[s0]) \n\t" 336 "lwc1 %[temp12], 768(%[v0]) \n\t" 337 "lwc1 %[temp13], 256(%[s0]) \n\t" 338 "lwc1 %[temp14], 772(%[v0]) \n\t" 339 "lwc1 %[temp15], 260(%[s0]) \n\t" 340 "lwc1 %[temp16], 776(%[v0]) \n\t" 341 "lwc1 %[temp17], 264(%[s0]) \n\t" 342 "lwc1 %[temp18], 780(%[v0]) \n\t" 343 "lwc1 %[temp19], 268(%[s0]) \n\t" 344 "swc1 %[temp0], -16(%[dst]) \n\t" 345 "swc1 %[temp1], -12(%[dst]) \n\t" 346 "swc1 %[temp2], -8(%[dst]) \n\t" 347 "bne %[v0], %[v0_end], 1b \n\t" 348 " swc1 %[temp3], -4(%[dst]) \n\t" 349 "mul.s %[temp0], %[temp4], %[temp5] \n\t" 350 "lwc1 %[temp4], 1024(%[v0]) \n\t" 351 "mul.s %[temp1], %[temp6], %[temp7] \n\t" 352 "lwc1 %[temp5], 512(%[s0]) \n\t" 353 "mul.s %[temp2], %[temp8], %[temp9] \n\t" 354 "lwc1 %[temp6], 1028(%[v0]) \n\t" 355 "mul.s %[temp3], %[temp10], %[temp11] \n\t" 356 "lwc1 %[temp7], 516(%[s0]) \n\t" 357 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 358 "lwc1 %[temp8], 1032(%[v0]) \n\t" 359 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 360 "lwc1 %[temp9], 520(%[s0]) \n\t" 361 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 362 "lwc1 %[temp10], 1036(%[v0]) \n\t" 363 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 364 "lwc1 %[temp11], 524(%[s0]) \n\t" 365 "lwc1 %[temp12], 1792(%[v0]) \n\t" 366 "lwc1 %[temp13], 768(%[s0]) \n\t" 367 "lwc1 %[temp14], 1796(%[v0]) \n\t" 368 "lwc1 %[temp15], 772(%[s0]) \n\t" 369 "lwc1 %[temp16], 1800(%[v0]) \n\t" 370 "lwc1 %[temp17], 776(%[s0]) \n\t" 371 "lwc1 %[temp18], 1804(%[v0]) \n\t" 372 "lwc1 %[temp19], 780(%[s0]) \n\t" 373 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 374 "lwc1 %[temp4], 2048(%[v0]) \n\t" 375 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 376 "lwc1 %[temp5], 1024(%[s0]) \n\t" 377 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 378 "lwc1 %[temp6], 2052(%[v0]) \n\t" 379 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 380 "lwc1 %[temp7], 1028(%[s0]) \n\t" 381 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 382 "lwc1 %[temp8], 2056(%[v0]) \n\t" 383 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 384 "lwc1 %[temp9], 1032(%[s0]) \n\t" 385 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 386 "lwc1 %[temp10], 2060(%[v0]) \n\t" 387 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 388 "lwc1 %[temp11], 1036(%[s0]) \n\t" 389 "lwc1 %[temp12], 2816(%[v0]) \n\t" 390 "lwc1 %[temp13], 1280(%[s0]) \n\t" 391 "lwc1 %[temp14], 2820(%[v0]) \n\t" 392 "lwc1 %[temp15], 1284(%[s0]) \n\t" 393 "lwc1 %[temp16], 2824(%[v0]) \n\t" 394 "lwc1 %[temp17], 1288(%[s0]) \n\t" 395 "lwc1 %[temp18], 2828(%[v0]) \n\t" 396 "lwc1 %[temp19], 1292(%[s0]) \n\t" 397 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 398 "lwc1 %[temp4], 3072(%[v0]) \n\t" 399 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 400 "lwc1 %[temp5], 1536(%[s0]) \n\t" 401 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 402 "lwc1 %[temp6], 3076(%[v0]) \n\t" 403 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 404 "lwc1 %[temp7], 1540(%[s0]) \n\t" 405 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 406 "lwc1 %[temp8], 3080(%[v0]) \n\t" 407 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 408 "lwc1 %[temp9], 1544(%[s0]) \n\t" 409 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 410 "lwc1 %[temp10], 3084(%[v0]) \n\t" 411 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 412 "lwc1 %[temp11], 1548(%[s0]) \n\t" 413 "lwc1 %[temp12], 3840(%[v0]) \n\t" 414 "lwc1 %[temp13], 1792(%[s0]) \n\t" 415 "lwc1 %[temp14], 3844(%[v0]) \n\t" 416 "lwc1 %[temp15], 1796(%[s0]) \n\t" 417 "lwc1 %[temp16], 3848(%[v0]) \n\t" 418 "lwc1 %[temp17], 1800(%[s0]) \n\t" 419 "lwc1 %[temp18], 3852(%[v0]) \n\t" 420 "lwc1 %[temp19], 1804(%[s0]) \n\t" 421 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 422 "lwc1 %[temp4], 4096(%[v0]) \n\t" 423 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 424 "lwc1 %[temp5], 2048(%[s0]) \n\t" 425 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 426 "lwc1 %[temp6], 4100(%[v0]) \n\t" 427 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 428 "lwc1 %[temp7], 2052(%[s0]) \n\t" 429 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 430 "lwc1 %[temp8], 4104(%[v0]) \n\t" 431 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 432 "lwc1 %[temp9], 2056(%[s0]) \n\t" 433 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 434 "lwc1 %[temp10], 4108(%[v0]) \n\t" 435 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 436 "lwc1 %[temp11], 2060(%[s0]) \n\t" 437 "lwc1 %[temp12], 4864(%[v0]) \n\t" 438 "lwc1 %[temp13], 2304(%[s0]) \n\t" 439 "lwc1 %[temp14], 4868(%[v0]) \n\t" 440 "lwc1 %[temp15], 2308(%[s0]) \n\t" 441 "madd.s %[temp0], %[temp0], %[temp4], %[temp5] \n\t" 442 "lwc1 %[temp16], 4872(%[v0]) \n\t" 443 "madd.s %[temp1], %[temp1], %[temp6], %[temp7] \n\t" 444 "lwc1 %[temp17], 2312(%[s0]) \n\t" 445 "madd.s %[temp2], %[temp2], %[temp8], %[temp9] \n\t" 446 "lwc1 %[temp18], 4876(%[v0]) \n\t" 447 "madd.s %[temp3], %[temp3], %[temp10], %[temp11] \n\t" 448 "lwc1 %[temp19], 2316(%[s0]) \n\t" 449 "madd.s %[temp0], %[temp0], %[temp12], %[temp13] \n\t" 451 "madd.s %[temp1], %[temp1], %[temp14], %[temp15] \n\t" 452 "madd.s %[temp2], %[temp2], %[temp16], %[temp17] \n\t" 453 "madd.s %[temp3], %[temp3], %[temp18], %[temp19] \n\t" 454 "swc1 %[temp0], -16(%[dst]) \n\t" 455 "swc1 %[temp1], -12(%[dst]) \n\t" 456 "swc1 %[temp2], -8(%[dst]) \n\t" 457 "swc1 %[temp3], -4(%[dst]) \n\t" 460 : [dst]
"+r"(dst), [v0]
"+r"(vv0), [
s0]
"+r"(
s0),
461 [temp0]
"=&f"(temp0), [temp1]
"=&f"(temp1), [temp2]
"=&f"(temp2),
462 [temp3]
"=&f"(temp3), [temp4]
"=&f"(temp4), [temp5]
"=&f"(temp5),
463 [temp6]
"=&f"(temp6), [temp7]
"=&f"(temp7), [temp8]
"=&f"(temp8),
464 [temp9]
"=&f"(temp9), [temp10]
"=&f"(temp10), [temp11]
"=&f"(temp11),
465 [temp12]
"=&f"(temp12), [temp13]
"=&f"(temp13), [temp14]
"=&f"(temp14),
466 [temp15]
"=&f"(temp15), [temp16]
"=&f"(temp16), [temp17]
"=&f"(temp17),
467 [temp18]
"=&f"(temp18), [temp19]
"=&f"(temp19)
468 : [v0_end]
"r"(v0_end)
474 fdsp->
vector_fmul (out, v , sbr_qmf_window , 64 >> div);
475 fdsp->
vector_fmul_add(out, v + ( 192 >> div), sbr_qmf_window + ( 64 >> div), out , 64 >> div);
476 fdsp->
vector_fmul_add(out, v + ( 256 >> div), sbr_qmf_window + (128 >> div), out , 64 >> div);
477 fdsp->
vector_fmul_add(out, v + ( 448 >> div), sbr_qmf_window + (192 >> div), out , 64 >> div);
478 fdsp->
vector_fmul_add(out, v + ( 512 >> div), sbr_qmf_window + (256 >> div), out , 64 >> div);
479 fdsp->
vector_fmul_add(out, v + ( 704 >> div), sbr_qmf_window + (320 >> div), out , 64 >> div);
480 fdsp->
vector_fmul_add(out, v + ( 768 >> div), sbr_qmf_window + (384 >> div), out , 64 >> div);
481 fdsp->
vector_fmul_add(out, v + ( 960 >> div), sbr_qmf_window + (448 >> div), out , 64 >> div);
482 fdsp->
vector_fmul_add(out, v + (1024 >> div), sbr_qmf_window + (512 >> div), out , 64 >> div);
483 fdsp->
vector_fmul_add(out, v + (1216 >> div), sbr_qmf_window + (576 >> div), out , 64 >> div);
489 #define sbr_qmf_analysis sbr_qmf_analysis_mips 490 #define sbr_qmf_synthesis sbr_qmf_synthesis_mips MIPS assembly defines from sys/asm.h but rewritten for use with C inline assembly (rather than from w...
void(* sum64x5)(INTFLOAT *z)
static INTFLOAT sbr_qmf_window_ds[320]
void(* neg_odd_64)(INTFLOAT *x)
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats and store the result in a vector of floats...
Spectral Band Replication definitions and structures.
void(* qmf_post_shuffle)(INTFLOAT W[32][2], const INTFLOAT *z)
AAC definitions and structures.
#define SBR_SYNTHESIS_BUF_SIZE
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
static const INTFLOAT sbr_qmf_window_us[640]
__asm__(".macro parse_r var r\n\t""\\var = -1\n\t"_IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31)".iflt \\var\n\t"".error \"Unable to parse register name \\r\"\n\t"".endif\n\t"".endm")
void(* vector_fmul_add)(float *dst, const float *src0, const float *src1, const float *src2, int len)
Calculate the entry wise product of two vectors of floats, add a third vector of floats and store the...
void(* qmf_deint_neg)(INTFLOAT *v, const INTFLOAT *src)
void(* qmf_pre_shuffle)(INTFLOAT *z)
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
void(* qmf_deint_bfly)(INTFLOAT *v, const INTFLOAT *src0, const INTFLOAT *src1)
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats, and store the result in a vector of floats...