Chromium Code Reviews| 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 }; | 142 }; |
| 143 | 143 |
| 144 void CallPerfTest::TestAudioVideoSync(FecMode fec, | 144 void CallPerfTest::TestAudioVideoSync(FecMode fec, |
| 145 CreateOrder create_first, | 145 CreateOrder create_first, |
| 146 float video_ntp_speed, | 146 float video_ntp_speed, |
| 147 float video_rtp_speed, | 147 float video_rtp_speed, |
| 148 float audio_rtp_speed) { | 148 float audio_rtp_speed) { |
| 149 const char* kSyncGroup = "av_sync"; | 149 const char* kSyncGroup = "av_sync"; |
| 150 const uint32_t kAudioSendSsrc = 1234; | 150 const uint32_t kAudioSendSsrc = 1234; |
| 151 const uint32_t kAudioRecvSsrc = 5678; | 151 const uint32_t kAudioRecvSsrc = 5678; |
| 152 class AudioPacketReceiver : public PacketReceiver { | |
| 153 public: | |
| 154 AudioPacketReceiver(int channel, VoENetwork* voe_network) | |
| 155 : channel_(channel), | |
| 156 voe_network_(voe_network), | |
| 157 parser_(RtpHeaderParser::Create()) {} | |
| 158 DeliveryStatus DeliverPacket(MediaType media_type, | |
| 159 const uint8_t* packet, | |
| 160 size_t length, | |
| 161 const PacketTime& packet_time) override { | |
| 162 EXPECT_TRUE(media_type == MediaType::ANY || | |
| 163 media_type == MediaType::AUDIO); | |
| 164 int ret; | |
| 165 if (parser_->IsRtcp(packet, length)) { | |
| 166 ret = voe_network_->ReceivedRTCPPacket(channel_, packet, length); | |
| 167 } else { | |
| 168 ret = voe_network_->ReceivedRTPPacket(channel_, packet, length, | |
| 169 PacketTime()); | |
| 170 } | |
| 171 return ret == 0 ? DELIVERY_OK : DELIVERY_PACKET_ERROR; | |
| 172 } | |
| 173 | |
| 174 private: | |
| 175 int channel_; | |
| 176 VoENetwork* voe_network_; | |
| 177 std::unique_ptr<RtpHeaderParser> parser_; | |
| 178 }; | |
| 179 | 152 |
| 180 test::ClearHistograms(); | 153 test::ClearHistograms(); |
| 181 VoiceEngine* voice_engine = VoiceEngine::Create(); | 154 VoiceEngine* voice_engine = VoiceEngine::Create(); |
| 182 VoEBase* voe_base = VoEBase::GetInterface(voice_engine); | 155 VoEBase* voe_base = VoEBase::GetInterface(voice_engine); |
| 183 VoECodec* voe_codec = VoECodec::GetInterface(voice_engine); | 156 VoECodec* voe_codec = VoECodec::GetInterface(voice_engine); |
| 184 VoENetwork* voe_network = VoENetwork::GetInterface(voice_engine); | 157 VoENetwork* voe_network = VoENetwork::GetInterface(voice_engine); |
|
stefan-webrtc
2016/04/22 09:16:19
No longer used.
If you feel like it, it should be
mflodman
2016/04/22 09:41:48
Removed.
I'd prefer to followup with the refactor
stefan-webrtc
2016/04/22 10:35:04
Sure, no problem.
| |
| 185 const std::string audio_filename = | 158 const std::string audio_filename = |
| 186 test::ResourcePath("voice_engine/audio_long16", "pcm"); | 159 test::ResourcePath("voice_engine/audio_long16", "pcm"); |
| 187 ASSERT_STRNE("", audio_filename.c_str()); | 160 ASSERT_STRNE("", audio_filename.c_str()); |
| 188 FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(), audio_filename, | 161 FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(), audio_filename, |
| 189 audio_rtp_speed); | 162 audio_rtp_speed); |
| 190 EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr)); | 163 EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr)); |
| 191 Config voe_config; | 164 Config voe_config; |
| 192 voe_config.Set<VoicePacing>(new VoicePacing(true)); | 165 voe_config.Set<VoicePacing>(new VoicePacing(true)); |
| 193 int send_channel_id = voe_base->CreateChannel(voe_config); | 166 int send_channel_id = voe_base->CreateChannel(voe_config); |
| 194 int recv_channel_id = voe_base->CreateChannel(); | 167 int recv_channel_id = voe_base->CreateChannel(); |
| 195 | 168 |
| 196 AudioState::Config send_audio_state_config; | 169 AudioState::Config send_audio_state_config; |
| 197 send_audio_state_config.voice_engine = voice_engine; | 170 send_audio_state_config.voice_engine = voice_engine; |
| 198 Call::Config sender_config; | 171 Call::Config sender_config; |
| 199 sender_config.audio_state = AudioState::Create(send_audio_state_config); | 172 sender_config.audio_state = AudioState::Create(send_audio_state_config); |
| 200 Call::Config receiver_config; | 173 Call::Config receiver_config; |
| 201 receiver_config.audio_state = sender_config.audio_state; | 174 receiver_config.audio_state = sender_config.audio_state; |
| 202 CreateCalls(sender_config, receiver_config); | 175 CreateCalls(sender_config, receiver_config); |
| 203 | 176 |
| 204 AudioPacketReceiver voe_send_packet_receiver(send_channel_id, voe_network); | |
| 205 AudioPacketReceiver voe_recv_packet_receiver(recv_channel_id, voe_network); | |
| 206 | 177 |
| 207 VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock()); | 178 VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock()); |
| 208 | 179 |
| 209 FakeNetworkPipe::Config net_config; | 180 // Helper class to ensure we deliver correct media_type to the receiving call. |
| 210 net_config.queue_delay_ms = 500; | 181 class MediaTypePacketReceiver : public PacketReceiver { |
| 211 net_config.loss_percent = 5; | 182 public: |
| 212 test::PacketTransport audio_send_transport( | 183 MediaTypePacketReceiver(PacketReceiver* packet_receiver, |
| 213 nullptr, &observer, test::PacketTransport::kSender, net_config); | 184 MediaType media_type) |
| 214 audio_send_transport.SetReceiver(&voe_recv_packet_receiver); | 185 : packet_receiver_(packet_receiver), media_type_(media_type) {} |
| 215 test::PacketTransport audio_receive_transport( | |
| 216 nullptr, &observer, test::PacketTransport::kReceiver, net_config); | |
| 217 audio_receive_transport.SetReceiver(&voe_send_packet_receiver); | |
| 218 | 186 |
| 219 internal::TransportAdapter send_transport_adapter(&audio_send_transport); | 187 DeliveryStatus DeliverPacket(MediaType media_type, |
| 220 send_transport_adapter.Enable(); | 188 const uint8_t* packet, |
| 221 EXPECT_EQ(0, voe_network->RegisterExternalTransport(send_channel_id, | 189 size_t length, |
| 222 send_transport_adapter)); | 190 const PacketTime& packet_time) override { |
| 191 return packet_receiver_->DeliverPacket(media_type_, packet, length, | |
| 192 packet_time); | |
| 193 } | |
| 194 private: | |
| 195 PacketReceiver* packet_receiver_; | |
| 196 const MediaType media_type_; | |
| 197 }; | |
| 223 | 198 |
| 224 internal::TransportAdapter recv_transport_adapter(&audio_receive_transport); | 199 FakeNetworkPipe::Config audio_net_config; |
| 225 recv_transport_adapter.Enable(); | 200 audio_net_config.queue_delay_ms = 500; |
| 226 EXPECT_EQ(0, voe_network->RegisterExternalTransport(recv_channel_id, | 201 audio_net_config.loss_percent = 5; |
| 227 recv_transport_adapter)); | 202 test::PacketTransport audio_send_transport(sender_call_.get(), &observer, |
| 203 test::PacketTransport::kSender, | |
| 204 audio_net_config); | |
| 205 MediaTypePacketReceiver audio_receiver(receiver_call_->Receiver(), | |
| 206 MediaType::AUDIO); | |
| 207 audio_send_transport.SetReceiver(&audio_receiver); | |
| 228 | 208 |
| 229 test::PacketTransport sync_send_transport(sender_call_.get(), &observer, | 209 test::PacketTransport video_send_transport(sender_call_.get(), &observer, |
| 230 test::PacketTransport::kSender, | 210 test::PacketTransport::kSender, |
| 231 FakeNetworkPipe::Config()); | 211 FakeNetworkPipe::Config()); |
| 232 sync_send_transport.SetReceiver(receiver_call_->Receiver()); | 212 MediaTypePacketReceiver video_receiver(receiver_call_->Receiver(), |
| 233 test::PacketTransport sync_receive_transport(receiver_call_.get(), &observer, | 213 MediaType::VIDEO); |
| 234 test::PacketTransport::kReceiver, | 214 video_send_transport.SetReceiver(&video_receiver); |
| 235 FakeNetworkPipe::Config()); | 215 |
| 236 sync_receive_transport.SetReceiver(sender_call_->Receiver()); | 216 test::PacketTransport receive_transport( |
| 217 receiver_call_.get(), &observer, test::PacketTransport::kReceiver, | |
| 218 FakeNetworkPipe::Config()); | |
| 219 receive_transport.SetReceiver(sender_call_->Receiver()); | |
| 237 | 220 |
| 238 test::FakeDecoder fake_decoder; | 221 test::FakeDecoder fake_decoder; |
| 239 | 222 |
| 240 CreateSendConfig(1, 0, &sync_send_transport); | 223 CreateSendConfig(1, 0, &video_send_transport); |
| 241 CreateMatchingReceiveConfigs(&sync_receive_transport); | 224 CreateMatchingReceiveConfigs(&receive_transport); |
| 242 | 225 |
| 243 AudioSendStream::Config audio_send_config(&audio_send_transport); | 226 AudioSendStream::Config audio_send_config(&audio_send_transport); |
|
stefan-webrtc
2016/04/22 09:16:19
I'm not sure this actually works in practice. All
mflodman
2016/04/22 09:41:48
If that is the case, our API is wrong if we can se
stefan-webrtc
2016/04/22 10:35:04
You're right, it does go over separate transports,
| |
| 244 audio_send_config.voe_channel_id = send_channel_id; | 227 audio_send_config.voe_channel_id = send_channel_id; |
| 245 audio_send_config.rtp.ssrc = kAudioSendSsrc; | 228 audio_send_config.rtp.ssrc = kAudioSendSsrc; |
| 246 AudioSendStream* audio_send_stream = | 229 AudioSendStream* audio_send_stream = |
| 247 sender_call_->CreateAudioSendStream(audio_send_config); | 230 sender_call_->CreateAudioSendStream(audio_send_config); |
| 248 | 231 |
| 249 CodecInst isac = {103, "ISAC", 16000, 480, 1, 32000}; | 232 CodecInst isac = {103, "ISAC", 16000, 480, 1, 32000}; |
| 250 EXPECT_EQ(0, voe_codec->SetSendCodec(send_channel_id, isac)); | 233 EXPECT_EQ(0, voe_codec->SetSendCodec(send_channel_id, isac)); |
| 251 | 234 |
| 252 video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 235 video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 253 if (fec == FecMode::kOn) { | 236 if (fec == FecMode::kOn) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 291 | 274 |
| 292 EXPECT_TRUE(observer.Wait()) | 275 EXPECT_TRUE(observer.Wait()) |
| 293 << "Timed out while waiting for audio and video to be synchronized."; | 276 << "Timed out while waiting for audio and video to be synchronized."; |
| 294 | 277 |
| 295 EXPECT_EQ(0, voe_base->StopSend(send_channel_id)); | 278 EXPECT_EQ(0, voe_base->StopSend(send_channel_id)); |
| 296 EXPECT_EQ(0, voe_base->StopReceive(recv_channel_id)); | 279 EXPECT_EQ(0, voe_base->StopReceive(recv_channel_id)); |
| 297 EXPECT_EQ(0, voe_base->StopPlayout(recv_channel_id)); | 280 EXPECT_EQ(0, voe_base->StopPlayout(recv_channel_id)); |
| 298 fake_audio_device.Stop(); | 281 fake_audio_device.Stop(); |
| 299 | 282 |
| 300 Stop(); | 283 Stop(); |
| 301 sync_send_transport.StopSending(); | 284 video_send_transport.StopSending(); |
| 302 sync_receive_transport.StopSending(); | |
| 303 audio_send_transport.StopSending(); | 285 audio_send_transport.StopSending(); |
| 304 audio_receive_transport.StopSending(); | 286 receive_transport.StopSending(); |
| 305 | 287 |
| 306 DestroyStreams(); | 288 DestroyStreams(); |
| 307 | 289 |
| 308 sender_call_->DestroyAudioSendStream(audio_send_stream); | 290 sender_call_->DestroyAudioSendStream(audio_send_stream); |
| 309 receiver_call_->DestroyAudioReceiveStream(audio_receive_stream); | 291 receiver_call_->DestroyAudioReceiveStream(audio_receive_stream); |
| 310 | 292 |
| 311 voe_base->DeleteChannel(send_channel_id); | 293 voe_base->DeleteChannel(send_channel_id); |
| 312 voe_base->DeleteChannel(recv_channel_id); | 294 voe_base->DeleteChannel(recv_channel_id); |
| 313 voe_base->Release(); | 295 voe_base->Release(); |
| 314 voe_codec->Release(); | 296 voe_codec->Release(); |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 711 int encoder_inits_; | 693 int encoder_inits_; |
| 712 uint32_t last_set_bitrate_; | 694 uint32_t last_set_bitrate_; |
| 713 VideoSendStream* send_stream_; | 695 VideoSendStream* send_stream_; |
| 714 VideoEncoderConfig encoder_config_; | 696 VideoEncoderConfig encoder_config_; |
| 715 } test; | 697 } test; |
| 716 | 698 |
| 717 RunBaseTest(&test); | 699 RunBaseTest(&test); |
| 718 } | 700 } |
| 719 | 701 |
| 720 } // namespace webrtc | 702 } // namespace webrtc |
| OLD | NEW |