| Index: webrtc/call/call_perf_tests.cc
|
| diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc
|
| index 44ecae325ef884d1ca65b94a319c6a8ab2df8aab..caa548227321c0aa6133341686e3be89a6d4891b 100644
|
| --- a/webrtc/call/call_perf_tests.cc
|
| +++ b/webrtc/call/call_perf_tests.cc
|
| @@ -18,6 +18,8 @@
|
| #include "webrtc/base/thread_annotations.h"
|
| #include "webrtc/call.h"
|
| #include "webrtc/call/transport_adapter.h"
|
| +#include "webrtc/common.h"
|
| +#include "webrtc/config.h"
|
| #include "webrtc/modules/audio_coding/include/audio_coding_module.h"
|
| #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
|
| #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
| @@ -189,6 +191,8 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer {
|
|
|
| void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| const char* kSyncGroup = "av_sync";
|
| + const uint32_t kAudioSendSsrc = 1234;
|
| + const uint32_t kAudioRecvSsrc = 5678;
|
| class AudioPacketReceiver : public PacketReceiver {
|
| public:
|
| AudioPacketReceiver(int channel, VoENetwork* voe_network)
|
| @@ -228,37 +232,45 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| test::FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(),
|
| audio_filename);
|
| EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr));
|
| - int channel = voe_base->CreateChannel();
|
| + Config voe_config;
|
| + voe_config.Set<VoicePacing>(new VoicePacing(true));
|
| + int send_channel_id = voe_base->CreateChannel(voe_config);
|
| + int recv_channel_id = voe_base->CreateChannel();
|
|
|
| SyncRtcpObserver audio_observer;
|
|
|
| - AudioState::Config audio_state_config;
|
| - audio_state_config.voice_engine = voice_engine;
|
| + AudioState::Config send_audio_state_config;
|
| + send_audio_state_config.voice_engine = voice_engine;
|
| + Call::Config sender_config;
|
| + sender_config.audio_state = AudioState::Create(send_audio_state_config);
|
| Call::Config receiver_config;
|
| - receiver_config.audio_state = AudioState::Create(audio_state_config);
|
| - CreateCalls(Call::Config(), receiver_config);
|
| + receiver_config.audio_state = sender_config.audio_state;
|
| + CreateCalls(sender_config, receiver_config);
|
|
|
| - CodecInst isac = {103, "ISAC", 16000, 480, 1, 32000};
|
| - EXPECT_EQ(0, voe_codec->SetSendCodec(channel, isac));
|
| -
|
| - AudioPacketReceiver voe_packet_receiver(channel, voe_network);
|
| + AudioPacketReceiver voe_send_packet_receiver(send_channel_id, voe_network);
|
| + AudioPacketReceiver voe_recv_packet_receiver(recv_channel_id, voe_network);
|
|
|
| FakeNetworkPipe::Config net_config;
|
| net_config.queue_delay_ms = 500;
|
| net_config.loss_percent = 5;
|
| test::PacketTransport audio_send_transport(
|
| nullptr, &audio_observer, test::PacketTransport::kSender, net_config);
|
| - audio_send_transport.SetReceiver(&voe_packet_receiver);
|
| + audio_send_transport.SetReceiver(&voe_recv_packet_receiver);
|
| test::PacketTransport audio_receive_transport(
|
| nullptr, &audio_observer, test::PacketTransport::kReceiver, net_config);
|
| - audio_receive_transport.SetReceiver(&voe_packet_receiver);
|
| + audio_receive_transport.SetReceiver(&voe_send_packet_receiver);
|
|
|
| - internal::TransportAdapter transport_adapter(&audio_send_transport);
|
| - transport_adapter.Enable();
|
| - EXPECT_EQ(0,
|
| - voe_network->RegisterExternalTransport(channel, transport_adapter));
|
| + internal::TransportAdapter send_transport_adapter(&audio_send_transport);
|
| + send_transport_adapter.Enable();
|
| + EXPECT_EQ(0, voe_network->RegisterExternalTransport(send_channel_id,
|
| + send_transport_adapter));
|
|
|
| - VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(), channel,
|
| + internal::TransportAdapter recv_transport_adapter(&audio_receive_transport);
|
| + recv_transport_adapter.Enable();
|
| + EXPECT_EQ(0, voe_network->RegisterExternalTransport(recv_channel_id,
|
| + recv_transport_adapter));
|
| +
|
| + VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(), recv_channel_id,
|
| voe_sync, &audio_observer);
|
|
|
| test::PacketTransport sync_send_transport(sender_call_.get(), &observer,
|
| @@ -275,6 +287,15 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| CreateSendConfig(1, &sync_send_transport);
|
| CreateMatchingReceiveConfigs(&sync_receive_transport);
|
|
|
| + AudioSendStream::Config audio_send_config(&audio_send_transport);
|
| + audio_send_config.voe_channel_id = send_channel_id;
|
| + audio_send_config.rtp.ssrc = kAudioSendSsrc;
|
| + AudioSendStream* audio_send_stream =
|
| + sender_call_->CreateAudioSendStream(audio_send_config);
|
| +
|
| + CodecInst isac = {103, "ISAC", 16000, 480, 1, 32000};
|
| + EXPECT_EQ(0, voe_codec->SetSendCodec(send_channel_id, isac));
|
| +
|
| send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
| if (fec) {
|
| send_config_.rtp.fec.red_payload_type = kRedPayloadType;
|
| @@ -286,20 +307,22 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| receive_configs_[0].renderer = &observer;
|
| receive_configs_[0].sync_group = kSyncGroup;
|
|
|
| - AudioReceiveStream::Config audio_config;
|
| - audio_config.voe_channel_id = channel;
|
| - audio_config.sync_group = kSyncGroup;
|
| + AudioReceiveStream::Config audio_recv_config;
|
| + audio_recv_config.rtp.remote_ssrc = kAudioSendSsrc;
|
| + audio_recv_config.rtp.local_ssrc = kAudioRecvSsrc;
|
| + audio_recv_config.voe_channel_id = recv_channel_id;
|
| + audio_recv_config.sync_group = kSyncGroup;
|
|
|
| - AudioReceiveStream* audio_receive_stream = nullptr;
|
| + AudioReceiveStream* audio_receive_stream;
|
|
|
| if (create_audio_first) {
|
| audio_receive_stream =
|
| - receiver_call_->CreateAudioReceiveStream(audio_config);
|
| + receiver_call_->CreateAudioReceiveStream(audio_recv_config);
|
| CreateStreams();
|
| } else {
|
| CreateStreams();
|
| audio_receive_stream =
|
| - receiver_call_->CreateAudioReceiveStream(audio_config);
|
| + receiver_call_->CreateAudioReceiveStream(audio_recv_config);
|
| }
|
|
|
| CreateFrameGeneratorCapturer();
|
| @@ -307,16 +330,16 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| Start();
|
|
|
| fake_audio_device.Start();
|
| - EXPECT_EQ(0, voe_base->StartPlayout(channel));
|
| - EXPECT_EQ(0, voe_base->StartReceive(channel));
|
| - EXPECT_EQ(0, voe_base->StartSend(channel));
|
| + EXPECT_EQ(0, voe_base->StartPlayout(recv_channel_id));
|
| + EXPECT_EQ(0, voe_base->StartReceive(recv_channel_id));
|
| + EXPECT_EQ(0, voe_base->StartSend(send_channel_id));
|
|
|
| EXPECT_EQ(kEventSignaled, observer.Wait())
|
| << "Timed out while waiting for audio and video to be synchronized.";
|
|
|
| - EXPECT_EQ(0, voe_base->StopSend(channel));
|
| - EXPECT_EQ(0, voe_base->StopReceive(channel));
|
| - EXPECT_EQ(0, voe_base->StopPlayout(channel));
|
| + EXPECT_EQ(0, voe_base->StopSend(send_channel_id));
|
| + EXPECT_EQ(0, voe_base->StopReceive(recv_channel_id));
|
| + EXPECT_EQ(0, voe_base->StopPlayout(recv_channel_id));
|
| fake_audio_device.Stop();
|
|
|
| Stop();
|
| @@ -325,16 +348,18 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
|
| audio_send_transport.StopSending();
|
| audio_receive_transport.StopSending();
|
|
|
| - voe_base->DeleteChannel(channel);
|
| + DestroyStreams();
|
| +
|
| + sender_call_->DestroyAudioSendStream(audio_send_stream);
|
| + receiver_call_->DestroyAudioReceiveStream(audio_receive_stream);
|
| +
|
| + voe_base->DeleteChannel(send_channel_id);
|
| + voe_base->DeleteChannel(recv_channel_id);
|
| voe_base->Release();
|
| voe_codec->Release();
|
| voe_network->Release();
|
| voe_sync->Release();
|
|
|
| - DestroyStreams();
|
| -
|
| - receiver_call_->DestroyAudioReceiveStream(audio_receive_stream);
|
| -
|
| DestroyCalls();
|
|
|
| VoiceEngine::Delete(voice_engine);
|
|
|