1/* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18/* 19 20 Filename: calc_sbr_synfilterbank.c 21 22 23------------------------------------------------------------------------------ 24 REVISION HISTORY 25 26 27 Who: Date: MM/DD/YYYY 28 Description: 29 30------------------------------------------------------------------------------ 31 INPUT AND OUTPUT DEFINITIONS 32 33 34 35------------------------------------------------------------------------------ 36 FUNCTION DESCRIPTION 37 38 39------------------------------------------------------------------------------ 40 REQUIREMENTS 41 42 43------------------------------------------------------------------------------ 44 REFERENCES 45 46SC 29 Software Copyright Licencing Disclaimer: 47 48This software module was originally developed by 49 Coding Technologies 50 51and edited by 52 - 53 54in the course of development of the ISO/IEC 13818-7 and ISO/IEC 14496-3 55standards for reference purposes and its performance may not have been 56optimized. This software module is an implementation of one or more tools as 57specified by the ISO/IEC 13818-7 and ISO/IEC 14496-3 standards. 58ISO/IEC gives users free license to this software module or modifications 59thereof for use in products claiming conformance to audiovisual and 60image-coding related ITU Recommendations and/or ISO/IEC International 61Standards. ISO/IEC gives users the same free license to this software module or 62modifications thereof for research purposes and further ISO/IEC standardisation. 63Those intending to use this software module in products are advised that its 64use may infringe existing patents. ISO/IEC have no liability for use of this 65software module or modifications thereof. Copyright is not released for 66products that do not conform to audiovisual and image-coding related ITU 67Recommendations and/or ISO/IEC International Standards. 68The original developer retains full right to modify and use the code for its 69own purpose, assign or donate the code to a third party and to inhibit third 70parties from using the code for products that do not conform to audiovisual and 71image-coding related ITU Recommendations and/or ISO/IEC International Standards. 72This copyright notice must be included in all copies or derivative works. 73Copyright (c) ISO/IEC 2002. 74 75------------------------------------------------------------------------------ 76 PSEUDO-CODE 77 78------------------------------------------------------------------------------ 79*/ 80 81#ifdef AAC_PLUS 82 83/*---------------------------------------------------------------------------- 84; INCLUDES 85----------------------------------------------------------------------------*/ 86#include "calc_sbr_synfilterbank.h" 87#include "qmf_filterbank_coeff.h" 88#include "synthesis_sub_band.h" 89#include "fxp_mul32.h" 90#include "aac_mem_funcs.h" 91 92/*---------------------------------------------------------------------------- 93; MACROS 94; Define module specific macros here 95----------------------------------------------------------------------------*/ 96 97 98/*---------------------------------------------------------------------------- 99; DEFINES 100; Include all pre-processor statements here. Include conditional 101; compile variables also. 102----------------------------------------------------------------------------*/ 103 104 105#if defined (PV_ARM_V5) 106 107 108__inline Int16 sat(Int32 y) 109{ 110 Int32 x; 111 __asm 112 { 113 qdadd y, y, y 114 mov y, y, asr #16 115 } 116 117 return((Int16)y); 118} 119 120#define saturate2( a, b, c, d) *c = sat( a); \ 121 *d = sat( b); \ 122 c += 2; \ 123 d -= 2; 124 125 126#elif defined (PV_ARM_V4) 127 128 129__inline Int16 sat(Int32 y) 130{ 131 Int32 x; 132 Int32 z = 31; /* rvct compiler problem */ 133 __asm 134 { 135 sub y, y, y, asr 2 136 mov y, y, asr N 137 mov x, y, asr #15 138 teq x, y, asr z 139 eorne y, INT16_MAX, y, asr #31 140 } 141 142 return((Int16)y); 143} 144 145#define saturate2( a, b, c, d) *c = sat( a); \ 146 *d = sat( b); \ 147 c += 2; \ 148 d -= 2; 149 150#elif defined(PV_ARM_GCC_V5) 151 152__inline Int16 sat(Int32 y) 153{ 154 register Int32 x; 155 register Int32 ra = y; 156 157 158 asm volatile( 159 "qdadd %0, %1, %1\n\t" 160 "mov %0, %0, asr #16" 161 : "=&r*i"(x) 162 : "r"(ra)); 163 164 return ((Int16)x); 165} 166 167 168#define saturate2( a, b, c, d) *c = sat( a); \ 169 *d = sat( b); \ 170 c += 2; \ 171 d -= 2; 172 173 174#elif defined(PV_ARM_MSC_EVC_V5) 175 176#include "armintr.h" 177 178#define saturate2( a, b, c, d) *c = _DAddSatInt( a, a)>>16; \ 179 *d = _DAddSatInt( b, b)>>16; \ 180 c += 2; \ 181 d -= 2; 182 183#else 184 185 186#define saturate2( a, b, c, d) a -= (a>>2); \ 187 a = (a>>N); \ 188 if((a>>15) != (a>>31)) \ 189 { \ 190 a = ((a >> 31) ^ INT16_MAX); \ 191 } \ 192 *c = (Int16)a; \ 193 c += 2; \ 194 b -= (b>>2); \ 195 b = (b>>N); \ 196 if((b>>15) != (b>>31)) \ 197 { \ 198 b = ((b >> 31) ^ INT16_MAX); \ 199 } \ 200 *d = (Int16)b; \ 201 d -= 2; 202 203 204#endif 205 206/*---------------------------------------------------------------------------- 207; LOCAL FUNCTION DEFINITIONS 208; Function Prototype declaration 209----------------------------------------------------------------------------*/ 210 211 212/*---------------------------------------------------------------------------- 213; LOCAL STORE/BUFFER/POINTER DEFINITIONS 214; Variable declaration - defined here and used outside this module 215----------------------------------------------------------------------------*/ 216 217 218 219 220/*---------------------------------------------------------------------------- 221; EXTERNAL FUNCTION REFERENCES 222; Declare functions defined elsewhere and referenced in this module 223----------------------------------------------------------------------------*/ 224 225/*---------------------------------------------------------------------------- 226; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 227; Declare variables used in this module but defined elsewhere 228----------------------------------------------------------------------------*/ 229 230/*---------------------------------------------------------------------------- 231; FUNCTION CODE 232----------------------------------------------------------------------------*/ 233 234void calc_sbr_synfilterbank_LC(Int32 * Sr, 235 Int16 * timeSig, 236 Int16 V[1280], 237 bool bDownSampleSBR) 238{ 239 Int32 i; 240 241 Int32 realAccu1; 242 Int32 realAccu2; 243 const Int32 *pt_C2; 244 245 Int16 *pt_V1; 246 Int16 *pt_V2; 247 248 249 Int16 *pt_timeSig; 250 251 Int16 *pt_timeSig_2; 252 Int32 test1; 253 Int16 tmp1; 254 Int16 tmp2; 255 256 /* shift filterstates */ 257 258 Int32 * pt_Sr = Sr; 259 260 261 if (bDownSampleSBR == false) 262 { 263 264 synthesis_sub_band_LC(pt_Sr, V); 265 266 /* content of V[] is at most 16 bits */ 267 268 pt_timeSig = &timeSig[0]; 269 pt_timeSig_2 = &timeSig[64]; 270 271 272 tmp1 = V[ 704]; 273 tmp2 = V[ 768]; 274 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(0.853738560F), ROUND_SYNFIL); 275 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(-0.361158990F), realAccu1); 276 tmp1 = -V[ 512]; 277 tmp2 = V[ 960]; 278 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(-0.361158990F), realAccu1); 279 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(0.070353307F), realAccu1); 280 tmp1 = V[ 448]; 281 tmp2 = V[1024]; 282 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(0.070353307F), realAccu1); 283 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(-0.013271822F), realAccu1); 284 tmp1 = -V[ 256]; 285 tmp2 = V[ 192]; 286 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(-0.013271822F), realAccu1); 287 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(0.002620176F), realAccu1); 288 realAccu1 = fxp_mac_16_by_16(V[1216], Qfmt(0.002620176F), realAccu1); 289 290 tmp1 = V[ 32]; 291 tmp2 = V[1248]; 292 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(-0.000665042F), ROUND_SYNFIL); 293 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(-0.000665042F), realAccu2); 294 tmp1 = V[ 224]; 295 tmp2 = V[1056]; 296 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.005271576F), realAccu2); 297 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.005271576F), realAccu2); 298 tmp1 = V[ 992]; 299 tmp2 = V[ 288]; 300 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.058591568F), realAccu2); 301 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.058591568F), realAccu2); 302 tmp1 = V[ 480]; 303 tmp2 = V[ 800]; 304 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(-0.058370533F), realAccu2); 305 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(-0.058370533F), realAccu2); 306 tmp1 = V[ 736]; 307 tmp2 = V[ 544]; 308 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.702238872F), realAccu2); 309 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.702238872F), realAccu2); 310 311 312 313 saturate2(realAccu1, realAccu2, pt_timeSig, pt_timeSig_2); 314 315 pt_timeSig_2 = &timeSig[126]; 316 317 pt_V1 = &V[1]; 318 pt_V2 = &V[1279]; 319 320 pt_C2 = &sbrDecoderFilterbankCoefficients[0]; 321 322 for (i = 31; i != 0; i--) 323 { 324 test1 = *(pt_C2++); 325 tmp1 = *(pt_V1++); 326 tmp2 = *(pt_V2--); 327 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, ROUND_SYNFIL); 328 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, ROUND_SYNFIL); 329 tmp1 = pt_V1[ 191]; 330 tmp2 = pt_V2[ -191]; 331 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 332 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 333 334 test1 = *(pt_C2++); 335 tmp1 = pt_V1[ 255]; 336 tmp2 = pt_V2[ -255]; 337 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 338 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 339 tmp1 = pt_V1[ 447]; 340 tmp2 = pt_V2[ -447]; 341 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 342 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 343 344 test1 = *(pt_C2++); 345 tmp1 = pt_V1[ 511]; 346 tmp2 = pt_V2[ -511]; 347 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 348 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 349 tmp1 = pt_V1[ 703]; 350 tmp2 = pt_V2[ -703]; 351 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 352 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 353 354 test1 = *(pt_C2++); 355 tmp1 = pt_V1[ 767]; 356 tmp2 = pt_V2[ -767]; 357 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 358 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 359 tmp1 = pt_V1[ 959]; 360 tmp2 = pt_V2[ -959]; 361 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 362 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 363 364 test1 = *(pt_C2++); 365 tmp1 = pt_V1[ 1023]; 366 tmp2 = pt_V2[ -1023]; 367 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 368 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 369 tmp1 = pt_V1[ 1215]; 370 tmp2 = pt_V2[ -1215]; 371 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 372 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 373 374 saturate2(realAccu1, realAccu2, pt_timeSig, pt_timeSig_2); 375 376 } 377 } 378 else 379 { 380 381 synthesis_sub_band_LC_down_sampled(Sr, V); 382 383 /* 384 * window signal 385 * calculate output samples 386 */ 387 388 389 pt_V1 = &V[0]; 390 pt_V2 = &V[96]; 391 392 393 Int32 * pt_out = Sr; 394 395 for (i = 0; i < 8; i++) 396 { 397 *(pt_out++) = 0; 398 *(pt_out++) = 0; 399 *(pt_out++) = 0; 400 *(pt_out++) = 0; 401 } 402 403 const Int32* pt_C1 = &sbrDecoderFilterbankCoefficients_down_smpl[0]; 404 pt_C2 = &sbrDecoderFilterbankCoefficients_down_smpl[16]; 405 406 for (int k = 0; k < 5; k++) 407 { 408 pt_out -= 32; 409 for (i = 0; i < 16; i++) 410 { 411 realAccu1 = fxp_mul_16_by_16bt(*(pt_V1++), *(pt_C1)); 412 realAccu2 = fxp_mul_16_by_16bb(*(pt_V1++), *(pt_C1++)); 413 realAccu1 = fxp_mac_16_by_16_bt(*(pt_V2++), *(pt_C2), realAccu1); 414 realAccu2 = fxp_mac_16_by_16_bb(*(pt_V2++), *(pt_C2++), realAccu2); 415 *(pt_out++) += realAccu1 >> 5; 416 *(pt_out++) += realAccu2 >> 5; 417 418 } 419 pt_V1 += 96; 420 pt_V2 += 96; 421 pt_C1 += 16; 422 pt_C2 += 16; 423 } 424 pt_out -= 32; 425 426 for (i = 0; i < 32; i++) 427 { 428 timeSig[2*i] = (Int16)((*(pt_out++) + 512) >> 10); 429 } 430 431 } 432 433} 434 435 436 437#ifdef HQ_SBR 438 439void calc_sbr_synfilterbank(Int32 * Sr, 440 Int32 * Si, 441 Int16 * timeSig, 442 Int16 V[1280], 443 bool bDownSampleSBR) 444{ 445 Int32 i; 446 447 const Int32 *pt_C2; 448 449 Int32 realAccu1; 450 Int32 realAccu2; 451 452 Int16 *pt_V1; 453 Int16 *pt_V2; 454 455 Int16 *pt_timeSig; 456 457 Int16 *pt_timeSig_2; 458 Int32 test1; 459 Int16 tmp1; 460 Int16 tmp2; 461 462 463 if (bDownSampleSBR == false) 464 { 465 synthesis_sub_band(Sr, Si, V); 466 467 /* content of V[] is at most 16 bits */ 468 pt_timeSig = &timeSig[0]; 469 pt_timeSig_2 = &timeSig[64]; 470 471 tmp1 = V[ 704]; 472 tmp2 = V[ 768]; 473 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(0.853738560F), ROUND_SYNFIL); 474 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(-0.361158990F), realAccu1); 475 tmp1 = -V[ 512]; 476 tmp2 = V[ 960]; 477 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(-0.361158990F), realAccu1); 478 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(0.070353307F), realAccu1); 479 tmp1 = V[ 448]; 480 tmp2 = V[1024]; 481 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(0.070353307F), realAccu1); 482 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(-0.013271822F), realAccu1); 483 tmp1 = -V[ 256]; 484 tmp2 = V[ 192]; 485 realAccu1 = fxp_mac_16_by_16(tmp1, Qfmt(-0.013271822F), realAccu1); 486 realAccu1 = fxp_mac_16_by_16(tmp2, Qfmt(0.002620176F), realAccu1); 487 realAccu1 = fxp_mac_16_by_16(V[1216], Qfmt(0.002620176F), realAccu1); 488 489 tmp1 = V[ 32]; 490 tmp2 = V[1248]; 491 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(-0.000665042F), ROUND_SYNFIL); 492 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(-0.000665042F), realAccu2); 493 tmp1 = V[ 224]; 494 tmp2 = V[1056]; 495 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.005271576F), realAccu2); 496 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.005271576F), realAccu2); 497 tmp1 = V[ 992]; 498 tmp2 = V[ 288]; 499 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.058591568F), realAccu2); 500 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.058591568F), realAccu2); 501 tmp1 = V[ 480]; 502 tmp2 = V[ 800]; 503 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(-0.058370533F), realAccu2); 504 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(-0.058370533F), realAccu2); 505 tmp1 = V[ 736]; 506 tmp2 = V[ 544]; 507 realAccu2 = fxp_mac_16_by_16(tmp1, Qfmt(0.702238872F), realAccu2); 508 realAccu2 = fxp_mac_16_by_16(tmp2, Qfmt(0.702238872F), realAccu2); 509 510 511 saturate2(realAccu1, realAccu2, pt_timeSig, pt_timeSig_2); 512 513 pt_timeSig_2 = &timeSig[126]; 514 515 pt_V1 = &V[1]; 516 pt_V2 = &V[1279]; 517 518 pt_C2 = &sbrDecoderFilterbankCoefficients[0]; 519 520 for (i = 31; i != 0; i--) 521 { 522 test1 = *(pt_C2++); 523 tmp1 = *(pt_V1++); 524 tmp2 = *(pt_V2--); 525 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, ROUND_SYNFIL); 526 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, ROUND_SYNFIL); 527 tmp1 = pt_V1[ 191]; 528 tmp2 = pt_V2[ -191]; 529 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 530 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 531 532 test1 = *(pt_C2++); 533 tmp1 = pt_V1[ 255]; 534 tmp2 = pt_V2[ -255]; 535 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 536 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 537 tmp1 = pt_V1[ 447]; 538 tmp2 = pt_V2[ -447]; 539 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 540 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 541 542 test1 = *(pt_C2++); 543 tmp1 = pt_V1[ 511]; 544 tmp2 = pt_V2[ -511]; 545 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 546 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 547 tmp1 = pt_V1[ 703]; 548 tmp2 = pt_V2[ -703]; 549 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 550 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 551 552 test1 = *(pt_C2++); 553 tmp1 = pt_V1[ 767]; 554 tmp2 = pt_V2[ -767]; 555 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 556 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 557 tmp1 = pt_V1[ 959]; 558 tmp2 = pt_V2[ -959]; 559 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 560 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 561 562 test1 = *(pt_C2++); 563 tmp1 = pt_V1[ 1023]; 564 tmp2 = pt_V2[ -1023]; 565 realAccu1 = fxp_mac_16_by_16_bt(tmp1 , test1, realAccu1); 566 realAccu2 = fxp_mac_16_by_16_bt(tmp2 , test1, realAccu2); 567 tmp1 = pt_V1[ 1215]; 568 tmp2 = pt_V2[ -1215]; 569 realAccu1 = fxp_mac_16_by_16_bb(tmp1, test1, realAccu1); 570 realAccu2 = fxp_mac_16_by_16_bb(tmp2, test1, realAccu2); 571 572 saturate2(realAccu1, realAccu2, pt_timeSig, pt_timeSig_2); 573 } 574 575 } 576 else 577 { 578 579 synthesis_sub_band_down_sampled(Sr, Si, V); 580 581 582 Int32 * pt_out = Sr; 583 584 for (i = 0; i < 8; i++) 585 { 586 *(pt_out++) = 0; 587 *(pt_out++) = 0; 588 *(pt_out++) = 0; 589 *(pt_out++) = 0; 590 } 591 592 593 /* 594 * window signal 595 * calculate output samples 596 */ 597 598 pt_V1 = &V[0]; 599 pt_V2 = &V[96]; 600 601 602 const Int32* pt_C1 = &sbrDecoderFilterbankCoefficients_down_smpl[0]; 603 pt_C2 = &sbrDecoderFilterbankCoefficients_down_smpl[16]; 604 605 for (Int k = 0; k < 5; k++) 606 { 607 pt_out -= 32; 608 for (i = 0; i < 16; i++) 609 { 610 realAccu1 = fxp_mul_16_by_16bt(*(pt_V1++), *(pt_C1)); 611 realAccu2 = fxp_mul_16_by_16bb(*(pt_V1++), *(pt_C1++)); 612 realAccu1 = fxp_mac_16_by_16_bt(*(pt_V2++), *(pt_C2), realAccu1); 613 realAccu2 = fxp_mac_16_by_16_bb(*(pt_V2++), *(pt_C2++), realAccu2); 614 *(pt_out++) += realAccu1 >> 5; 615 *(pt_out++) += realAccu2 >> 5; 616 } 617 pt_V1 += 96; 618 pt_V2 += 96; 619 pt_C1 += 16; 620 pt_C2 += 16; 621 } 622 pt_out -= 32; 623 624 for (i = 0; i < 32; i++) 625 { 626 timeSig[2*i] = (Int16)((*(pt_out++) + 512) >> 10); 627 } 628 629 } 630} 631 632 633#endif /* --- HQ_SBR --- */ 634 635 636#endif /* --- AAC_PLUS --- */ 637 638 639 640