Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc

Issue 3008273002: Replace voe_conference_test. (Closed)
Patch Set: rebase Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc
diff --git a/webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc b/webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc
deleted file mode 100644
index 305b236b6ddfb428e582f3e8ac387746d63b054a..0000000000000000000000000000000000000000
--- a/webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/voice_engine/test/auto_test/fakes/conference_transport.h"
-
-#include <string>
-
-#include "webrtc/rtc_base/byteorder.h"
-#include "webrtc/rtc_base/timeutils.h"
-#include "webrtc/system_wrappers/include/sleep.h"
-#include "webrtc/voice_engine/channel_proxy.h"
-#include "webrtc/voice_engine/voice_engine_impl.h"
-
-namespace webrtc {
-namespace voetest {
-
-namespace {
-
-static const unsigned int kReflectorSsrc = 0x0000;
-static const unsigned int kLocalSsrc = 0x0001;
-static const unsigned int kFirstRemoteSsrc = 0x0002;
-static const webrtc::CodecInst kCodecInst = {120, "opus", 48000, 960, 2, 64000};
-static const int kAudioLevelHeaderId = 1;
-
-static unsigned int ParseRtcpSsrc(const void* data, size_t len) {
- const size_t ssrc_pos = 4;
- unsigned int ssrc = 0;
- if (len >= (ssrc_pos + sizeof(ssrc))) {
- ssrc = rtc::GetBE32(static_cast<const char*>(data) + ssrc_pos);
- }
- return ssrc;
-}
-
-} // namespace
-
-ConferenceTransport::ConferenceTransport()
- : packet_event_(webrtc::EventWrapper::Create()),
- thread_(Run, this, "ConferenceTransport"),
- rtt_ms_(0),
- stream_count_(0),
- rtp_header_parser_(webrtc::RtpHeaderParser::Create()) {
- rtp_header_parser_->
- RegisterRtpHeaderExtension(webrtc::kRtpExtensionAudioLevel,
- kAudioLevelHeaderId);
-
- local_voe_ = webrtc::VoiceEngine::Create();
- local_base_ = webrtc::VoEBase::GetInterface(local_voe_);
- local_network_ = webrtc::VoENetwork::GetInterface(local_voe_);
- local_rtp_rtcp_ = webrtc::VoERTP_RTCP::GetInterface(local_voe_);
-
- local_apm_ = webrtc::AudioProcessing::Create();
- local_base_->Init(nullptr, local_apm_.get(), nullptr);
-
- // In principle, we can use one VoiceEngine to achieve the same goal. Well, in
- // here, we use two engines to make it more like reality.
- remote_voe_ = webrtc::VoiceEngine::Create();
- remote_base_ = webrtc::VoEBase::GetInterface(remote_voe_);
- remote_codec_ = webrtc::VoECodec::GetInterface(remote_voe_);
- remote_network_ = webrtc::VoENetwork::GetInterface(remote_voe_);
- remote_rtp_rtcp_ = webrtc::VoERTP_RTCP::GetInterface(remote_voe_);
- remote_file_ = webrtc::VoEFile::GetInterface(remote_voe_);
-
- remote_apm_ = webrtc::AudioProcessing::Create();
- remote_base_->Init(nullptr, remote_apm_.get(), nullptr);
-
- local_sender_ = local_base_->CreateChannel();
- static_cast<webrtc::VoiceEngineImpl*>(local_voe_)
- ->GetChannelProxy(local_sender_)
- ->RegisterLegacyReceiveCodecs();
- EXPECT_EQ(0, local_network_->RegisterExternalTransport(local_sender_, *this));
- EXPECT_EQ(0, local_rtp_rtcp_->SetLocalSSRC(local_sender_, kLocalSsrc));
- EXPECT_EQ(0, local_rtp_rtcp_->
- SetSendAudioLevelIndicationStatus(local_sender_, true,
- kAudioLevelHeaderId));
- EXPECT_EQ(0, local_base_->StartSend(local_sender_));
-
- reflector_ = remote_base_->CreateChannel();
- static_cast<webrtc::VoiceEngineImpl*>(remote_voe_)
- ->GetChannelProxy(reflector_)
- ->RegisterLegacyReceiveCodecs();
- EXPECT_EQ(0, remote_network_->RegisterExternalTransport(reflector_, *this));
- EXPECT_EQ(0, remote_rtp_rtcp_->SetLocalSSRC(reflector_, kReflectorSsrc));
-
- thread_.Start();
- thread_.SetPriority(rtc::kHighPriority);
-}
-
-ConferenceTransport::~ConferenceTransport() {
- // Must stop sending, otherwise DispatchPackets() cannot quit.
- EXPECT_EQ(0, remote_network_->DeRegisterExternalTransport(reflector_));
- EXPECT_EQ(0, local_network_->DeRegisterExternalTransport(local_sender_));
-
- while (!streams_.empty()) {
- auto stream = streams_.begin();
- RemoveStream(stream->first);
- }
-
- thread_.Stop();
-
- remote_file_->Release();
- remote_rtp_rtcp_->Release();
- remote_network_->Release();
- remote_base_->Release();
-
- local_rtp_rtcp_->Release();
- local_network_->Release();
- local_base_->Release();
-
- EXPECT_TRUE(webrtc::VoiceEngine::Delete(remote_voe_));
- EXPECT_TRUE(webrtc::VoiceEngine::Delete(local_voe_));
-}
-
-bool ConferenceTransport::SendRtp(const uint8_t* data,
- size_t len,
- const webrtc::PacketOptions& options) {
- StorePacket(Packet::Rtp, data, len);
- return true;
-}
-
-bool ConferenceTransport::SendRtcp(const uint8_t* data, size_t len) {
- StorePacket(Packet::Rtcp, data, len);
- return true;
-}
-
-int ConferenceTransport::GetReceiverChannelForSsrc(unsigned int sender_ssrc)
- const {
- rtc::CritScope lock(&stream_crit_);
- auto it = streams_.find(sender_ssrc);
- if (it != streams_.end()) {
- return it->second.second;
- }
- return -1;
-}
-
-void ConferenceTransport::StorePacket(Packet::Type type,
- const void* data,
- size_t len) {
- {
- rtc::CritScope lock(&pq_crit_);
- packet_queue_.push_back(Packet(type, data, len, rtc::TimeMillis()));
- }
- packet_event_->Set();
-}
-
-// This simulates the flow of RTP and RTCP packets. Complications like that
-// a packet is first sent to the reflector, and then forwarded to the receiver
-// are simplified, in this particular case, to a direct link between the sender
-// and the receiver.
-void ConferenceTransport::SendPacket(const Packet& packet) {
- int destination = -1;
-
- switch (packet.type_) {
- case Packet::Rtp: {
- webrtc::RTPHeader rtp_header;
- rtp_header_parser_->Parse(packet.data_, packet.len_, &rtp_header);
- if (rtp_header.ssrc == kLocalSsrc) {
- remote_network_->ReceivedRTPPacket(reflector_, packet.data_,
- packet.len_, webrtc::PacketTime());
- } else {
- if (loudest_filter_.ForwardThisPacket(rtp_header)) {
- destination = GetReceiverChannelForSsrc(rtp_header.ssrc);
- if (destination != -1) {
- local_network_->ReceivedRTPPacket(destination, packet.data_,
- packet.len_,
- webrtc::PacketTime());
- }
- }
- }
- break;
- }
- case Packet::Rtcp: {
- unsigned int sender_ssrc = ParseRtcpSsrc(packet.data_, packet.len_);
- if (sender_ssrc == kLocalSsrc) {
- remote_network_->ReceivedRTCPPacket(reflector_, packet.data_,
- packet.len_);
- } else if (sender_ssrc == kReflectorSsrc) {
- local_network_->ReceivedRTCPPacket(local_sender_, packet.data_,
- packet.len_);
- } else {
- destination = GetReceiverChannelForSsrc(sender_ssrc);
- if (destination != -1) {
- local_network_->ReceivedRTCPPacket(destination, packet.data_,
- packet.len_);
- }
- }
- break;
- }
- }
-}
-
-bool ConferenceTransport::DispatchPackets() {
- switch (packet_event_->Wait(1000)) {
- case webrtc::kEventSignaled:
- break;
- case webrtc::kEventTimeout:
- return true;
- case webrtc::kEventError:
- ADD_FAILURE() << "kEventError encountered.";
- return true;
- }
-
- while (true) {
- Packet packet;
- {
- rtc::CritScope lock(&pq_crit_);
- if (packet_queue_.empty())
- break;
- packet = packet_queue_.front();
- packet_queue_.pop_front();
- }
-
- int32_t elapsed_time_ms = rtc::TimeSince(packet.send_time_ms_);
- int32_t sleep_ms = rtt_ms_ / 2 - elapsed_time_ms;
- if (sleep_ms > 0) {
- // Every packet should be delayed by half of RTT.
- webrtc::SleepMs(sleep_ms);
- }
-
- SendPacket(packet);
- }
- return true;
-}
-
-void ConferenceTransport::SetRtt(unsigned int rtt_ms) {
- rtt_ms_ = rtt_ms;
-}
-
-unsigned int ConferenceTransport::AddStream(std::string file_name,
- webrtc::FileFormats format) {
- const int new_sender = remote_base_->CreateChannel();
- static_cast<webrtc::VoiceEngineImpl*>(remote_voe_)
- ->GetChannelProxy(new_sender)
- ->RegisterLegacyReceiveCodecs();
- EXPECT_EQ(0, remote_network_->RegisterExternalTransport(new_sender, *this));
-
- const unsigned int remote_ssrc = kFirstRemoteSsrc + stream_count_++;
- EXPECT_EQ(0, remote_rtp_rtcp_->SetLocalSSRC(new_sender, remote_ssrc));
- EXPECT_EQ(0, remote_rtp_rtcp_->
- SetSendAudioLevelIndicationStatus(new_sender, true, kAudioLevelHeaderId));
-
- EXPECT_EQ(0, remote_codec_->SetSendCodec(new_sender, kCodecInst));
- EXPECT_EQ(0, remote_base_->StartSend(new_sender));
- EXPECT_EQ(0, remote_file_->StartPlayingFileAsMicrophone(
- new_sender, file_name.c_str(), true, false, format, 1.0));
-
- const int new_receiver = local_base_->CreateChannel();
- static_cast<webrtc::VoiceEngineImpl*>(local_voe_)
- ->GetChannelProxy(new_receiver)
- ->RegisterLegacyReceiveCodecs();
- EXPECT_EQ(0, local_base_->AssociateSendChannel(new_receiver, local_sender_));
-
- EXPECT_EQ(0, local_network_->RegisterExternalTransport(new_receiver, *this));
- // Receive channels have to have the same SSRC in order to send receiver
- // reports with this SSRC.
- EXPECT_EQ(0, local_rtp_rtcp_->SetLocalSSRC(new_receiver, kLocalSsrc));
-
- {
- rtc::CritScope lock(&stream_crit_);
- streams_[remote_ssrc] = std::make_pair(new_sender, new_receiver);
- }
- return remote_ssrc; // remote ssrc used as stream id.
-}
-
-bool ConferenceTransport::RemoveStream(unsigned int id) {
- rtc::CritScope lock(&stream_crit_);
- auto it = streams_.find(id);
- if (it == streams_.end()) {
- return false;
- }
- EXPECT_EQ(0, remote_network_->
- DeRegisterExternalTransport(it->second.second));
- EXPECT_EQ(0, local_network_->
- DeRegisterExternalTransport(it->second.first));
- EXPECT_EQ(0, remote_base_->DeleteChannel(it->second.second));
- EXPECT_EQ(0, local_base_->DeleteChannel(it->second.first));
- streams_.erase(it);
- return true;
-}
-
-bool ConferenceTransport::StartPlayout(unsigned int id) {
- int dst = GetReceiverChannelForSsrc(id);
- if (dst == -1) {
- return false;
- }
- EXPECT_EQ(0, local_base_->StartPlayout(dst));
- return true;
-}
-
-bool ConferenceTransport::GetReceiverStatistics(unsigned int id,
- webrtc::CallStatistics* stats) {
- int dst = GetReceiverChannelForSsrc(id);
- if (dst == -1) {
- return false;
- }
- EXPECT_EQ(0, local_rtp_rtcp_->GetRTCPStatistics(dst, *stats));
- return true;
-}
-
-} // namespace voetest
-} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698