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