Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: celt/rate.c

Issue 12388030: Update Opus to 1.0.2. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/opus
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « celt/quant_bands.c ('k') | celt/tests/test_unit_cwrs32.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright (c) 2007-2008 CSIRO 1 /* Copyright (c) 2007-2008 CSIRO
2 Copyright (c) 2007-2009 Xiph.Org Foundation 2 Copyright (c) 2007-2009 Xiph.Org Foundation
3 Written by Jean-Marc Valin */ 3 Written by Jean-Marc Valin */
4 /* 4 /*
5 Redistribution and use in source and binary forms, with or without 5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions 6 modification, are permitted provided that the following conditions
7 are met: 7 are met:
8 8
9 - Redistributions of source code must retain the above copyright 9 - Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer. 10 notice, this list of conditions and the following disclaimer.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 int j; 77 int j;
78 int curr=0; 78 int curr=0;
79 int nbEntries=0; 79 int nbEntries=0;
80 int entryN[100], entryK[100], entryI[100]; 80 int entryN[100], entryK[100], entryI[100];
81 const opus_int16 *eBands = m->eBands; 81 const opus_int16 *eBands = m->eBands;
82 PulseCache *cache = &m->cache; 82 PulseCache *cache = &m->cache;
83 opus_int16 *cindex; 83 opus_int16 *cindex;
84 unsigned char *bits; 84 unsigned char *bits;
85 unsigned char *cap; 85 unsigned char *cap;
86 86
87 cindex = opus_alloc(sizeof(cache->index[0])*m->nbEBands*(LM+2)); 87 cindex = (opus_int16 *)opus_alloc(sizeof(cache->index[0])*m->nbEBands*(LM+2)) ;
88 cache->index = cindex; 88 cache->index = cindex;
89 89
90 /* Scan for all unique band sizes */ 90 /* Scan for all unique band sizes */
91 for (i=0;i<=LM+1;i++) 91 for (i=0;i<=LM+1;i++)
92 { 92 {
93 for (j=0;j<m->nbEBands;j++) 93 for (j=0;j<m->nbEBands;j++)
94 { 94 {
95 int k; 95 int k;
96 int N = (eBands[j+1]-eBands[j])<<i>>1; 96 int N = (eBands[j+1]-eBands[j])<<i>>1;
97 cindex[i*m->nbEBands+j] = -1; 97 cindex[i*m->nbEBands+j] = -1;
(...skipping 19 matching lines...) Expand all
117 K++; 117 K++;
118 entryK[nbEntries] = K; 118 entryK[nbEntries] = K;
119 cindex[i*m->nbEBands+j] = curr; 119 cindex[i*m->nbEBands+j] = curr;
120 entryI[nbEntries] = curr; 120 entryI[nbEntries] = curr;
121 121
122 curr += K+1; 122 curr += K+1;
123 nbEntries++; 123 nbEntries++;
124 } 124 }
125 } 125 }
126 } 126 }
127 bits = opus_alloc(sizeof(unsigned char)*curr); 127 bits = (unsigned char *)opus_alloc(sizeof(unsigned char)*curr);
128 cache->bits = bits; 128 cache->bits = bits;
129 cache->size = curr; 129 cache->size = curr;
130 /* Compute the cache for all unique sizes */ 130 /* Compute the cache for all unique sizes */
131 for (i=0;i<nbEntries;i++) 131 for (i=0;i<nbEntries;i++)
132 { 132 {
133 unsigned char *ptr = bits+entryI[i]; 133 unsigned char *ptr = bits+entryI[i];
134 opus_int16 tmp[MAX_PULSES+1]; 134 opus_int16 tmp[MAX_PULSES+1];
135 get_required_bits(tmp, entryN[i], get_pulses(entryK[i]), BITRES); 135 get_required_bits(tmp, entryN[i], get_pulses(entryK[i]), BITRES);
136 for (j=1;j<=entryK[i];j++) 136 for (j=1;j<=entryK[i];j++)
137 ptr[j] = tmp[get_pulses(j)]-1; 137 ptr[j] = tmp[get_pulses(j)]-1;
138 ptr[0] = entryK[i]; 138 ptr[0] = entryK[i];
139 } 139 }
140 140
141 /* Compute the maximum rate for each band at which we'll reliably use as 141 /* Compute the maximum rate for each band at which we'll reliably use as
142 many bits as we ask for. */ 142 many bits as we ask for. */
143 cache->caps = cap = opus_alloc(sizeof(cache->caps[0])*(LM+1)*2*m->nbEBands); 143 cache->caps = cap = (unsigned char *)opus_alloc(sizeof(cache->caps[0])*(LM+1) *2*m->nbEBands);
144 for (i=0;i<=LM;i++) 144 for (i=0;i<=LM;i++)
145 { 145 {
146 for (C=1;C<=2;C++) 146 for (C=1;C<=2;C++)
147 { 147 {
148 for (j=0;j<m->nbEBands;j++) 148 for (j=0;j<m->nbEBands;j++)
149 { 149 {
150 int N0; 150 int N0;
151 int max_bits; 151 int max_bits;
152 N0 = m->eBands[j+1]-m->eBands[j]; 152 N0 = m->eBands[j+1]-m->eBands[j];
153 /* N=1 bands only have a sign bit and fine bits. */ 153 /* N=1 bands only have a sign bit and fine bits. */
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 { 252 {
253 opus_int32 psum; 253 opus_int32 psum;
254 int lo, hi; 254 int lo, hi;
255 int i, j; 255 int i, j;
256 int logM; 256 int logM;
257 int stereo; 257 int stereo;
258 int codedBands=-1; 258 int codedBands=-1;
259 int alloc_floor; 259 int alloc_floor;
260 opus_int32 left, percoeff; 260 opus_int32 left, percoeff;
261 int done; 261 int done;
262 int balance; 262 opus_int32 balance;
263 SAVE_STACK; 263 SAVE_STACK;
264 264
265 alloc_floor = C<<BITRES; 265 alloc_floor = C<<BITRES;
266 stereo = C>1; 266 stereo = C>1;
267 267
268 logM = LM<<BITRES; 268 logM = LM<<BITRES;
269 lo = 0; 269 lo = 0;
270 hi = 1<<ALLOC_STEPS; 270 hi = 1<<ALLOC_STEPS;
271 for (i=0;i<ALLOC_STEPS;i++) 271 for (i=0;i<ALLOC_STEPS;i++)
272 { 272 {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 if (encode) 346 if (encode)
347 { 347 {
348 /*This if() block is the only part of the allocation function that 348 /*This if() block is the only part of the allocation function that
349 is not a mandatory part of the bitstream: any bands we choose to 349 is not a mandatory part of the bitstream: any bands we choose to
350 skip here must be explicitly signaled.*/ 350 skip here must be explicitly signaled.*/
351 /*Choose a threshold with some hysteresis to keep bands from 351 /*Choose a threshold with some hysteresis to keep bands from
352 fluctuating in and out.*/ 352 fluctuating in and out.*/
353 #ifdef FUZZING 353 #ifdef FUZZING
354 if ((rand()&0x1) == 0) 354 if ((rand()&0x1) == 0)
355 #else 355 #else
356 if (band_bits > ((j<prev?7:9)*band_width<<LM<<BITRES)>>4) 356 if (codedBands<=start+2 || band_bits > ((j<prev?7:9)*band_width<<LM< <BITRES)>>4)
357 #endif 357 #endif
358 { 358 {
359 ec_enc_bit_logp(ec, 1, 1); 359 ec_enc_bit_logp(ec, 1, 1);
360 break; 360 break;
361 } 361 }
362 ec_enc_bit_logp(ec, 0, 1); 362 ec_enc_bit_logp(ec, 0, 1);
363 } else if (ec_dec_bit_logp(ec, 1)) { 363 } else if (ec_dec_bit_logp(ec, 1)) {
364 break; 364 break;
365 } 365 }
366 /*We used a bit to skip this band.*/ 366 /*We used a bit to skip this band.*/
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 left -= tmp; 425 left -= tmp;
426 } 426 }
427 /*for (j=0;j<end;j++)printf("%d ", bits[j]);printf("\n");*/ 427 /*for (j=0;j<end;j++)printf("%d ", bits[j]);printf("\n");*/
428 428
429 balance = 0; 429 balance = 0;
430 for (j=start;j<codedBands;j++) 430 for (j=start;j<codedBands;j++)
431 { 431 {
432 int N0, N, den; 432 int N0, N, den;
433 int offset; 433 int offset;
434 int NClogN; 434 int NClogN;
435 int excess; 435 opus_int32 excess, bit;
436 436
437 celt_assert(bits[j] >= 0); 437 celt_assert(bits[j] >= 0);
438 N0 = m->eBands[j+1]-m->eBands[j]; 438 N0 = m->eBands[j+1]-m->eBands[j];
439 N=N0<<LM; 439 N=N0<<LM;
440 bits[j] += balance; 440 bit = (opus_int32)bits[j]+balance;
441 441
442 if (N>1) 442 if (N>1)
443 { 443 {
444 excess = IMAX(bits[j]-cap[j],0); 444 excess = MAX32(bit-cap[j],0);
445 bits[j] -= excess; 445 bits[j] = bit-excess;
446 446
447 /* Compensate for the extra DoF in stereo */ 447 /* Compensate for the extra DoF in stereo */
448 den=(C*N+ ((C==2 && N>2 && !*dual_stereo && j<*intensity) ? 1 : 0)); 448 den=(C*N+ ((C==2 && N>2 && !*dual_stereo && j<*intensity) ? 1 : 0));
449 449
450 NClogN = den*(m->logN[j] + logM); 450 NClogN = den*(m->logN[j] + logM);
451 451
452 /* Offset for the number of fine bits by log2(N)/2 + FINE_OFFSET 452 /* Offset for the number of fine bits by log2(N)/2 + FINE_OFFSET
453 compared to their "fair share" of total/N */ 453 compared to their "fair share" of total/N */
454 offset = (NClogN>>1)-den*FINE_OFFSET; 454 offset = (NClogN>>1)-den*FINE_OFFSET;
455 455
(...skipping 20 matching lines...) Expand all
476 476
477 /* If we rounded down or capped this band, make it a candidate for the 477 /* If we rounded down or capped this band, make it a candidate for the
478 final fine energy pass */ 478 final fine energy pass */
479 fine_priority[j] = ebits[j]*(den<<BITRES) >= bits[j]+offset; 479 fine_priority[j] = ebits[j]*(den<<BITRES) >= bits[j]+offset;
480 480
481 /* Remove the allocated fine bits; the rest are assigned to PVQ */ 481 /* Remove the allocated fine bits; the rest are assigned to PVQ */
482 bits[j] -= C*ebits[j]<<BITRES; 482 bits[j] -= C*ebits[j]<<BITRES;
483 483
484 } else { 484 } else {
485 /* For N=1, all bits go to fine energy except for a single sign bit */ 485 /* For N=1, all bits go to fine energy except for a single sign bit */
486 excess = IMAX(0,bits[j]-(C<<BITRES)); 486 excess = MAX32(0,bit-(C<<BITRES));
487 bits[j] -= excess; 487 bits[j] = bit-excess;
488 ebits[j] = 0; 488 ebits[j] = 0;
489 fine_priority[j] = 1; 489 fine_priority[j] = 1;
490 } 490 }
491 491
492 /* Fine energy can't take advantage of the re-balancing in 492 /* Fine energy can't take advantage of the re-balancing in
493 quant_all_bands(). 493 quant_all_bands().
494 Instead, do the re-balancing here.*/ 494 Instead, do the re-balancing here.*/
495 if(excess > 0) 495 if(excess > 0)
496 { 496 {
497 int extra_fine; 497 int extra_fine;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 bits1[j] = bits1j; 629 bits1[j] = bits1j;
630 bits2[j] = bits2j; 630 bits2[j] = bits2j;
631 } 631 }
632 codedBands = interp_bits2pulses(m, start, end, skip_start, bits1, bits2, thre sh, cap, 632 codedBands = interp_bits2pulses(m, start, end, skip_start, bits1, bits2, thre sh, cap,
633 total, balance, skip_rsv, intensity, intensity_rsv, dual_stereo, dual_s tereo_rsv, 633 total, balance, skip_rsv, intensity, intensity_rsv, dual_stereo, dual_s tereo_rsv,
634 pulses, ebits, fine_priority, C, LM, ec, encode, prev); 634 pulses, ebits, fine_priority, C, LM, ec, encode, prev);
635 RESTORE_STACK; 635 RESTORE_STACK;
636 return codedBands; 636 return codedBands;
637 } 637 }
638 638
OLDNEW
« no previous file with comments | « celt/quant_bands.c ('k') | celt/tests/test_unit_cwrs32.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698