1 /* Copyright (c) 2007-2008 CSIRO 2 Copyright (c) 2007-2009 Xiph.Org Foundation 3 Copyright (c) 2008-2009 Gregory Maxwell 4 Written by Jean-Marc Valin and Gregory Maxwell */ 5 /* 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions 8 are met: 9 10 - Redistributions of source code must retain the above copyright 11 notice, this list of conditions and the following disclaimer. 12 13 - Redistributions in binary form must reproduce the above copyright 14 notice, this list of conditions and the following disclaimer in the 15 documentation and/or other materials provided with the distribution. 16 17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 21 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifdef HAVE_CONFIG_H 31 #include "config.h" 32 #endif 33 34 #include <math.h> 35 #include "bands.h" 36 #include "modes.h" 37 #include "vq.h" 38 #include "cwrs.h" 39 #include "stack_alloc.h" 40 #include "os_support.h" 41 #include "mathops.h" 42 #include "rate.h" 43 #include "quant_bands.h" 44 #include "pitch.h" 45 46 int hysteresis_decision(opus_val16 val, const opus_val16 *thresholds, const opus_val16 *hysteresis, int N, int prev) 47 { 48 int i; 49 for (i=0;i<N;i++) 50 { 51 if (val < thresholds[i]) 52 break; 53 } 54 if (i>prev && val < thresholds[prev]+hysteresis[prev]) 55 i=prev; 56 if (i<prev && val > thresholds[prev-1]-hysteresis[prev-1]) 57 i=prev; 58 return i; 59 } 60 61 opus_uint32 celt_lcg_rand(opus_uint32 seed) 62 { 63 return 1664525 * seed + 1013904223; 64 } 65 66 /* This is a cos() approximation designed to be bit-exact on any platform. Bit exactness 67 with this approximation is important because it has an impact on the bit allocation */ 68 static opus_int16 bitexact_cos(opus_int16 x) 69 { 70 opus_int32 tmp; 71 opus_int16 x2; 72 tmp = (4096+((opus_int32)(x)*(x)))>>13; 73 celt_assert(tmp<=32767); 74 x2 = tmp; 75 x2 = (32767-x2) + FRAC_MUL16(x2, (-7651 + FRAC_MUL16(x2, (8277 + FRAC_MUL16(-626, x2))))); 76 celt_assert(x2<=32766); 77 return 1+x2; 78 } 79 80 static int bitexact_log2tan(int isin,int icos) 81 { 82 int lc; 83 int ls; 84 lc=EC_ILOG(icos); 85 ls=EC_ILOG(isin); 86 icos<<=15-lc; 87 isin<<=15-ls; 88 return (ls-lc)*(1<<11) 89 +FRAC_MUL16(isin, FRAC_MUL16(isin, -2597) + 7932) 90 -FRAC_MUL16(icos, FRAC_MUL16(icos, -2597) + 7932); 91 } 92 93 #ifdef FIXED_POINT 94 /* Compute the amplitude (sqrt energy) in each of the bands */ 95 void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bandE, int end, int C, int M) 96 { 97 int i, c, N; 98 const opus_int16 *eBands = m->eBands; 99 N = M*m->shortMdctSize; 100 c=0; do { 101 for (i=0;i<end;i++) 102 { 103 int j; 104 opus_val32 maxval=0; 105 opus_val32 sum = 0; 106 107 j=M*eBands[i]; do { 108 maxval = MAX32(maxval, X[j+c*N]); 109 maxval = MAX32(maxval, -X[j+c*N]); 110 } while (++j<M*eBands[i+1]); 111 112 if (maxval > 0) 113 { 114 int shift = celt_ilog2(maxval)-10; 115 j=M*eBands[i]; do { 116 sum = MAC16_16(sum, EXTRACT16(VSHR32(X[j+c*N],shift)), 117 EXTRACT16(VSHR32(X[j+c*N],shift))); 118 } while (++j<M*eBands[i+1]); 119 /* We're adding one here to ensure the normalized band isn't larger than unity norm */ 120 bandE[i+c*m->nbEBands] = EPSILON+VSHR32(EXTEND32(celt_sqrt(sum)),-shift); 121 } else { 122 bandE[i+c*m->nbEBands] = EPSILON; 123 } 124 /*printf ("%f ", bandE[i+c*m->nbEBands]);*/ 125 } 126 } while (++c<C); 127 /*printf ("\n");*/ 128 } 129 130 /* Normalise each band such that the energy is one. */ 131 void normalise_bands(const CELTMode *m, const celt_sig * OPUS_RESTRICT freq, celt_norm * OPUS_RESTRICT X, const celt_ener *bandE, int end, int C, int M) 132 { 133 int i, c, N; 134 const opus_int16 *eBands = m->eBands; 135 N = M*m->shortMdctSize; 136 c=0; do { 137 i=0; do { 138 opus_val16 g; 139 int j,shift; 140 opus_val16 E; 141 shift = celt_zlog2(bandE[i+c*m->nbEBands])-13; 142 E = VSHR32(bandE[i+c*m->nbEBands], shift); 143 g = EXTRACT16(celt_rcp(SHL32(E,3))); 144 j=M*eBands[i]; do { 145 X[j+c*N] = MULT16_16_Q15(VSHR32(freq[j+c*N],shift-1),g); 146 } while (++j<M*eBands[i+1]); 147 } while (++i<end); 148 } while (++c<C); 149 } 150 151 #else /* FIXED_POINT */ 152 /* Compute the amplitude (sqrt energy) in each of the bands */ 153 void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bandE, int end, int C, int M) 154 { 155 int i, c, N; 156 const opus_int16 *eBands = m->eBands; 157 N = M*m->shortMdctSize; 158 c=0; do { 159 for (i=0;i<end;i++) 160 { 161 int j; 162 opus_val32 sum = 1e-27f; 163 for (j=M*eBands[i];j<M*eBands[i+1];j++) 164 sum += X[j+c*N]*X[j+c*N]; 165 bandE[i+c*m->nbEBands] = celt_sqrt(sum); 166 /*printf ("%f ", bandE[i+c*m->nbEBands]);*/ 167 } 168 } while (++c<C); 169 /*printf ("\n");*/ 170 } 171 172 /* Normalise each band such that the energy is one. */ 173 void normalise_bands(const CELTMode *m, const celt_sig * OPUS_RESTRICT freq, celt_norm * OPUS_RESTRICT X, const celt_ener *bandE, int end, int C, int M) 174 { 175 int i, c, N; 176 const opus_int16 *eBands = m->eBands; 177 N = M*m->shortMdctSize; 178 c=0; do { 179 for (i=0;i<end;i++) 180 { 181 int j; 182 opus_val16 g = 1.f/(1e-27f+bandE[i+c*m->nbEBands]); 183 for (j=M*eBands[i];j<M*eBands[i+1];j++) 184 X[j+c*N] = freq[j+c*N]*g; 185 } 186 } while (++c<C); 187 } 188 189 #endif /* FIXED_POINT */ 190 191 /* De-normalise the energy to produce the synthesis from the unit-energy bands */ 192 void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X, 193 celt_sig * OPUS_RESTRICT freq, const opus_val16 *bandLogE, int start, int end, int C, int M) 194 { 195 int i, c, N; 196 const opus_int16 *eBands = m->eBands; 197 N = M*m->shortMdctSize; 198 celt_assert2(C<=2, "denormalise_bands() not implemented for >2 channels"); 199 c=0; do { 200 celt_sig * OPUS_RESTRICT f; 201 const celt_norm * OPUS_RESTRICT x; 202 f = freq+c*N; 203 x = X+c*N+M*eBands[start]; 204 for (i=0;i<M*eBands[start];i++) 205 *f++ = 0; 206 for (i=start;i<end;i++) 207 { 208 int j, band_end; 209 opus_val16 g; 210 opus_val16 lg; 211 #ifdef FIXED_POINT 212 int shift; 213 #endif 214 j=M*eBands[i]; 215 band_end = M*eBands[i+1]; 216 lg = ADD16(bandLogE[i+c*m->nbEBands], SHL16((opus_val16)eMeans[i],6)); 217 #ifndef FIXED_POINT 218 g = celt_exp2(lg); 219 #else 220 /* Handle the integer part of the log energy */ 221 shift = 16-(lg>>DB_SHIFT); 222 if (shift>31) 223 { 224 shift=0; 225 g=0; 226 } else { 227 /* Handle the fractional part. */ 228 g = celt_exp2_frac(lg&((1<<DB_SHIFT)-1)); 229 } 230 /* Handle extreme gains with negative shift. */ 231 if (shift<0) 232 { 233 /* For shift < -2 we'd be likely to overflow, so we're capping 234 the gain here. This shouldn't happen unless the bitstream is 235 already corrupted. */ 236 if (shift < -2) 237 { 238 g = 32767; 239 shift = -2; 240 } 241 do { 242 *f++ = SHL32(MULT16_16(*x++, g), -shift); 243 } while (++j<band_end); 244 } else 245 #endif 246 /* Be careful of the fixed-point "else" just above when changing this code */ 247 do { 248 *f++ = SHR32(MULT16_16(*x++, g), shift); 249 } while (++j<band_end); 250 } 251 celt_assert(start <= end); 252 for (i=M*eBands[end];i<N;i++) 253 *f++ = 0; 254 } while (++c<C); 255 } 256 257 /* This prevents energy collapse for transients with multiple short MDCTs */ 258 void anti_collapse(const CELTMode *m, celt_norm *X_, unsigned char *collapse_masks, int LM, int C, int size, 259 int start, int end, opus_val16 *logE, opus_val16 *prev1logE, 260 opus_val16 *prev2logE, int *pulses, opus_uint32 seed) 261 { 262 int c, i, j, k; 263 for (i=start;i<end;i++) 264 { 265 int N0; 266 opus_val16 thresh, sqrt_1; 267 int depth; 268 #ifdef FIXED_POINT 269 int shift; 270 opus_val32 thresh32; 271 #endif 272 273 N0 = m->eBands[i+1]-m->eBands[i]; 274 /* depth in 1/8 bits */ 275 depth = (1+pulses[i])/((m->eBands[i+1]-m->eBands[i])<<LM); 276 277 #ifdef FIXED_POINT 278 thresh32 = SHR32(celt_exp2(-SHL16(depth, 10-BITRES)),1); 279 thresh = MULT16_32_Q15(QCONST16(0.5f, 15), MIN32(32767,thresh32)); 280 { 281 opus_val32 t; 282 t = N0<<LM; 283 shift = celt_ilog2(t)>>1; 284 t = SHL32(t, (7-shift)<<1); 285 sqrt_1 = celt_rsqrt_norm(t); 286 } 287 #else 288 thresh = .5f*celt_exp2(-.125f*depth); 289 sqrt_1 = celt_rsqrt(N0<<LM); 290 #endif 291 292 c=0; do 293 { 294 celt_norm *X; 295 opus_val16 prev1; 296 opus_val16 prev2; 297 opus_val32 Ediff; 298 opus_val16 r; 299 int renormalize=0; 300 prev1 = prev1logE[c*m->nbEBands+i]; 301 prev2 = prev2logE[c*m->nbEBands+i]; 302 if (C==1) 303 { 304 prev1 = MAX16(prev1,prev1logE[m->nbEBands+i]); 305 prev2 = MAX16(prev2,prev2logE[m->nbEBands+i]); 306 } 307 Ediff = EXTEND32(logE[c*m->nbEBands+i])-EXTEND32(MIN16(prev1,prev2)); 308 Ediff = MAX32(0, Ediff); 309 310 #ifdef FIXED_POINT 311 if (Ediff < 16384) 312 { 313 opus_val32 r32 = SHR32(celt_exp2(-EXTRACT16(Ediff)),1); 314 r = 2*MIN16(16383,r32); 315 } else { 316 r = 0; 317 } 318 if (LM==3) 319 r = MULT16_16_Q14(23170, MIN32(23169, r)); 320 r = SHR16(MIN16(thresh, r),1); 321 r = SHR32(MULT16_16_Q15(sqrt_1, r),shift); 322 #else 323 /* r needs to be multiplied by 2 or 2*sqrt(2) depending on LM because 324 short blocks don't have the same energy as long */ 325 r = 2.f*celt_exp2(-Ediff); 326 if (LM==3) 327 r *= 1.41421356f; 328 r = MIN16(thresh, r); 329 r = r*sqrt_1; 330 #endif 331 X = X_+c*size+(m->eBands[i]<<LM); 332 for (k=0;k<1<<LM;k++) 333 { 334 /* Detect collapse */ 335 if (!(collapse_masks[i*C+c]&1<<k)) 336 { 337 /* Fill with noise */ 338 for (j=0;j<N0;j++) 339 { 340 seed = celt_lcg_rand(seed); 341 X[(j<<LM)+k] = (seed&0x8000 ? r : -r); 342 } 343 renormalize = 1; 344 } 345 } 346 /* We just added some energy, so we need to renormalise */ 347 if (renormalize) 348 renormalise_vector(X, N0<<LM, Q15ONE); 349 } while (++c<C); 350 } 351 } 352 353 static void intensity_stereo(const CELTMode *m, celt_norm *X, celt_norm *Y, const celt_ener *bandE, int bandID, int N) 354 { 355 int i = bandID; 356 int j; 357 opus_val16 a1, a2; 358 opus_val16 left, right; 359 opus_val16 norm; 360 #ifdef FIXED_POINT 361 int shift = celt_zlog2(MAX32(bandE[i], bandE[i+m->nbEBands]))-13; 362 #endif 363 left = VSHR32(bandE[i],shift); 364 right = VSHR32(bandE[i+m->nbEBands],shift); 365 norm = EPSILON + celt_sqrt(EPSILON+MULT16_16(left,left)+MULT16_16(right,right)); 366 a1 = DIV32_16(SHL32(EXTEND32(left),14),norm); 367 a2 = DIV32_16(SHL32(EXTEND32(right),14),norm); 368 for (j=0;j<N;j++) 369 { 370 celt_norm r, l; 371 l = X[j]; 372 r = Y[j]; 373 X[j] = MULT16_16_Q14(a1,l) + MULT16_16_Q14(a2,r); 374 /* Side is not encoded, no need to calculate */ 375 } 376 } 377 378 static void stereo_split(celt_norm *X, celt_norm *Y, int N) 379 { 380 int j; 381 for (j=0;j<N;j++) 382 { 383 celt_norm r, l; 384 l = MULT16_16_Q15(QCONST16(.70710678f,15), X[j]); 385 r = MULT16_16_Q15(QCONST16(.70710678f,15), Y[j]); 386 X[j] = l+r; 387 Y[j] = r-l; 388 } 389 } 390 391 static void stereo_merge(celt_norm *X, celt_norm *Y, opus_val16 mid, int N) 392 { 393 int j; 394 opus_val32 xp=0, side=0; 395 opus_val32 El, Er; 396 opus_val16 mid2; 397 #ifdef FIXED_POINT 398 int kl, kr; 399 #endif 400 opus_val32 t, lgain, rgain; 401 402 /* Compute the norm of X+Y and X-Y as |X|^2 + |Y|^2 +/- sum(xy) */ 403 dual_inner_prod(Y, X, Y, N, &xp, &side); 404 /* Compensating for the mid normalization */ 405 xp = MULT16_32_Q15(mid, xp); 406 /* mid and side are in Q15, not Q14 like X and Y */ 407 mid2 = SHR32(mid, 1); 408 El = MULT16_16(mid2, mid2) + side - 2*xp; 409 Er = MULT16_16(mid2, mid2) + side + 2*xp; 410 if (Er < QCONST32(6e-4f, 28) || El < QCONST32(6e-4f, 28)) 411 { 412 for (j=0;j<N;j++) 413 Y[j] = X[j]; 414 return; 415 } 416 417 #ifdef FIXED_POINT 418 kl = celt_ilog2(El)>>1; 419 kr = celt_ilog2(Er)>>1; 420 #endif 421 t = VSHR32(El, (kl-7)<<1); 422 lgain = celt_rsqrt_norm(t); 423 t = VSHR32(Er, (kr-7)<<1); 424 rgain = celt_rsqrt_norm(t); 425 426 #ifdef FIXED_POINT 427 if (kl < 7) 428 kl = 7; 429 if (kr < 7) 430 kr = 7; 431 #endif 432 433 for (j=0;j<N;j++) 434 { 435 celt_norm r, l; 436 /* Apply mid scaling (side is already scaled) */ 437 l = MULT16_16_Q15(mid, X[j]); 438 r = Y[j]; 439 X[j] = EXTRACT16(PSHR32(MULT16_16(lgain, SUB16(l,r)), kl+1)); 440 Y[j] = EXTRACT16(PSHR32(MULT16_16(rgain, ADD16(l,r)), kr+1)); 441 } 442 } 443 444 /* Decide whether we should spread the pulses in the current frame */ 445 int spreading_decision(const CELTMode *m, celt_norm *X, int *average, 446 int last_decision, int *hf_average, int *tapset_decision, int update_hf, 447 int end, int C, int M) 448 { 449 int i, c, N0; 450 int sum = 0, nbBands=0; 451 const opus_int16 * OPUS_RESTRICT eBands = m->eBands; 452 int decision; 453 int hf_sum=0; 454 455 celt_assert(end>0); 456 457 N0 = M*m->shortMdctSize; 458 459 if (M*(eBands[end]-eBands[end-1]) <= 8) 460 return SPREAD_NONE; 461 c=0; do { 462 for (i=0;i<end;i++) 463 { 464 int j, N, tmp=0; 465 int tcount[3] = {0,0,0}; 466 celt_norm * OPUS_RESTRICT x = X+M*eBands[i]+c*N0; 467 N = M*(eBands[i+1]-eBands[i]); 468 if (N<=8) 469 continue; 470 /* Compute rough CDF of |x[j]| */ 471 for (j=0;j<N;j++) 472 { 473 opus_val32 x2N; /* Q13 */ 474 475 x2N = MULT16_16(MULT16_16_Q15(x[j], x[j]), N); 476 if (x2N < QCONST16(0.25f,13)) 477 tcount[0]++; 478 if (x2N < QCONST16(0.0625f,13)) 479 tcount[1]++; 480 if (x2N < QCONST16(0.015625f,13)) 481 tcount[2]++; 482 } 483 484 /* Only include four last bands (8 kHz and up) */ 485 if (i>m->nbEBands-4) 486 hf_sum += 32*(tcount[1]+tcount[0])/N; 487 tmp = (2*tcount[2] >= N) + (2*tcount[1] >= N) + (2*tcount[0] >= N); 488 sum += tmp*256; 489 nbBands++; 490 } 491 } while (++c<C); 492 493 if (update_hf) 494 { 495 if (hf_sum) 496 hf_sum /= C*(4-m->nbEBands+end); 497 *hf_average = (*hf_average+hf_sum)>>1; 498 hf_sum = *hf_average; 499 if (*tapset_decision==2) 500 hf_sum += 4; 501 else if (*tapset_decision==0) 502 hf_sum -= 4; 503 if (hf_sum > 22) 504 *tapset_decision=2; 505 else if (hf_sum > 18) 506 *tapset_decision=1; 507 else 508 *tapset_decision=0; 509 } 510 /*printf("%d %d %d\n", hf_sum, *hf_average, *tapset_decision);*/ 511 celt_assert(nbBands>0); /* end has to be non-zero */ 512 sum /= nbBands; 513 /* Recursive averaging */ 514 sum = (sum+*average)>>1; 515 *average = sum; 516 /* Hysteresis */ 517 sum = (3*sum + (((3-last_decision)<<7) + 64) + 2)>>2; 518 if (sum < 80) 519 { 520 decision = SPREAD_AGGRESSIVE; 521 } else if (sum < 256) 522 { 523 decision = SPREAD_NORMAL; 524 } else if (sum < 384) 525 { 526 decision = SPREAD_LIGHT; 527 } else { 528 decision = SPREAD_NONE; 529 } 530 #ifdef FUZZING 531 decision = rand()&0x3; 532 *tapset_decision=rand()%3; 533 #endif 534 return decision; 535 } 536 537 /* Indexing table for converting from natural Hadamard to ordery Hadamard 538 This is essentially a bit-reversed Gray, on top of which we've added 539 an inversion of the order because we want the DC at the end rather than 540 the beginning. The lines are for N=2, 4, 8, 16 */ 541 static const int ordery_table[] = { 542 1, 0, 543 3, 0, 2, 1, 544 7, 0, 4, 3, 6, 1, 5, 2, 545 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5, 546 }; 547 548 static void deinterleave_hadamard(celt_norm *X, int N0, int stride, int hadamard) 549 { 550 int i,j; 551 VARDECL(celt_norm, tmp); 552 int N; 553 SAVE_STACK; 554 N = N0*stride; 555 ALLOC(tmp, N, celt_norm); 556 celt_assert(stride>0); 557 if (hadamard) 558 { 559 const int *ordery = ordery_table+stride-2; 560 for (i=0;i<stride;i++) 561 { 562 for (j=0;j<N0;j++) 563 tmp[ordery[i]*N0+j] = X[j*stride+i]; 564 } 565 } else { 566 for (i=0;i<stride;i++) 567 for (j=0;j<N0;j++) 568 tmp[i*N0+j] = X[j*stride+i]; 569 } 570 for (j=0;j<N;j++) 571 X[j] = tmp[j]; 572 RESTORE_STACK; 573 } 574 575 static void interleave_hadamard(celt_norm *X, int N0, int stride, int hadamard) 576 { 577 int i,j; 578 VARDECL(celt_norm, tmp); 579 int N; 580 SAVE_STACK; 581 N = N0*stride; 582 ALLOC(tmp, N, celt_norm); 583 if (hadamard) 584 { 585 const int *ordery = ordery_table+stride-2; 586 for (i=0;i<stride;i++) 587 for (j=0;j<N0;j++) 588 tmp[j*stride+i] = X[ordery[i]*N0+j]; 589 } else { 590 for (i=0;i<stride;i++) 591 for (j=0;j<N0;j++) 592 tmp[j*stride+i] = X[i*N0+j]; 593 } 594 for (j=0;j<N;j++) 595 X[j] = tmp[j]; 596 RESTORE_STACK; 597 } 598 599 void haar1(celt_norm *X, int N0, int stride) 600 { 601 int i, j; 602 N0 >>= 1; 603 for (i=0;i<stride;i++) 604 for (j=0;j<N0;j++) 605 { 606 celt_norm tmp1, tmp2; 607 tmp1 = MULT16_16_Q15(QCONST16(.70710678f,15), X[stride*2*j+i]); 608 tmp2 = MULT16_16_Q15(QCONST16(.70710678f,15), X[stride*(2*j+1)+i]); 609 X[stride*2*j+i] = tmp1 + tmp2; 610 X[stride*(2*j+1)+i] = tmp1 - tmp2; 611 } 612 } 613 614 static int compute_qn(int N, int b, int offset, int pulse_cap, int stereo) 615 { 616 static const opus_int16 exp2_table8[8] = 617 {16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048}; 618 int qn, qb; 619 int N2 = 2*N-1; 620 if (stereo && N==2) 621 N2--; 622 /* The upper limit ensures that in a stereo split with itheta==16384, we'll 623 always have enough bits left over to code at least one pulse in the 624 side; otherwise it would collapse, since it doesn't get folded. */ 625 qb = IMIN(b-pulse_cap-(4<<BITRES), (b+N2*offset)/N2); 626 627 qb = IMIN(8<<BITRES, qb); 628 629 if (qb<(1<<BITRES>>1)) { 630 qn = 1; 631 } else { 632 qn = exp2_table8[qb&0x7]>>(14-(qb>>BITRES)); 633 qn = (qn+1)>>1<<1; 634 } 635 celt_assert(qn <= 256); 636 return qn; 637 } 638 639 struct band_ctx { 640 int encode; 641 const CELTMode *m; 642 int i; 643 int intensity; 644 int spread; 645 int tf_change; 646 ec_ctx *ec; 647 opus_int32 remaining_bits; 648 const celt_ener *bandE; 649 opus_uint32 seed; 650 }; 651 652 struct split_ctx { 653 int inv; 654 int imid; 655 int iside; 656 int delta; 657 int itheta; 658 int qalloc; 659 }; 660 661 static void compute_theta(struct band_ctx *ctx, struct split_ctx *sctx, 662 celt_norm *X, celt_norm *Y, int N, int *b, int B, int B0, 663 int LM, 664 int stereo, int *fill) 665 { 666 int qn; 667 int itheta=0; 668 int delta; 669 int imid, iside; 670 int qalloc; 671 int pulse_cap; 672 int offset; 673 opus_int32 tell; 674 int inv=0; 675 int encode; 676 const CELTMode *m; 677 int i; 678 int intensity; 679 ec_ctx *ec; 680 const celt_ener *bandE; 681 682 encode = ctx->encode; 683 m = ctx->m; 684 i = ctx->i; 685 intensity = ctx->intensity; 686 ec = ctx->ec; 687 bandE = ctx->bandE; 688 689 /* Decide on the resolution to give to the split parameter theta */ 690 pulse_cap = m->logN[i]+LM*(1<<BITRES); 691 offset = (pulse_cap>>1) - (stereo&&N==2 ? QTHETA_OFFSET_TWOPHASE : QTHETA_OFFSET); 692 qn = compute_qn(N, *b, offset, pulse_cap, stereo); 693 if (stereo && i>=intensity) 694 qn = 1; 695 if (encode) 696 { 697 /* theta is the atan() of the ratio between the (normalized) 698 side and mid. With just that parameter, we can re-scale both 699 mid and side because we know that 1) they have unit norm and 700 2) they are orthogonal. */ 701 itheta = stereo_itheta(X, Y, stereo, N); 702 } 703 tell = ec_tell_frac(ec); 704 if (qn!=1) 705 { 706 if (encode) 707 itheta = (itheta*qn+8192)>>14; 708 709 /* Entropy coding of the angle. We use a uniform pdf for the 710 time split, a step for stereo, and a triangular one for the rest. */ 711 if (stereo && N>2) 712 { 713 int p0 = 3; 714 int x = itheta; 715 int x0 = qn/2; 716 int ft = p0*(x0+1) + x0; 717 /* Use a probability of p0 up to itheta=8192 and then use 1 after */ 718 if (encode) 719 { 720 ec_encode(ec,x<=x0?p0*x:(x-1-x0)+(x0+1)*p0,x<=x0?p0*(x+1):(x-x0)+(x0+1)*p0,ft); 721 } else { 722 int fs; 723 fs=ec_decode(ec,ft); 724 if (fs<(x0+1)*p0) 725 x=fs/p0; 726 else 727 x=x0+1+(fs-(x0+1)*p0); 728 ec_dec_update(ec,x<=x0?p0*x:(x-1-x0)+(x0+1)*p0,x<=x0?p0*(x+1):(x-x0)+(x0+1)*p0,ft); 729 itheta = x; 730 } 731 } else if (B0>1 || stereo) { 732 /* Uniform pdf */ 733 if (encode) 734 ec_enc_uint(ec, itheta, qn+1); 735 else 736 itheta = ec_dec_uint(ec, qn+1); 737 } else { 738 int fs=1, ft; 739 ft = ((qn>>1)+1)*((qn>>1)+1); 740 if (encode) 741 { 742 int fl; 743 744 fs = itheta <= (qn>>1) ? itheta + 1 : qn + 1 - itheta; 745 fl = itheta <= (qn>>1) ? itheta*(itheta + 1)>>1 : 746 ft - ((qn + 1 - itheta)*(qn + 2 - itheta)>>1); 747 748 ec_encode(ec, fl, fl+fs, ft); 749 } else { 750 /* Triangular pdf */ 751 int fl=0; 752 int fm; 753 fm = ec_decode(ec, ft); 754 755 if (fm < ((qn>>1)*((qn>>1) + 1)>>1)) 756 { 757 itheta = (isqrt32(8*(opus_uint32)fm + 1) - 1)>>1; 758 fs = itheta + 1; 759 fl = itheta*(itheta + 1)>>1; 760 } 761 else 762 { 763 itheta = (2*(qn + 1) 764 - isqrt32(8*(opus_uint32)(ft - fm - 1) + 1))>>1; 765 fs = qn + 1 - itheta; 766 fl = ft - ((qn + 1 - itheta)*(qn + 2 - itheta)>>1); 767 } 768 769 ec_dec_update(ec, fl, fl+fs, ft); 770 } 771 } 772 itheta = (opus_int32)itheta*16384/qn; 773 if (encode && stereo) 774 { 775 if (itheta==0) 776 intensity_stereo(m, X, Y, bandE, i, N); 777 else 778 stereo_split(X, Y, N); 779 } 780 /* NOTE: Renormalising X and Y *may* help fixed-point a bit at very high rate. 781 Let's do that at higher complexity */ 782 } else if (stereo) { 783 if (encode) 784 { 785 inv = itheta > 8192; 786 if (inv) 787 { 788 int j; 789 for (j=0;j<N;j++) 790 Y[j] = -Y[j]; 791 } 792 intensity_stereo(m, X, Y, bandE, i, N); 793 } 794 if (*b>2<<BITRES && ctx->remaining_bits > 2<<BITRES) 795 { 796 if (encode) 797 ec_enc_bit_logp(ec, inv, 2); 798 else 799 inv = ec_dec_bit_logp(ec, 2); 800 } else 801 inv = 0; 802 itheta = 0; 803 } 804 qalloc = ec_tell_frac(ec) - tell; 805 *b -= qalloc; 806 807 if (itheta == 0) 808 { 809 imid = 32767; 810 iside = 0; 811 *fill &= (1<<B)-1; 812 delta = -16384; 813 } else if (itheta == 16384) 814 { 815 imid = 0; 816 iside = 32767; 817 *fill &= ((1<<B)-1)<<B; 818 delta = 16384; 819 } else { 820 imid = bitexact_cos((opus_int16)itheta); 821 iside = bitexact_cos((opus_int16)(16384-itheta)); 822 /* This is the mid vs side allocation that minimizes squared error 823 in that band. */ 824 delta = FRAC_MUL16((N-1)<<7,bitexact_log2tan(iside,imid)); 825 } 826 827 sctx->inv = inv; 828 sctx->imid = imid; 829 sctx->iside = iside; 830 sctx->delta = delta; 831 sctx->itheta = itheta; 832 sctx->qalloc = qalloc; 833 } 834 static unsigned quant_band_n1(struct band_ctx *ctx, celt_norm *X, celt_norm *Y, int b, 835 celt_norm *lowband_out) 836 { 837 #ifdef RESYNTH 838 int resynth = 1; 839 #else 840 int resynth = !ctx->encode; 841 #endif 842 int c; 843 int stereo; 844 celt_norm *x = X; 845 int encode; 846 ec_ctx *ec; 847 848 encode = ctx->encode; 849 ec = ctx->ec; 850 851 stereo = Y != NULL; 852 c=0; do { 853 int sign=0; 854 if (ctx->remaining_bits>=1<<BITRES) 855 { 856 if (encode) 857 { 858 sign = x[0]<0; 859 ec_enc_bits(ec, sign, 1); 860 } else { 861 sign = ec_dec_bits(ec, 1); 862 } 863 ctx->remaining_bits -= 1<<BITRES; 864 b-=1<<BITRES; 865 } 866 if (resynth) 867 x[0] = sign ? -NORM_SCALING : NORM_SCALING; 868 x = Y; 869 } while (++c<1+stereo); 870 if (lowband_out) 871 lowband_out[0] = SHR16(X[0],4); 872 return 1; 873 } 874 875 /* This function is responsible for encoding and decoding a mono partition. 876 It can split the band in two and transmit the energy difference with 877 the two half-bands. It can be called recursively so bands can end up being 878 split in 8 parts. */ 879 static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X, 880 int N, int b, int B, celt_norm *lowband, 881 int LM, 882 opus_val16 gain, int fill) 883 { 884 const unsigned char *cache; 885 int q; 886 int curr_bits; 887 int imid=0, iside=0; 888 int B0=B; 889 opus_val16 mid=0, side=0; 890 unsigned cm=0; 891 #ifdef RESYNTH 892 int resynth = 1; 893 #else 894 int resynth = !ctx->encode; 895 #endif 896 celt_norm *Y=NULL; 897 int encode; 898 const CELTMode *m; 899 int i; 900 int spread; 901 ec_ctx *ec; 902 903 encode = ctx->encode; 904 m = ctx->m; 905 i = ctx->i; 906 spread = ctx->spread; 907 ec = ctx->ec; 908 909 /* If we need 1.5 more bit than we can produce, split the band in two. */ 910 cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i]; 911 if (LM != -1 && b > cache[cache[0]]+12 && N>2) 912 { 913 int mbits, sbits, delta; 914 int itheta; 915 int qalloc; 916 struct split_ctx sctx; 917 celt_norm *next_lowband2=NULL; 918 opus_int32 rebalance; 919 920 N >>= 1; 921 Y = X+N; 922 LM -= 1; 923 if (B==1) 924 fill = (fill&1)|(fill<<1); 925 B = (B+1)>>1; 926 927 compute_theta(ctx, &sctx, X, Y, N, &b, B, B0, 928 LM, 0, &fill); 929 imid = sctx.imid; 930 iside = sctx.iside; 931 delta = sctx.delta; 932 itheta = sctx.itheta; 933 qalloc = sctx.qalloc; 934 #ifdef FIXED_POINT 935 mid = imid; 936 side = iside; 937 #else 938 mid = (1.f/32768)*imid; 939 side = (1.f/32768)*iside; 940 #endif 941 942 /* Give more bits to low-energy MDCTs than they would otherwise deserve */ 943 if (B0>1 && (itheta&0x3fff)) 944 { 945 if (itheta > 8192) 946 /* Rough approximation for pre-echo masking */ 947 delta -= delta>>(4-LM); 948 else 949 /* Corresponds to a forward-masking slope of 1.5 dB per 10 ms */ 950 delta = IMIN(0, delta + (N<<BITRES>>(5-LM))); 951 } 952 mbits = IMAX(0, IMIN(b, (b-delta)/2)); 953 sbits = b-mbits; 954 ctx->remaining_bits -= qalloc; 955 956 if (lowband) 957 next_lowband2 = lowband+N; /* >32-bit split case */ 958 959 rebalance = ctx->remaining_bits; 960 if (mbits >= sbits) 961 { 962 cm = quant_partition(ctx, X, N, mbits, B, 963 lowband, LM, 964 MULT16_16_P15(gain,mid), fill); 965 rebalance = mbits - (rebalance-ctx->remaining_bits); 966 if (rebalance > 3<<BITRES && itheta!=0) 967 sbits += rebalance - (3<<BITRES); 968 cm |= quant_partition(ctx, Y, N, sbits, B, 969 next_lowband2, LM, 970 MULT16_16_P15(gain,side), fill>>B)<<(B0>>1); 971 } else { 972 cm = quant_partition(ctx, Y, N, sbits, B, 973 next_lowband2, LM, 974 MULT16_16_P15(gain,side), fill>>B)<<(B0>>1); 975 rebalance = sbits - (rebalance-ctx->remaining_bits); 976 if (rebalance > 3<<BITRES && itheta!=16384) 977 mbits += rebalance - (3<<BITRES); 978 cm |= quant_partition(ctx, X, N, mbits, B, 979 lowband, LM, 980 MULT16_16_P15(gain,mid), fill); 981 } 982 } else { 983 /* This is the basic no-split case */ 984 q = bits2pulses(m, i, LM, b); 985 curr_bits = pulses2bits(m, i, LM, q); 986 ctx->remaining_bits -= curr_bits; 987 988 /* Ensures we can never bust the budget */ 989 while (ctx->remaining_bits < 0 && q > 0) 990 { 991 ctx->remaining_bits += curr_bits; 992 q--; 993 curr_bits = pulses2bits(m, i, LM, q); 994 ctx->remaining_bits -= curr_bits; 995 } 996 997 if (q!=0) 998 { 999 int K = get_pulses(q); 1000 1001 /* Finally do the actual quantization */ 1002 if (encode) 1003 { 1004 cm = alg_quant(X, N, K, spread, B, ec 1005 #ifdef RESYNTH 1006 , gain 1007 #endif 1008 ); 1009 } else { 1010 cm = alg_unquant(X, N, K, spread, B, ec, gain); 1011 } 1012 } else { 1013 /* If there's no pulse, fill the band anyway */ 1014 int j; 1015 if (resynth) 1016 { 1017 unsigned cm_mask; 1018 /* B can be as large as 16, so this shift might overflow an int on a 1019 16-bit platform; use a long to get defined behavior.*/ 1020 cm_mask = (unsigned)(1UL<<B)-1; 1021 fill &= cm_mask; 1022 if (!fill) 1023 { 1024 for (j=0;j<N;j++) 1025 X[j] = 0; 1026 } else { 1027 if (lowband == NULL) 1028 { 1029 /* Noise */ 1030 for (j=0;j<N;j++) 1031 { 1032 ctx->seed = celt_lcg_rand(ctx->seed); 1033 X[j] = (celt_norm)((opus_int32)ctx->seed>>20); 1034 } 1035 cm = cm_mask; 1036 } else { 1037 /* Folded spectrum */ 1038 for (j=0;j<N;j++) 1039 { 1040 opus_val16 tmp; 1041 ctx->seed = celt_lcg_rand(ctx->seed); 1042 /* About 48 dB below the "normal" folding level */ 1043 tmp = QCONST16(1.0f/256, 10); 1044 tmp = (ctx->seed)&0x8000 ? tmp : -tmp; 1045 X[j] = lowband[j]+tmp; 1046 } 1047 cm = fill; 1048 } 1049 renormalise_vector(X, N, gain); 1050 } 1051 } 1052 } 1053 } 1054 1055 return cm; 1056 } 1057 1058 1059 /* This function is responsible for encoding and decoding a band for the mono case. */ 1060 static unsigned quant_band(struct band_ctx *ctx, celt_norm *X, 1061 int N, int b, int B, celt_norm *lowband, 1062 int LM, celt_norm *lowband_out, 1063 opus_val16 gain, celt_norm *lowband_scratch, int fill) 1064 { 1065 int N0=N; 1066 int N_B=N; 1067 int N_B0; 1068 int B0=B; 1069 int time_divide=0; 1070 int recombine=0; 1071 int longBlocks; 1072 unsigned cm=0; 1073 #ifdef RESYNTH 1074 int resynth = 1; 1075 #else 1076 int resynth = !ctx->encode; 1077 #endif 1078 int k; 1079 int encode; 1080 int tf_change; 1081 1082 encode = ctx->encode; 1083 tf_change = ctx->tf_change; 1084 1085 longBlocks = B0==1; 1086 1087 N_B /= B; 1088 1089 /* Special case for one sample */ 1090 if (N==1) 1091 { 1092 return quant_band_n1(ctx, X, NULL, b, lowband_out); 1093 } 1094 1095 if (tf_change>0) 1096 recombine = tf_change; 1097 /* Band recombining to increase frequency resolution */ 1098 1099 if (lowband_scratch && lowband && (recombine || ((N_B&1) == 0 && tf_change<0) || B0>1)) 1100 { 1101 int j; 1102 for (j=0;j<N;j++) 1103 lowband_scratch[j] = lowband[j]; 1104 lowband = lowband_scratch; 1105 } 1106 1107 for (k=0;k<recombine;k++) 1108 { 1109 static const unsigned char bit_interleave_table[16]={ 1110 0,1,1,1,2,3,3,3,2,3,3,3,2,3,3,3 1111 }; 1112 if (encode) 1113 haar1(X, N>>k, 1<<k); 1114 if (lowband) 1115 haar1(lowband, N>>k, 1<<k); 1116 fill = bit_interleave_table[fill&0xF]|bit_interleave_table[fill>>4]<<2; 1117 } 1118 B>>=recombine; 1119 N_B<<=recombine; 1120 1121 /* Increasing the time resolution */ 1122 while ((N_B&1) == 0 && tf_change<0) 1123 { 1124 if (encode) 1125 haar1(X, N_B, B); 1126 if (lowband) 1127 haar1(lowband, N_B, B); 1128 fill |= fill<<B; 1129 B <<= 1; 1130 N_B >>= 1; 1131 time_divide++; 1132 tf_change++; 1133 } 1134 B0=B; 1135 N_B0 = N_B; 1136 1137 /* Reorganize the samples in time order instead of frequency order */ 1138 if (B0>1) 1139 { 1140 if (encode) 1141 deinterleave_hadamard(X, N_B>>recombine, B0<<recombine, longBlocks); 1142 if (lowband) 1143 deinterleave_hadamard(lowband, N_B>>recombine, B0<<recombine, longBlocks); 1144 } 1145 1146 cm = quant_partition(ctx, X, N, b, B, lowband, 1147 LM, gain, fill); 1148 1149 /* This code is used by the decoder and by the resynthesis-enabled encoder */ 1150 if (resynth) 1151 { 1152 /* Undo the sample reorganization going from time order to frequency order */ 1153 if (B0>1) 1154 interleave_hadamard(X, N_B>>recombine, B0<<recombine, longBlocks); 1155 1156 /* Undo time-freq changes that we did earlier */ 1157 N_B = N_B0; 1158 B = B0; 1159 for (k=0;k<time_divide;k++) 1160 { 1161 B >>= 1; 1162 N_B <<= 1; 1163 cm |= cm>>B; 1164 haar1(X, N_B, B); 1165 } 1166 1167 for (k=0;k<recombine;k++) 1168 { 1169 static const unsigned char bit_deinterleave_table[16]={ 1170 0x00,0x03,0x0C,0x0F,0x30,0x33,0x3C,0x3F, 1171 0xC0,0xC3,0xCC,0xCF,0xF0,0xF3,0xFC,0xFF 1172 }; 1173 cm = bit_deinterleave_table[cm]; 1174 haar1(X, N0>>k, 1<<k); 1175 } 1176 B<<=recombine; 1177 1178 /* Scale output for later folding */ 1179 if (lowband_out) 1180 { 1181 int j; 1182 opus_val16 n; 1183 n = celt_sqrt(SHL32(EXTEND32(N0),22)); 1184 for (j=0;j<N0;j++) 1185 lowband_out[j] = MULT16_16_Q15(n,X[j]); 1186 } 1187 cm &= (1<<B)-1; 1188 } 1189 return cm; 1190 } 1191 1192 1193 /* This function is responsible for encoding and decoding a band for the stereo case. */ 1194 static unsigned quant_band_stereo(struct band_ctx *ctx, celt_norm *X, celt_norm *Y, 1195 int N, int b, int B, celt_norm *lowband, 1196 int LM, celt_norm *lowband_out, 1197 celt_norm *lowband_scratch, int fill) 1198 { 1199 int imid=0, iside=0; 1200 int inv = 0; 1201 opus_val16 mid=0, side=0; 1202 unsigned cm=0; 1203 #ifdef RESYNTH 1204 int resynth = 1; 1205 #else 1206 int resynth = !ctx->encode; 1207 #endif 1208 int mbits, sbits, delta; 1209 int itheta; 1210 int qalloc; 1211 struct split_ctx sctx; 1212 int orig_fill; 1213 int encode; 1214 ec_ctx *ec; 1215 1216 encode = ctx->encode; 1217 ec = ctx->ec; 1218 1219 /* Special case for one sample */ 1220 if (N==1) 1221 { 1222 return quant_band_n1(ctx, X, Y, b, lowband_out); 1223 } 1224 1225 orig_fill = fill; 1226 1227 compute_theta(ctx, &sctx, X, Y, N, &b, B, B, 1228 LM, 1, &fill); 1229 inv = sctx.inv; 1230 imid = sctx.imid; 1231 iside = sctx.iside; 1232 delta = sctx.delta; 1233 itheta = sctx.itheta; 1234 qalloc = sctx.qalloc; 1235 #ifdef FIXED_POINT 1236 mid = imid; 1237 side = iside; 1238 #else 1239 mid = (1.f/32768)*imid; 1240 side = (1.f/32768)*iside; 1241 #endif 1242 1243 /* This is a special case for N=2 that only works for stereo and takes 1244 advantage of the fact that mid and side are orthogonal to encode 1245 the side with just one bit. */ 1246 if (N==2) 1247 { 1248 int c; 1249 int sign=0; 1250 celt_norm *x2, *y2; 1251 mbits = b; 1252 sbits = 0; 1253 /* Only need one bit for the side. */ 1254 if (itheta != 0 && itheta != 16384) 1255 sbits = 1<<BITRES; 1256 mbits -= sbits; 1257 c = itheta > 8192; 1258 ctx->remaining_bits -= qalloc+sbits; 1259 1260 x2 = c ? Y : X; 1261 y2 = c ? X : Y; 1262 if (sbits) 1263 { 1264 if (encode) 1265 { 1266 /* Here we only need to encode a sign for the side. */ 1267 sign = x2[0]*y2[1] - x2[1]*y2[0] < 0; 1268 ec_enc_bits(ec, sign, 1); 1269 } else { 1270 sign = ec_dec_bits(ec, 1); 1271 } 1272 } 1273 sign = 1-2*sign; 1274 /* We use orig_fill here because we want to fold the side, but if 1275 itheta==16384, we'll have cleared the low bits of fill. */ 1276 cm = quant_band(ctx, x2, N, mbits, B, lowband, 1277 LM, lowband_out, Q15ONE, lowband_scratch, orig_fill); 1278 /* We don't split N=2 bands, so cm is either 1 or 0 (for a fold-collapse), 1279 and there's no need to worry about mixing with the other channel. */ 1280 y2[0] = -sign*x2[1]; 1281 y2[1] = sign*x2[0]; 1282 if (resynth) 1283 { 1284 celt_norm tmp; 1285 X[0] = MULT16_16_Q15(mid, X[0]); 1286 X[1] = MULT16_16_Q15(mid, X[1]); 1287 Y[0] = MULT16_16_Q15(side, Y[0]); 1288 Y[1] = MULT16_16_Q15(side, Y[1]); 1289 tmp = X[0]; 1290 X[0] = SUB16(tmp,Y[0]); 1291 Y[0] = ADD16(tmp,Y[0]); 1292 tmp = X[1]; 1293 X[1] = SUB16(tmp,Y[1]); 1294 Y[1] = ADD16(tmp,Y[1]); 1295 } 1296 } else { 1297 /* "Normal" split code */ 1298 opus_int32 rebalance; 1299 1300 mbits = IMAX(0, IMIN(b, (b-delta)/2)); 1301 sbits = b-mbits; 1302 ctx->remaining_bits -= qalloc; 1303 1304 rebalance = ctx->remaining_bits; 1305 if (mbits >= sbits) 1306 { 1307 /* In stereo mode, we do not apply a scaling to the mid because we need the normalized 1308 mid for folding later. */ 1309 cm = quant_band(ctx, X, N, mbits, B, 1310 lowband, LM, lowband_out, 1311 Q15ONE, lowband_scratch, fill); 1312 rebalance = mbits - (rebalance-ctx->remaining_bits); 1313 if (rebalance > 3<<BITRES && itheta!=0) 1314 sbits += rebalance - (3<<BITRES); 1315 1316 /* For a stereo split, the high bits of fill are always zero, so no 1317 folding will be done to the side. */ 1318 cm |= quant_band(ctx, Y, N, sbits, B, 1319 NULL, LM, NULL, 1320 side, NULL, fill>>B); 1321 } else { 1322 /* For a stereo split, the high bits of fill are always zero, so no 1323 folding will be done to the side. */ 1324 cm = quant_band(ctx, Y, N, sbits, B, 1325 NULL, LM, NULL, 1326 side, NULL, fill>>B); 1327 rebalance = sbits - (rebalance-ctx->remaining_bits); 1328 if (rebalance > 3<<BITRES && itheta!=16384) 1329 mbits += rebalance - (3<<BITRES); 1330 /* In stereo mode, we do not apply a scaling to the mid because we need the normalized 1331 mid for folding later. */ 1332 cm |= quant_band(ctx, X, N, mbits, B, 1333 lowband, LM, lowband_out, 1334 Q15ONE, lowband_scratch, fill); 1335 } 1336 } 1337 1338 1339 /* This code is used by the decoder and by the resynthesis-enabled encoder */ 1340 if (resynth) 1341 { 1342 if (N!=2) 1343 stereo_merge(X, Y, mid, N); 1344 if (inv) 1345 { 1346 int j; 1347 for (j=0;j<N;j++) 1348 Y[j] = -Y[j]; 1349 } 1350 } 1351 return cm; 1352 } 1353 1354 1355 void quant_all_bands(int encode, const CELTMode *m, int start, int end, 1356 celt_norm *X_, celt_norm *Y_, unsigned char *collapse_masks, const celt_ener *bandE, int *pulses, 1357 int shortBlocks, int spread, int dual_stereo, int intensity, int *tf_res, 1358 opus_int32 total_bits, opus_int32 balance, ec_ctx *ec, int LM, int codedBands, opus_uint32 *seed) 1359 { 1360 int i; 1361 opus_int32 remaining_bits; 1362 const opus_int16 * OPUS_RESTRICT eBands = m->eBands; 1363 celt_norm * OPUS_RESTRICT norm, * OPUS_RESTRICT norm2; 1364 VARDECL(celt_norm, _norm); 1365 celt_norm *lowband_scratch; 1366 int B; 1367 int M; 1368 int lowband_offset; 1369 int update_lowband = 1; 1370 int C = Y_ != NULL ? 2 : 1; 1371 int norm_offset; 1372 #ifdef RESYNTH 1373 int resynth = 1; 1374 #else 1375 int resynth = !encode; 1376 #endif 1377 struct band_ctx ctx; 1378 SAVE_STACK; 1379 1380 M = 1<<LM; 1381 B = shortBlocks ? M : 1; 1382 norm_offset = M*eBands[start]; 1383 /* No need to allocate norm for the last band because we don't need an 1384 output in that band. */ 1385 ALLOC(_norm, C*(M*eBands[m->nbEBands-1]-norm_offset), celt_norm); 1386 norm = _norm; 1387 norm2 = norm + M*eBands[m->nbEBands-1]-norm_offset; 1388 /* We can use the last band as scratch space because we don't need that 1389 scratch space for the last band. */ 1390 lowband_scratch = X_+M*eBands[m->nbEBands-1]; 1391 1392 lowband_offset = 0; 1393 ctx.bandE = bandE; 1394 ctx.ec = ec; 1395 ctx.encode = encode; 1396 ctx.intensity = intensity; 1397 ctx.m = m; 1398 ctx.seed = *seed; 1399 ctx.spread = spread; 1400 for (i=start;i<end;i++) 1401 { 1402 opus_int32 tell; 1403 int b; 1404 int N; 1405 opus_int32 curr_balance; 1406 int effective_lowband=-1; 1407 celt_norm * OPUS_RESTRICT X, * OPUS_RESTRICT Y; 1408 int tf_change=0; 1409 unsigned x_cm; 1410 unsigned y_cm; 1411 int last; 1412 1413 ctx.i = i; 1414 last = (i==end-1); 1415 1416 X = X_+M*eBands[i]; 1417 if (Y_!=NULL) 1418 Y = Y_+M*eBands[i]; 1419 else 1420 Y = NULL; 1421 N = M*eBands[i+1]-M*eBands[i]; 1422 tell = ec_tell_frac(ec); 1423 1424 /* Compute how many bits we want to allocate to this band */ 1425 if (i != start) 1426 balance -= tell; 1427 remaining_bits = total_bits-tell-1; 1428 ctx.remaining_bits = remaining_bits; 1429 if (i <= codedBands-1) 1430 { 1431 curr_balance = balance / IMIN(3, codedBands-i); 1432 b = IMAX(0, IMIN(16383, IMIN(remaining_bits+1,pulses[i]+curr_balance))); 1433 } else { 1434 b = 0; 1435 } 1436 1437 if (resynth && M*eBands[i]-N >= M*eBands[start] && (update_lowband || lowband_offset==0)) 1438 lowband_offset = i; 1439 1440 tf_change = tf_res[i]; 1441 ctx.tf_change = tf_change; 1442 if (i>=m->effEBands) 1443 { 1444 X=norm; 1445 if (Y_!=NULL) 1446 Y = norm; 1447 lowband_scratch = NULL; 1448 } 1449 if (i==end-1) 1450 lowband_scratch = NULL; 1451 1452 /* Get a conservative estimate of the collapse_mask's for the bands we're 1453 going to be folding from. */ 1454 if (lowband_offset != 0 && (spread!=SPREAD_AGGRESSIVE || B>1 || tf_change<0)) 1455 { 1456 int fold_start; 1457 int fold_end; 1458 int fold_i; 1459 /* This ensures we never repeat spectral content within one band */ 1460 effective_lowband = IMAX(0, M*eBands[lowband_offset]-norm_offset-N); 1461 fold_start = lowband_offset; 1462 while(M*eBands[--fold_start] > effective_lowband+norm_offset); 1463 fold_end = lowband_offset-1; 1464 while(M*eBands[++fold_end] < effective_lowband+norm_offset+N); 1465 x_cm = y_cm = 0; 1466 fold_i = fold_start; do { 1467 x_cm |= collapse_masks[fold_i*C+0]; 1468 y_cm |= collapse_masks[fold_i*C+C-1]; 1469 } while (++fold_i<fold_end); 1470 } 1471 /* Otherwise, we'll be using the LCG to fold, so all blocks will (almost 1472 always) be non-zero. */ 1473 else 1474 x_cm = y_cm = (1<<B)-1; 1475 1476 if (dual_stereo && i==intensity) 1477 { 1478 int j; 1479 1480 /* Switch off dual stereo to do intensity. */ 1481 dual_stereo = 0; 1482 if (resynth) 1483 for (j=0;j<M*eBands[i]-norm_offset;j++) 1484 norm[j] = HALF32(norm[j]+norm2[j]); 1485 } 1486 if (dual_stereo) 1487 { 1488 x_cm = quant_band(&ctx, X, N, b/2, B, 1489 effective_lowband != -1 ? norm+effective_lowband : NULL, LM, 1490 last?NULL:norm+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, x_cm); 1491 y_cm = quant_band(&ctx, Y, N, b/2, B, 1492 effective_lowband != -1 ? norm2+effective_lowband : NULL, LM, 1493 last?NULL:norm2+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, y_cm); 1494 } else { 1495 if (Y!=NULL) 1496 { 1497 x_cm = quant_band_stereo(&ctx, X, Y, N, b, B, 1498 effective_lowband != -1 ? norm+effective_lowband : NULL, LM, 1499 last?NULL:norm+M*eBands[i]-norm_offset, lowband_scratch, x_cm|y_cm); 1500 } else { 1501 x_cm = quant_band(&ctx, X, N, b, B, 1502 effective_lowband != -1 ? norm+effective_lowband : NULL, LM, 1503 last?NULL:norm+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, x_cm|y_cm); 1504 } 1505 y_cm = x_cm; 1506 } 1507 collapse_masks[i*C+0] = (unsigned char)x_cm; 1508 collapse_masks[i*C+C-1] = (unsigned char)y_cm; 1509 balance += pulses[i] + tell; 1510 1511 /* Update the folding position only as long as we have 1 bit/sample depth. */ 1512 update_lowband = b>(N<<BITRES); 1513 } 1514 *seed = ctx.seed; 1515 1516 RESTORE_STACK; 1517 } 1518 1519