| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 #include <string> | 10 #include <string> |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 // Update SID parameters, for both 9 and 16 parameters. | 187 // Update SID parameters, for both 9 and 16 parameters. |
| 188 TEST_F(CngTest, CngUpdateSid) { | 188 TEST_F(CngTest, CngUpdateSid) { |
| 189 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 189 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
| 190 size_t number_bytes; | 190 size_t number_bytes; |
| 191 | 191 |
| 192 // Create and initialize encoder and decoder memory. | 192 // Create and initialize encoder and decoder memory. |
| 193 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); | 193 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); |
| 194 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); | 194 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); |
| 195 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, | 195 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, |
| 196 kCNGNumParamsNormal)); | 196 kCNGNumParamsNormal)); |
| 197 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 197 WebRtcCng_InitDec(cng_dec_inst_); |
| 198 | 198 |
| 199 // Run normal Encode and UpdateSid. | 199 // Run normal Encode and UpdateSid. |
| 200 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( | 200 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( |
| 201 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); | 201 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); |
| 202 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 202 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 203 kCNGNumParamsNormal + 1)); | 203 kCNGNumParamsNormal + 1)); |
| 204 | 204 |
| 205 // Reinit with new length. | 205 // Reinit with new length. |
| 206 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, | 206 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, |
| 207 kCNGNumParamsHigh)); | 207 kCNGNumParamsHigh)); |
| 208 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 208 WebRtcCng_InitDec(cng_dec_inst_); |
| 209 | 209 |
| 210 // Expect 0 because of unstable parameters after switching length. | 210 // Expect 0 because of unstable parameters after switching length. |
| 211 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, | 211 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, |
| 212 &number_bytes, kForceSid)); | 212 &number_bytes, kForceSid)); |
| 213 EXPECT_EQ(kCNGNumParamsHigh + 1, WebRtcCng_Encode( | 213 EXPECT_EQ(kCNGNumParamsHigh + 1, WebRtcCng_Encode( |
| 214 cng_enc_inst_, speech_data_ + 160, 160, sid_data, &number_bytes, | 214 cng_enc_inst_, speech_data_ + 160, 160, sid_data, &number_bytes, |
| 215 kForceSid)); | 215 kForceSid)); |
| 216 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 216 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 217 kCNGNumParamsNormal + 1)); | 217 kCNGNumParamsNormal + 1)); |
| 218 | 218 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 235 kCNGNumParamsNormal)); | 235 kCNGNumParamsNormal)); |
| 236 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( | 236 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( |
| 237 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); | 237 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); |
| 238 | 238 |
| 239 // Update Sid before initializing decoder. | 239 // Update Sid before initializing decoder. |
| 240 EXPECT_EQ(-1, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 240 EXPECT_EQ(-1, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 241 kCNGNumParamsNormal + 1)); | 241 kCNGNumParamsNormal + 1)); |
| 242 EXPECT_EQ(6220, WebRtcCng_GetErrorCodeDec(cng_dec_inst_)); | 242 EXPECT_EQ(6220, WebRtcCng_GetErrorCodeDec(cng_dec_inst_)); |
| 243 | 243 |
| 244 // Initialize decoder. | 244 // Initialize decoder. |
| 245 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 245 WebRtcCng_InitDec(cng_dec_inst_); |
| 246 | 246 |
| 247 // First run with valid parameters, then with too many CNG parameters. | 247 // First run with valid parameters, then with too many CNG parameters. |
| 248 // The function will operate correctly by only reading the maximum number of | 248 // The function will operate correctly by only reading the maximum number of |
| 249 // parameters, skipping the extra. | 249 // parameters, skipping the extra. |
| 250 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 250 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 251 kCNGNumParamsNormal + 1)); | 251 kCNGNumParamsNormal + 1)); |
| 252 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 252 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 253 kCNGNumParamsTooHigh + 1)); | 253 kCNGNumParamsTooHigh + 1)); |
| 254 | 254 |
| 255 // Free encoder and decoder memory. | 255 // Free encoder and decoder memory. |
| 256 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); | 256 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); |
| 257 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); | 257 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); |
| 258 } | 258 } |
| 259 | 259 |
| 260 // Test to generate cng data, by forcing SID. Both normal and faulty condition. | 260 // Test to generate cng data, by forcing SID. Both normal and faulty condition. |
| 261 TEST_F(CngTest, CngGenerate) { | 261 TEST_F(CngTest, CngGenerate) { |
| 262 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 262 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
| 263 int16_t out_data[640]; | 263 int16_t out_data[640]; |
| 264 size_t number_bytes; | 264 size_t number_bytes; |
| 265 | 265 |
| 266 // Create and initialize encoder and decoder memory. | 266 // Create and initialize encoder and decoder memory. |
| 267 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); | 267 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); |
| 268 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); | 268 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); |
| 269 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, | 269 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, |
| 270 kCNGNumParamsNormal)); | 270 kCNGNumParamsNormal)); |
| 271 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 271 WebRtcCng_InitDec(cng_dec_inst_); |
| 272 | 272 |
| 273 // Normal Encode. | 273 // Normal Encode. |
| 274 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( | 274 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( |
| 275 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); | 275 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kForceSid)); |
| 276 | 276 |
| 277 // Normal UpdateSid. | 277 // Normal UpdateSid. |
| 278 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, | 278 EXPECT_EQ(0, WebRtcCng_UpdateSid(cng_dec_inst_, sid_data, |
| 279 kCNGNumParamsNormal + 1)); | 279 kCNGNumParamsNormal + 1)); |
| 280 | 280 |
| 281 // Two normal Generate, one with new_period. | 281 // Two normal Generate, one with new_period. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 294 // Test automatic SID. | 294 // Test automatic SID. |
| 295 TEST_F(CngTest, CngAutoSid) { | 295 TEST_F(CngTest, CngAutoSid) { |
| 296 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 296 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
| 297 size_t number_bytes; | 297 size_t number_bytes; |
| 298 | 298 |
| 299 // Create and initialize encoder and decoder memory. | 299 // Create and initialize encoder and decoder memory. |
| 300 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); | 300 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); |
| 301 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); | 301 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); |
| 302 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, | 302 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidNormalIntervalUpdate, |
| 303 kCNGNumParamsNormal)); | 303 kCNGNumParamsNormal)); |
| 304 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 304 WebRtcCng_InitDec(cng_dec_inst_); |
| 305 | 305 |
| 306 // Normal Encode, 100 msec, where no SID data should be generated. | 306 // Normal Encode, 100 msec, where no SID data should be generated. |
| 307 for (int i = 0; i < 10; i++) { | 307 for (int i = 0; i < 10; i++) { |
| 308 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, | 308 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, |
| 309 &number_bytes, kNoSid)); | 309 &number_bytes, kNoSid)); |
| 310 } | 310 } |
| 311 | 311 |
| 312 // We have reached 100 msec, and SID data should be generated. | 312 // We have reached 100 msec, and SID data should be generated. |
| 313 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( | 313 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( |
| 314 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kNoSid)); | 314 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kNoSid)); |
| 315 | 315 |
| 316 // Free encoder and decoder memory. | 316 // Free encoder and decoder memory. |
| 317 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); | 317 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); |
| 318 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); | 318 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); |
| 319 } | 319 } |
| 320 | 320 |
| 321 // Test automatic SID, with very short interval. | 321 // Test automatic SID, with very short interval. |
| 322 TEST_F(CngTest, CngAutoSidShort) { | 322 TEST_F(CngTest, CngAutoSidShort) { |
| 323 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 323 uint8_t sid_data[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
| 324 size_t number_bytes; | 324 size_t number_bytes; |
| 325 | 325 |
| 326 // Create and initialize encoder and decoder memory. | 326 // Create and initialize encoder and decoder memory. |
| 327 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); | 327 EXPECT_EQ(0, WebRtcCng_CreateEnc(&cng_enc_inst_)); |
| 328 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); | 328 EXPECT_EQ(0, WebRtcCng_CreateDec(&cng_dec_inst_)); |
| 329 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidShortIntervalUpdate, | 329 EXPECT_EQ(0, WebRtcCng_InitEnc(cng_enc_inst_, 16000, kSidShortIntervalUpdate, |
| 330 kCNGNumParamsNormal)); | 330 kCNGNumParamsNormal)); |
| 331 EXPECT_EQ(0, WebRtcCng_InitDec(cng_dec_inst_)); | 331 WebRtcCng_InitDec(cng_dec_inst_); |
| 332 | 332 |
| 333 // First call will never generate SID, unless forced to. | 333 // First call will never generate SID, unless forced to. |
| 334 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, | 334 EXPECT_EQ(0, WebRtcCng_Encode(cng_enc_inst_, speech_data_, 160, sid_data, |
| 335 &number_bytes, kNoSid)); | 335 &number_bytes, kNoSid)); |
| 336 | 336 |
| 337 // Normal Encode, 100 msec, SID data should be generated all the time. | 337 // Normal Encode, 100 msec, SID data should be generated all the time. |
| 338 for (int i = 0; i < 10; i++) { | 338 for (int i = 0; i < 10; i++) { |
| 339 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( | 339 EXPECT_EQ(kCNGNumParamsNormal + 1, WebRtcCng_Encode( |
| 340 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kNoSid)); | 340 cng_enc_inst_, speech_data_, 160, sid_data, &number_bytes, kNoSid)); |
| 341 } | 341 } |
| 342 | 342 |
| 343 // Free encoder and decoder memory. | 343 // Free encoder and decoder memory. |
| 344 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); | 344 EXPECT_EQ(0, WebRtcCng_FreeEnc(cng_enc_inst_)); |
| 345 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); | 345 EXPECT_EQ(0, WebRtcCng_FreeDec(cng_dec_inst_)); |
| 346 } | 346 } |
| 347 | 347 |
| 348 } // namespace webrtc | 348 } // namespace webrtc |
| OLD | NEW |