| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 | 10 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 }; | 162 }; |
| 163 | 163 |
| 164 // This test encodes a few packets of PCM16b 32 kHz data and inserts it into two | 164 // This test encodes a few packets of PCM16b 32 kHz data and inserts it into two |
| 165 // different NetEq instances. The first instance uses the internal version of | 165 // different NetEq instances. The first instance uses the internal version of |
| 166 // the decoder object, while the second one uses an externally created decoder | 166 // the decoder object, while the second one uses an externally created decoder |
| 167 // object (ExternalPcm16B wrapped in MockExternalPcm16B, both defined above). | 167 // object (ExternalPcm16B wrapped in MockExternalPcm16B, both defined above). |
| 168 // The test verifies that the output from both instances match. | 168 // The test verifies that the output from both instances match. |
| 169 class NetEqExternalVsInternalDecoderTest : public NetEqExternalDecoderUnitTest, | 169 class NetEqExternalVsInternalDecoderTest : public NetEqExternalDecoderUnitTest, |
| 170 public ::testing::Test { | 170 public ::testing::Test { |
| 171 protected: | 171 protected: |
| 172 static const int kMaxBlockSize = 480; // 10 ms @ 48 kHz. | 172 static const size_t kMaxBlockSize = 480; // 10 ms @ 48 kHz. |
| 173 | 173 |
| 174 NetEqExternalVsInternalDecoderTest() | 174 NetEqExternalVsInternalDecoderTest() |
| 175 : NetEqExternalDecoderUnitTest(kDecoderPCM16Bswb32kHz, | 175 : NetEqExternalDecoderUnitTest(kDecoderPCM16Bswb32kHz, |
| 176 new MockExternalPcm16B), | 176 new MockExternalPcm16B), |
| 177 sample_rate_hz_(CodecSampleRateHz(kDecoderPCM16Bswb32kHz)) { | 177 sample_rate_hz_(CodecSampleRateHz(kDecoderPCM16Bswb32kHz)) { |
| 178 NetEq::Config config; | 178 NetEq::Config config; |
| 179 config.sample_rate_hz = CodecSampleRateHz(kDecoderPCM16Bswb32kHz); | 179 config.sample_rate_hz = CodecSampleRateHz(kDecoderPCM16Bswb32kHz); |
| 180 neteq_internal_.reset(NetEq::Create(config)); | 180 neteq_internal_.reset(NetEq::Create(config)); |
| 181 } | 181 } |
| 182 | 182 |
| 183 void SetUp() override { | 183 void SetUp() override { |
| 184 ASSERT_EQ(NetEq::kOK, | 184 ASSERT_EQ(NetEq::kOK, |
| 185 neteq_internal_->RegisterPayloadType(kDecoderPCM16Bswb32kHz, | 185 neteq_internal_->RegisterPayloadType(kDecoderPCM16Bswb32kHz, |
| 186 kPayloadType)); | 186 kPayloadType)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void GetAndVerifyOutput() override { | 189 void GetAndVerifyOutput() override { |
| 190 NetEqOutputType output_type; | 190 NetEqOutputType output_type; |
| 191 int samples_per_channel; | 191 size_t samples_per_channel; |
| 192 int num_channels; | 192 int num_channels; |
| 193 // Get audio from internal decoder instance. | 193 // Get audio from internal decoder instance. |
| 194 EXPECT_EQ(NetEq::kOK, | 194 EXPECT_EQ(NetEq::kOK, |
| 195 neteq_internal_->GetAudio(kMaxBlockSize, | 195 neteq_internal_->GetAudio(kMaxBlockSize, |
| 196 output_internal_, | 196 output_internal_, |
| 197 &samples_per_channel, | 197 &samples_per_channel, |
| 198 &num_channels, | 198 &num_channels, |
| 199 &output_type)); | 199 &output_type)); |
| 200 EXPECT_EQ(1, num_channels); | 200 EXPECT_EQ(1, num_channels); |
| 201 EXPECT_EQ(kOutputLengthMs * sample_rate_hz_ / 1000, samples_per_channel); | 201 EXPECT_EQ(static_cast<size_t>(kOutputLengthMs * sample_rate_hz_ / 1000), |
| 202 samples_per_channel); |
| 202 | 203 |
| 203 // Get audio from external decoder instance. | 204 // Get audio from external decoder instance. |
| 204 samples_per_channel = GetOutputAudio(kMaxBlockSize, output_, &output_type); | 205 samples_per_channel = GetOutputAudio(kMaxBlockSize, output_, &output_type); |
| 205 | 206 |
| 206 for (int i = 0; i < samples_per_channel; ++i) { | 207 for (size_t i = 0; i < samples_per_channel; ++i) { |
| 207 ASSERT_EQ(output_[i], output_internal_[i]) << | 208 ASSERT_EQ(output_[i], output_internal_[i]) << |
| 208 "Diff in sample " << i << "."; | 209 "Diff in sample " << i << "."; |
| 209 } | 210 } |
| 210 } | 211 } |
| 211 | 212 |
| 212 void InsertPacket(WebRtcRTPHeader rtp_header, const uint8_t* payload, | 213 void InsertPacket(WebRtcRTPHeader rtp_header, const uint8_t* payload, |
| 213 size_t payload_size_bytes, | 214 size_t payload_size_bytes, |
| 214 uint32_t receive_timestamp) override { | 215 uint32_t receive_timestamp) override { |
| 215 // Insert packet in internal decoder. | 216 // Insert packet in internal decoder. |
| 216 ASSERT_EQ( | 217 ASSERT_EQ( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 233 int16_t output_[kMaxBlockSize]; | 234 int16_t output_[kMaxBlockSize]; |
| 234 }; | 235 }; |
| 235 | 236 |
| 236 TEST_F(NetEqExternalVsInternalDecoderTest, RunTest) { | 237 TEST_F(NetEqExternalVsInternalDecoderTest, RunTest) { |
| 237 RunTest(100); // Run 100 laps @ 10 ms each in the test loop. | 238 RunTest(100); // Run 100 laps @ 10 ms each in the test loop. |
| 238 } | 239 } |
| 239 | 240 |
| 240 class LargeTimestampJumpTest : public NetEqExternalDecoderUnitTest, | 241 class LargeTimestampJumpTest : public NetEqExternalDecoderUnitTest, |
| 241 public ::testing::Test { | 242 public ::testing::Test { |
| 242 protected: | 243 protected: |
| 243 static const int kMaxBlockSize = 480; // 10 ms @ 48 kHz. | 244 static const size_t kMaxBlockSize = 480; // 10 ms @ 48 kHz. |
| 244 | 245 |
| 245 enum TestStates { | 246 enum TestStates { |
| 246 kInitialPhase, | 247 kInitialPhase, |
| 247 kNormalPhase, | 248 kNormalPhase, |
| 248 kExpandPhase, | 249 kExpandPhase, |
| 249 kFadedExpandPhase, | 250 kFadedExpandPhase, |
| 250 kRecovered | 251 kRecovered |
| 251 }; | 252 }; |
| 252 | 253 |
| 253 LargeTimestampJumpTest() | 254 LargeTimestampJumpTest() |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 } | 287 } |
| 287 break; | 288 break; |
| 288 } | 289 } |
| 289 case kRecovered: { | 290 case kRecovered: { |
| 290 break; | 291 break; |
| 291 } | 292 } |
| 292 } | 293 } |
| 293 } | 294 } |
| 294 | 295 |
| 295 void GetAndVerifyOutput() override { | 296 void GetAndVerifyOutput() override { |
| 296 int num_samples; | 297 size_t num_samples; |
| 297 NetEqOutputType output_type; | 298 NetEqOutputType output_type; |
| 298 num_samples = GetOutputAudio(kMaxBlockSize, output_, &output_type); | 299 num_samples = GetOutputAudio(kMaxBlockSize, output_, &output_type); |
| 299 UpdateState(output_type); | 300 UpdateState(output_type); |
| 300 | 301 |
| 301 if (test_state_ == kExpandPhase || test_state_ == kFadedExpandPhase) { | 302 if (test_state_ == kExpandPhase || test_state_ == kFadedExpandPhase) { |
| 302 // Don't verify the output in this phase of the test. | 303 // Don't verify the output in this phase of the test. |
| 303 return; | 304 return; |
| 304 } | 305 } |
| 305 | 306 |
| 306 for (int i = 0; i < num_samples; ++i) { | 307 for (size_t i = 0; i < num_samples; ++i) { |
| 307 if (output_[i] != 0) | 308 if (output_[i] != 0) |
| 308 return; | 309 return; |
| 309 } | 310 } |
| 310 EXPECT_TRUE(false) | 311 EXPECT_TRUE(false) |
| 311 << "Expected at least one non-zero sample in each output block."; | 312 << "Expected at least one non-zero sample in each output block."; |
| 312 } | 313 } |
| 313 | 314 |
| 314 int NumExpectedDecodeCalls(int num_loops) override { | 315 int NumExpectedDecodeCalls(int num_loops) override { |
| 315 // Some packets at the end of the stream won't be decoded. When the jump in | 316 // Some packets at the end of the stream won't be decoded. When the jump in |
| 316 // timestamp happens, NetEq will do Expand during one GetAudio call. In the | 317 // timestamp happens, NetEq will do Expand during one GetAudio call. In the |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 kStartSeqeunceNumber, | 454 kStartSeqeunceNumber, |
| 454 kStartTimestamp, | 455 kStartTimestamp, |
| 455 kJumpFromTimestamp, | 456 kJumpFromTimestamp, |
| 456 kJumpToTimestamp)); | 457 kJumpToTimestamp)); |
| 457 | 458 |
| 458 RunTest(130); // Run 130 laps @ 10 ms each in the test loop. | 459 RunTest(130); // Run 130 laps @ 10 ms each in the test loop. |
| 459 EXPECT_EQ(kRecovered, test_state_); | 460 EXPECT_EQ(kRecovered, test_state_); |
| 460 } | 461 } |
| 461 | 462 |
| 462 } // namespace webrtc | 463 } // namespace webrtc |
| OLD | NEW |