annotate src/opus-1.3/celt/rate.h @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 4664ac0c1032
children
rev   line source
cannam@154 1 /* Copyright (c) 2007-2008 CSIRO
cannam@154 2 Copyright (c) 2007-2009 Xiph.Org Foundation
cannam@154 3 Written by Jean-Marc Valin */
cannam@154 4 /*
cannam@154 5 Redistribution and use in source and binary forms, with or without
cannam@154 6 modification, are permitted provided that the following conditions
cannam@154 7 are met:
cannam@154 8
cannam@154 9 - Redistributions of source code must retain the above copyright
cannam@154 10 notice, this list of conditions and the following disclaimer.
cannam@154 11
cannam@154 12 - Redistributions in binary form must reproduce the above copyright
cannam@154 13 notice, this list of conditions and the following disclaimer in the
cannam@154 14 documentation and/or other materials provided with the distribution.
cannam@154 15
cannam@154 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
cannam@154 17 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
cannam@154 18 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
cannam@154 19 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
cannam@154 20 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
cannam@154 21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
cannam@154 22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
cannam@154 23 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
cannam@154 24 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@154 25 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@154 26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@154 27 */
cannam@154 28
cannam@154 29 #ifndef RATE_H
cannam@154 30 #define RATE_H
cannam@154 31
cannam@154 32 #define MAX_PSEUDO 40
cannam@154 33 #define LOG_MAX_PSEUDO 6
cannam@154 34
cannam@154 35 #define CELT_MAX_PULSES 128
cannam@154 36
cannam@154 37 #define MAX_FINE_BITS 8
cannam@154 38
cannam@154 39 #define FINE_OFFSET 21
cannam@154 40 #define QTHETA_OFFSET 4
cannam@154 41 #define QTHETA_OFFSET_TWOPHASE 16
cannam@154 42
cannam@154 43 #include "cwrs.h"
cannam@154 44 #include "modes.h"
cannam@154 45
cannam@154 46 void compute_pulse_cache(CELTMode *m, int LM);
cannam@154 47
cannam@154 48 static OPUS_INLINE int get_pulses(int i)
cannam@154 49 {
cannam@154 50 return i<8 ? i : (8 + (i&7)) << ((i>>3)-1);
cannam@154 51 }
cannam@154 52
cannam@154 53 static OPUS_INLINE int bits2pulses(const CELTMode *m, int band, int LM, int bits)
cannam@154 54 {
cannam@154 55 int i;
cannam@154 56 int lo, hi;
cannam@154 57 const unsigned char *cache;
cannam@154 58
cannam@154 59 LM++;
cannam@154 60 cache = m->cache.bits + m->cache.index[LM*m->nbEBands+band];
cannam@154 61
cannam@154 62 lo = 0;
cannam@154 63 hi = cache[0];
cannam@154 64 bits--;
cannam@154 65 for (i=0;i<LOG_MAX_PSEUDO;i++)
cannam@154 66 {
cannam@154 67 int mid = (lo+hi+1)>>1;
cannam@154 68 /* OPT: Make sure this is implemented with a conditional move */
cannam@154 69 if ((int)cache[mid] >= bits)
cannam@154 70 hi = mid;
cannam@154 71 else
cannam@154 72 lo = mid;
cannam@154 73 }
cannam@154 74 if (bits- (lo == 0 ? -1 : (int)cache[lo]) <= (int)cache[hi]-bits)
cannam@154 75 return lo;
cannam@154 76 else
cannam@154 77 return hi;
cannam@154 78 }
cannam@154 79
cannam@154 80 static OPUS_INLINE int pulses2bits(const CELTMode *m, int band, int LM, int pulses)
cannam@154 81 {
cannam@154 82 const unsigned char *cache;
cannam@154 83
cannam@154 84 LM++;
cannam@154 85 cache = m->cache.bits + m->cache.index[LM*m->nbEBands+band];
cannam@154 86 return pulses == 0 ? 0 : cache[pulses]+1;
cannam@154 87 }
cannam@154 88
cannam@154 89 /** Compute the pulse allocation, i.e. how many pulses will go in each
cannam@154 90 * band.
cannam@154 91 @param m mode
cannam@154 92 @param offsets Requested increase or decrease in the number of bits for
cannam@154 93 each band
cannam@154 94 @param total Number of bands
cannam@154 95 @param pulses Number of pulses per band (returned)
cannam@154 96 @return Total number of bits allocated
cannam@154 97 */
cannam@154 98 int clt_compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stero,
cannam@154 99 opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth);
cannam@154 100
cannam@154 101 #endif