Mercurial > hg > sv-dependency-builds
comparison src/opus-1.3/silk/control_SNR.c @ 154:4664ac0c1032
Add Opus sources and macOS builds
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Wed, 23 Jan 2019 13:48:08 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
153:84bc3a5ec321 | 154:4664ac0c1032 |
---|---|
1 /*********************************************************************** | |
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | |
3 Redistribution and use in source and binary forms, with or without | |
4 modification, are permitted provided that the following conditions | |
5 are met: | |
6 - Redistributions of source code must retain the above copyright notice, | |
7 this list of conditions and the following disclaimer. | |
8 - Redistributions in binary form must reproduce the above copyright | |
9 notice, this list of conditions and the following disclaimer in the | |
10 documentation and/or other materials provided with the distribution. | |
11 - Neither the name of Internet Society, IETF or IETF Trust, nor the | |
12 names of specific contributors, may be used to endorse or promote | |
13 products derived from this software without specific prior written | |
14 permission. | |
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 POSSIBILITY OF SUCH DAMAGE. | |
26 ***********************************************************************/ | |
27 | |
28 #ifdef HAVE_CONFIG_H | |
29 #include "config.h" | |
30 #endif | |
31 | |
32 #include "main.h" | |
33 #include "tuning_parameters.h" | |
34 | |
35 /* These tables hold SNR values divided by 21 (so they fit in 8 bits) | |
36 for different target bitrates spaced at 400 bps interval. The first | |
37 10 values are omitted (0-4 kb/s) because they're all zeros. | |
38 These tables were obtained by running different SNRs through the | |
39 encoder and measuring the active bitrate. */ | |
40 static const unsigned char silk_TargetRate_NB_21[117 - 10] = { | |
41 0, 15, 39, 52, 61, 68, | |
42 74, 79, 84, 88, 92, 95, 99,102,105,108,111,114,117,119,122,124, | |
43 126,129,131,133,135,137,139,142,143,145,147,149,151,153,155,157, | |
44 158,160,162,163,165,167,168,170,171,173,174,176,177,179,180,182, | |
45 183,185,186,187,189,190,192,193,194,196,197,199,200,201,203,204, | |
46 205,207,208,209,211,212,213,215,216,217,219,220,221,223,224,225, | |
47 227,228,230,231,232,234,235,236,238,239,241,242,243,245,246,248, | |
48 249,250,252,253,255 | |
49 }; | |
50 | |
51 static const unsigned char silk_TargetRate_MB_21[165 - 10] = { | |
52 0, 0, 28, 43, 52, 59, | |
53 65, 70, 74, 78, 81, 85, 87, 90, 93, 95, 98,100,102,105,107,109, | |
54 111,113,115,116,118,120,122,123,125,127,128,130,131,133,134,136, | |
55 137,138,140,141,143,144,145,147,148,149,151,152,153,154,156,157, | |
56 158,159,160,162,163,164,165,166,167,168,169,171,172,173,174,175, | |
57 176,177,178,179,180,181,182,183,184,185,186,187,188,188,189,190, | |
58 191,192,193,194,195,196,197,198,199,200,201,202,203,203,204,205, | |
59 206,207,208,209,210,211,212,213,214,214,215,216,217,218,219,220, | |
60 221,222,223,224,224,225,226,227,228,229,230,231,232,233,234,235, | |
61 236,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250, | |
62 251,252,253,254,255 | |
63 }; | |
64 | |
65 static const unsigned char silk_TargetRate_WB_21[201 - 10] = { | |
66 0, 0, 0, 8, 29, 41, | |
67 49, 56, 62, 66, 70, 74, 77, 80, 83, 86, 88, 91, 93, 95, 97, 99, | |
68 101,103,105,107,108,110,112,113,115,116,118,119,121,122,123,125, | |
69 126,127,129,130,131,132,134,135,136,137,138,140,141,142,143,144, | |
70 145,146,147,148,149,150,151,152,153,154,156,157,158,159,159,160, | |
71 161,162,163,164,165,166,167,168,169,170,171,171,172,173,174,175, | |
72 176,177,177,178,179,180,181,181,182,183,184,185,185,186,187,188, | |
73 189,189,190,191,192,192,193,194,195,195,196,197,198,198,199,200, | |
74 200,201,202,203,203,204,205,206,206,207,208,209,209,210,211,211, | |
75 212,213,214,214,215,216,216,217,218,219,219,220,221,221,222,223, | |
76 224,224,225,226,226,227,228,229,229,230,231,232,232,233,234,234, | |
77 235,236,237,237,238,239,240,240,241,242,243,243,244,245,246,246, | |
78 247,248,249,249,250,251,252,253,255 | |
79 }; | |
80 | |
81 /* Control SNR of redidual quantizer */ | |
82 opus_int silk_control_SNR( | |
83 silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */ | |
84 opus_int32 TargetRate_bps /* I Target max bitrate (bps) */ | |
85 ) | |
86 { | |
87 int id; | |
88 int bound; | |
89 const unsigned char *snr_table; | |
90 | |
91 psEncC->TargetRate_bps = TargetRate_bps; | |
92 if( psEncC->nb_subfr == 2 ) { | |
93 TargetRate_bps -= 2000 + psEncC->fs_kHz/16; | |
94 } | |
95 if( psEncC->fs_kHz == 8 ) { | |
96 bound = sizeof(silk_TargetRate_NB_21); | |
97 snr_table = silk_TargetRate_NB_21; | |
98 } else if( psEncC->fs_kHz == 12 ) { | |
99 bound = sizeof(silk_TargetRate_MB_21); | |
100 snr_table = silk_TargetRate_MB_21; | |
101 } else { | |
102 bound = sizeof(silk_TargetRate_WB_21); | |
103 snr_table = silk_TargetRate_WB_21; | |
104 } | |
105 id = (TargetRate_bps+200)/400; | |
106 id = silk_min(id - 10, bound-1); | |
107 if( id <= 0 ) { | |
108 psEncC->SNR_dB_Q7 = 0; | |
109 } else { | |
110 psEncC->SNR_dB_Q7 = snr_table[id]*21; | |
111 } | |
112 return SILK_NO_ERROR; | |
113 } |