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

Side by Side Diff: silk/quant_LTP_gains.c

Issue 882843002: Update to opus-HEAD-66611f1. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/opus.git@master
Patch Set: Add the contents of Makefile.mips back. Created 5 years, 10 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
« no previous file with comments | « silk/mips/sigproc_fix_mipsr1.h ('k') | silk/resampler_rom.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 /*********************************************************************** 1 /***********************************************************************
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3 Redistribution and use in source and binary forms, with or without 3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions 4 modification, are permitted provided that the following conditions
5 are met: 5 are met:
6 - Redistributions of source code must retain the above copyright notice, 6 - Redistributions of source code must retain the above copyright notice,
7 this list of conditions and the following disclaimer. 7 this list of conditions and the following disclaimer.
8 - Redistributions in binary form must reproduce the above copyright 8 - Redistributions in binary form must reproduce the above copyright
9 notice, this list of conditions and the following disclaimer in the 9 notice, this list of conditions and the following disclaimer in the
10 documentation and/or other materials provided with the distribution. 10 documentation and/or other materials provided with the distribution.
(...skipping 18 matching lines...) Expand all
29 #include "config.h" 29 #include "config.h"
30 #endif 30 #endif
31 31
32 #include "main.h" 32 #include "main.h"
33 #include "tuning_parameters.h" 33 #include "tuning_parameters.h"
34 34
35 void silk_quant_LTP_gains( 35 void silk_quant_LTP_gains(
36 opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I /O (un)quantized LTP gains */ 36 opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I /O (un)quantized LTP gains */
37 opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */ 37 opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */
38 opus_int8 *periodicity_index, /* O Periodicity Index */ 38 opus_int8 *periodicity_index, /* O Periodicity Index */
39 » opus_int32» » » » » *sum_log_gain_Q7,» » » » » » » /* I/O Cumulative max predictio n gain */ 39 opus_int32 *sum_log_gain_Q7, /* I /O Cumulative max prediction gain */
40 const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */ 40 const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */
41 opus_int mu_Q9, /* I Mu value (R/D tradeoff) */ 41 opus_int mu_Q9, /* I Mu value (R/D tradeoff) */
42 opus_int lowComplexity, /* I Flag for low complexity */ 42 opus_int lowComplexity, /* I Flag for low complexity */
43 const opus_int nb_subfr /* I number of subframes */ 43 const opus_int nb_subfr, /* I number of subframes */
44 int arch /* I Run-time architecture */
44 ) 45 )
45 { 46 {
46 opus_int j, k, cbk_size; 47 opus_int j, k, cbk_size;
47 opus_int8 temp_idx[ MAX_NB_SUBFR ]; 48 opus_int8 temp_idx[ MAX_NB_SUBFR ];
48 const opus_uint8 *cl_ptr_Q5; 49 const opus_uint8 *cl_ptr_Q5;
49 const opus_int8 *cbk_ptr_Q7; 50 const opus_int8 *cbk_ptr_Q7;
50 const opus_uint8 *cbk_gain_ptr_Q7; 51 const opus_uint8 *cbk_gain_ptr_Q7;
51 const opus_int16 *b_Q14_ptr; 52 const opus_int16 *b_Q14_ptr;
52 const opus_int32 *W_Q18_ptr; 53 const opus_int32 *W_Q18_ptr;
53 opus_int32 rate_dist_Q14_subfr, rate_dist_Q14, min_rate_dist_Q14; 54 opus_int32 rate_dist_Q14_subfr, rate_dist_Q14, min_rate_dist_Q14;
54 » opus_int32 sum_log_gain_tmp_Q7, best_sum_log_gain_Q7, max_gain _Q7, gain_Q7; 55 opus_int32 sum_log_gain_tmp_Q7, best_sum_log_gain_Q7, max_gain_Q7, gain_Q7;
55 56
56 /***************************************************/ 57 /***************************************************/
57 /* iterate over different codebooks with different */ 58 /* iterate over different codebooks with different */
58 /* rates/distortions, and choose best */ 59 /* rates/distortions, and choose best */
59 /***************************************************/ 60 /***************************************************/
60 min_rate_dist_Q14 = silk_int32_MAX; 61 min_rate_dist_Q14 = silk_int32_MAX;
61 best_sum_log_gain_Q7 = 0; 62 best_sum_log_gain_Q7 = 0;
62 for( k = 0; k < 3; k++ ) { 63 for( k = 0; k < 3; k++ ) {
63 /* Safety margin for pitch gain control, to take into account factors 64 /* Safety margin for pitch gain control, to take into account factors
64 such as state rescaling/rewhitening. */ 65 such as state rescaling/rewhitening. */
65 opus_int32 gain_safety = SILK_FIX_CONST( 0.4, 7 ); 66 opus_int32 gain_safety = SILK_FIX_CONST( 0.4, 7 );
66 67
67 cl_ptr_Q5 = silk_LTP_gain_BITS_Q5_ptrs[ k ]; 68 cl_ptr_Q5 = silk_LTP_gain_BITS_Q5_ptrs[ k ];
68 cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ k ]; 69 cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ k ];
69 cbk_gain_ptr_Q7 = silk_LTP_vq_gain_ptrs_Q7[ k ]; 70 cbk_gain_ptr_Q7 = silk_LTP_vq_gain_ptrs_Q7[ k ];
70 cbk_size = silk_LTP_vq_sizes[ k ]; 71 cbk_size = silk_LTP_vq_sizes[ k ];
71 72
72 /* Set up pointer to first subframe */ 73 /* Set up pointer to first subframe */
73 W_Q18_ptr = W_Q18; 74 W_Q18_ptr = W_Q18;
74 b_Q14_ptr = B_Q14; 75 b_Q14_ptr = B_Q14;
75 76
76 rate_dist_Q14 = 0; 77 rate_dist_Q14 = 0;
77 » » sum_log_gain_tmp_Q7 = *sum_log_gain_Q7; 78 sum_log_gain_tmp_Q7 = *sum_log_gain_Q7;
78 for( j = 0; j < nb_subfr; j++ ) { 79 for( j = 0; j < nb_subfr; j++ ) {
79 » » » max_gain_Q7 = silk_log2lin( ( SILK_FIX_CONST( MAX_SUM_LO G_GAIN_DB / 6.0, 7 ) - sum_log_gain_tmp_Q7 ) 80 max_gain_Q7 = silk_log2lin( ( SILK_FIX_CONST( MAX_SUM_LOG_GAIN_DB / 6.0, 7 ) - sum_log_gain_tmp_Q7 )
80 » » » » » » » » » » + SILK_FIX_CONST( 7, 7 ) ) - gain_safety; 81 + SILK_FIX_CONST( 7, 7 ) ) - gain_safety ;
81 82
82 silk_VQ_WMat_EC( 83 silk_VQ_WMat_EC(
83 &temp_idx[ j ], /* O index of best codebook vector */ 84 &temp_idx[ j ], /* O index of best codebook vector */
84 &rate_dist_Q14_subfr, /* O best weighted quantization error + mu * rate */ 85 &rate_dist_Q14_subfr, /* O best weighted quantization error + mu * rate */
85 » » » » &gain_Q7, /* O sum of absolute LTP coefficients */ 86 &gain_Q7, /* O sum of absolute LTP coefficients */
86 b_Q14_ptr, /* I input vector to be quantized */ 87 b_Q14_ptr, /* I input vector to be quantized */
87 W_Q18_ptr, /* I weighting matrix */ 88 W_Q18_ptr, /* I weighting matrix */
88 cbk_ptr_Q7, /* I codebook */ 89 cbk_ptr_Q7, /* I codebook */
89 cbk_gain_ptr_Q7, /* I codebook effective gains */ 90 cbk_gain_ptr_Q7, /* I codebook effective gains */
90 cl_ptr_Q5, /* I code length for each codebook ve ctor */ 91 cl_ptr_Q5, /* I code length for each codebook ve ctor */
91 mu_Q9, /* I tradeoff between weighted error and rate */ 92 mu_Q9, /* I tradeoff between weighted error and rate */
92 » » » » max_gain_Q7, /* I maximum sum of a bsolute LTP coefficients */ 93 max_gain_Q7, /* I maximum sum of absolute LTP coef ficients */
93 cbk_size /* I number of vectors in codebook */ 94 cbk_size, /* I number of vectors in codebook */
95 arch /* I Run-time architecture */
94 ); 96 );
95 97
96 rate_dist_Q14 = silk_ADD_POS_SAT32( rate_dist_Q14, rate_dist_Q14_sub fr ); 98 rate_dist_Q14 = silk_ADD_POS_SAT32( rate_dist_Q14, rate_dist_Q14_sub fr );
97 sum_log_gain_tmp_Q7 = silk_max(0, sum_log_gain_tmp_Q7 99 sum_log_gain_tmp_Q7 = silk_max(0, sum_log_gain_tmp_Q7
98 + silk_lin2log( gain_safety + gain_Q7 ) - SILK_F IX_CONST( 7, 7 )); 100 + silk_lin2log( gain_safety + gain_Q7 ) - SILK_F IX_CONST( 7, 7 ));
99 101
100 b_Q14_ptr += LTP_ORDER; 102 b_Q14_ptr += LTP_ORDER;
101 W_Q18_ptr += LTP_ORDER * LTP_ORDER; 103 W_Q18_ptr += LTP_ORDER * LTP_ORDER;
102 } 104 }
103 105
104 /* Avoid never finding a codebook */ 106 /* Avoid never finding a codebook */
105 rate_dist_Q14 = silk_min( silk_int32_MAX - 1, rate_dist_Q14 ); 107 rate_dist_Q14 = silk_min( silk_int32_MAX - 1, rate_dist_Q14 );
106 108
107 if( rate_dist_Q14 < min_rate_dist_Q14 ) { 109 if( rate_dist_Q14 < min_rate_dist_Q14 ) {
108 min_rate_dist_Q14 = rate_dist_Q14; 110 min_rate_dist_Q14 = rate_dist_Q14;
109 *periodicity_index = (opus_int8)k; 111 *periodicity_index = (opus_int8)k;
110 silk_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( opus_int8 ) ); 112 silk_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( opus_int8 ) );
111 » » » best_sum_log_gain_Q7 = sum_log_gain_tmp_Q7; 113 best_sum_log_gain_Q7 = sum_log_gain_tmp_Q7;
112 } 114 }
113 115
114 /* Break early in low-complexity mode if rate distortion is below thresh old */ 116 /* Break early in low-complexity mode if rate distortion is below thresh old */
115 if( lowComplexity && ( rate_dist_Q14 < silk_LTP_gain_middle_avg_RD_Q14 ) ) { 117 if( lowComplexity && ( rate_dist_Q14 < silk_LTP_gain_middle_avg_RD_Q14 ) ) {
116 break; 118 break;
117 } 119 }
118 } 120 }
119 121
120 cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ *periodicity_index ]; 122 cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ *periodicity_index ];
121 for( j = 0; j < nb_subfr; j++ ) { 123 for( j = 0; j < nb_subfr; j++ ) {
122 for( k = 0; k < LTP_ORDER; k++ ) { 124 for( k = 0; k < LTP_ORDER; k++ ) {
123 B_Q14[ j * LTP_ORDER + k ] = silk_LSHIFT( cbk_ptr_Q7[ cbk_index[ j ] * LTP_ORDER + k ], 7 ); 125 B_Q14[ j * LTP_ORDER + k ] = silk_LSHIFT( cbk_ptr_Q7[ cbk_index[ j ] * LTP_ORDER + k ], 7 );
124 } 126 }
125 } 127 }
126 » *sum_log_gain_Q7 = best_sum_log_gain_Q7; 128 *sum_log_gain_Q7 = best_sum_log_gain_Q7;
127 } 129 }
128
OLDNEW
« no previous file with comments | « silk/mips/sigproc_fix_mipsr1.h ('k') | silk/resampler_rom.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698