OLD | NEW |
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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 *encSizeBytes = sizeof( silk_encoder ); | 62 *encSizeBytes = sizeof( silk_encoder ); |
63 | 63 |
64 return ret; | 64 return ret; |
65 } | 65 } |
66 | 66 |
67 /*************************/ | 67 /*************************/ |
68 /* Init or Reset encoder */ | 68 /* Init or Reset encoder */ |
69 /*************************/ | 69 /*************************/ |
70 opus_int silk_InitEncoder( /* O Returns error co
de */ | 70 opus_int silk_InitEncoder( /* O Returns error co
de */ |
71 void *encState, /* I/O State
*/ | 71 void *encState, /* I/O State
*/ |
| 72 int arch, /* I Run-time archite
cture */ |
72 silk_EncControlStruct *encStatus /* O Encoder Status
*/ | 73 silk_EncControlStruct *encStatus /* O Encoder Status
*/ |
73 ) | 74 ) |
74 { | 75 { |
75 silk_encoder *psEnc; | 76 silk_encoder *psEnc; |
76 opus_int n, ret = SILK_NO_ERROR; | 77 opus_int n, ret = SILK_NO_ERROR; |
77 | 78 |
78 psEnc = (silk_encoder *)encState; | 79 psEnc = (silk_encoder *)encState; |
79 | 80 |
80 /* Reset encoder */ | 81 /* Reset encoder */ |
81 silk_memset( psEnc, 0, sizeof( silk_encoder ) ); | 82 silk_memset( psEnc, 0, sizeof( silk_encoder ) ); |
82 for( n = 0; n < ENCODER_NUM_CHANNELS; n++ ) { | 83 for( n = 0; n < ENCODER_NUM_CHANNELS; n++ ) { |
83 if( ret += silk_init_encoder( &psEnc->state_Fxx[ n ] ) ) { | 84 if( ret += silk_init_encoder( &psEnc->state_Fxx[ n ], arch ) ) { |
84 silk_assert( 0 ); | 85 silk_assert( 0 ); |
85 } | 86 } |
86 } | 87 } |
87 | 88 |
88 psEnc->nChannelsAPI = 1; | 89 psEnc->nChannelsAPI = 1; |
89 psEnc->nChannelsInternal = 1; | 90 psEnc->nChannelsInternal = 1; |
90 | 91 |
91 /* Read control structure */ | 92 /* Read control structure */ |
92 if( ret += silk_QueryEncoder( encState, encStatus ) ) { | 93 if( ret += silk_QueryEncoder( encState, encStatus ) ) { |
93 silk_assert( 0 ); | 94 silk_assert( 0 ); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 opus_int n, i, nBits, flags, tmp_payloadSize_ms = 0, tmp_complexity = 0, r
et = 0; | 150 opus_int n, i, nBits, flags, tmp_payloadSize_ms = 0, tmp_complexity = 0, r
et = 0; |
150 opus_int nSamplesToBuffer, nSamplesToBufferMax, nBlocksOf10ms; | 151 opus_int nSamplesToBuffer, nSamplesToBufferMax, nBlocksOf10ms; |
151 opus_int nSamplesFromInput = 0, nSamplesFromInputMax; | 152 opus_int nSamplesFromInput = 0, nSamplesFromInputMax; |
152 opus_int speech_act_thr_for_switch_Q8; | 153 opus_int speech_act_thr_for_switch_Q8; |
153 opus_int32 TargetRate_bps, MStargetRates_bps[ 2 ], channelRate_bps, LBRR_sym
bol, sum; | 154 opus_int32 TargetRate_bps, MStargetRates_bps[ 2 ], channelRate_bps, LBRR_sym
bol, sum; |
154 silk_encoder *psEnc = ( silk_encoder * )encState; | 155 silk_encoder *psEnc = ( silk_encoder * )encState; |
155 VARDECL( opus_int16, buf ); | 156 VARDECL( opus_int16, buf ); |
156 opus_int transition, curr_block, tot_blocks; | 157 opus_int transition, curr_block, tot_blocks; |
157 SAVE_STACK; | 158 SAVE_STACK; |
158 | 159 |
| 160 if (encControl->reducedDependency) |
| 161 { |
| 162 psEnc->state_Fxx[0].sCmn.first_frame_after_reset = 1; |
| 163 psEnc->state_Fxx[1].sCmn.first_frame_after_reset = 1; |
| 164 } |
159 psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded = psEnc->state_Fxx[ 1 ].sCmn.nFram
esEncoded = 0; | 165 psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded = psEnc->state_Fxx[ 1 ].sCmn.nFram
esEncoded = 0; |
160 | 166 |
161 /* Check values in encoder control structure */ | 167 /* Check values in encoder control structure */ |
162 if( ( ret = check_control_input( encControl ) != 0 ) ) { | 168 if( ( ret = check_control_input( encControl ) != 0 ) ) { |
163 silk_assert( 0 ); | 169 silk_assert( 0 ); |
164 RESTORE_STACK; | 170 RESTORE_STACK; |
165 return ret; | 171 return ret; |
166 } | 172 } |
167 | 173 |
168 encControl->switchReady = 0; | 174 encControl->switchReady = 0; |
169 | 175 |
170 if( encControl->nChannelsInternal > psEnc->nChannelsInternal ) { | 176 if( encControl->nChannelsInternal > psEnc->nChannelsInternal ) { |
171 /* Mono -> Stereo transition: init state of second channel and stereo st
ate */ | 177 /* Mono -> Stereo transition: init state of second channel and stereo st
ate */ |
172 ret += silk_init_encoder( &psEnc->state_Fxx[ 1 ] ); | 178 ret += silk_init_encoder( &psEnc->state_Fxx[ 1 ], psEnc->state_Fxx[ 0 ].
sCmn.arch ); |
173 silk_memset( psEnc->sStereo.pred_prev_Q13, 0, sizeof( psEnc->sStereo.pre
d_prev_Q13 ) ); | 179 silk_memset( psEnc->sStereo.pred_prev_Q13, 0, sizeof( psEnc->sStereo.pre
d_prev_Q13 ) ); |
174 silk_memset( psEnc->sStereo.sSide, 0, sizeof( psEnc->sStereo.sSide ) ); | 180 silk_memset( psEnc->sStereo.sSide, 0, sizeof( psEnc->sStereo.sSide ) ); |
175 psEnc->sStereo.mid_side_amp_Q0[ 0 ] = 0; | 181 psEnc->sStereo.mid_side_amp_Q0[ 0 ] = 0; |
176 psEnc->sStereo.mid_side_amp_Q0[ 1 ] = 1; | 182 psEnc->sStereo.mid_side_amp_Q0[ 1 ] = 1; |
177 psEnc->sStereo.mid_side_amp_Q0[ 2 ] = 0; | 183 psEnc->sStereo.mid_side_amp_Q0[ 2 ] = 0; |
178 psEnc->sStereo.mid_side_amp_Q0[ 3 ] = 1; | 184 psEnc->sStereo.mid_side_amp_Q0[ 3 ] = 1; |
179 psEnc->sStereo.width_prev_Q14 = 0; | 185 psEnc->sStereo.width_prev_Q14 = 0; |
180 psEnc->sStereo.smth_width_Q14 = SILK_FIX_CONST( 1, 14 ); | 186 psEnc->sStereo.smth_width_Q14 = SILK_FIX_CONST( 1, 14 ); |
181 if( psEnc->nChannelsAPI == 2 ) { | 187 if( psEnc->nChannelsAPI == 2 ) { |
182 silk_memcpy( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state, &psEnc->st
ate_Fxx[ 0 ].sCmn.resampler_state, sizeof( silk_resampler_state_struct ) ); | 188 silk_memcpy( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state, &psEnc->st
ate_Fxx[ 0 ].sCmn.resampler_state, sizeof( silk_resampler_state_struct ) ); |
(...skipping 11 matching lines...) Expand all Loading... |
194 curr_block = 0; | 200 curr_block = 0; |
195 if( prefillFlag ) { | 201 if( prefillFlag ) { |
196 /* Only accept input length of 10 ms */ | 202 /* Only accept input length of 10 ms */ |
197 if( nBlocksOf10ms != 1 ) { | 203 if( nBlocksOf10ms != 1 ) { |
198 silk_assert( 0 ); | 204 silk_assert( 0 ); |
199 RESTORE_STACK; | 205 RESTORE_STACK; |
200 return SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; | 206 return SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; |
201 } | 207 } |
202 /* Reset Encoder */ | 208 /* Reset Encoder */ |
203 for( n = 0; n < encControl->nChannelsInternal; n++ ) { | 209 for( n = 0; n < encControl->nChannelsInternal; n++ ) { |
204 if( (ret = silk_init_encoder( &psEnc->state_Fxx[ n ] ) ) != 0 ) { | 210 ret = silk_init_encoder( &psEnc->state_Fxx[ n ], psEnc->state_Fxx[ n
].sCmn.arch ); |
205 silk_assert( 0 ); | 211 silk_assert( !ret ); |
206 } | |
207 } | 212 } |
208 tmp_payloadSize_ms = encControl->payloadSize_ms; | 213 tmp_payloadSize_ms = encControl->payloadSize_ms; |
209 encControl->payloadSize_ms = 10; | 214 encControl->payloadSize_ms = 10; |
210 tmp_complexity = encControl->complexity; | 215 tmp_complexity = encControl->complexity; |
211 encControl->complexity = 0; | 216 encControl->complexity = 0; |
212 for( n = 0; n < encControl->nChannelsInternal; n++ ) { | 217 for( n = 0; n < encControl->nChannelsInternal; n++ ) { |
213 psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0; | 218 psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0; |
214 psEnc->state_Fxx[ n ].sCmn.prefillFlag = 1; | 219 psEnc->state_Fxx[ n ].sCmn.prefillFlag = 1; |
215 } | 220 } |
216 } else { | 221 } else { |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 for( n = 0; n < encControl->nChannelsInternal; n++ ) { | 547 for( n = 0; n < encControl->nChannelsInternal; n++ ) { |
543 psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0; | 548 psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0; |
544 psEnc->state_Fxx[ n ].sCmn.prefillFlag = 0; | 549 psEnc->state_Fxx[ n ].sCmn.prefillFlag = 0; |
545 } | 550 } |
546 } | 551 } |
547 | 552 |
548 RESTORE_STACK; | 553 RESTORE_STACK; |
549 return ret; | 554 return ret; |
550 } | 555 } |
551 | 556 |
OLD | NEW |