| 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
|
| index d0fd8a37af9ea3a681539642b482fc900a73490c..ef245e9836436e96d9fdba88bdbc414c2899d3af 100644
|
| --- a/webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc
|
| +++ b/webrtc/voice_engine/test/auto_test/fakes/conference_transport.cc
|
| @@ -14,7 +14,6 @@
|
|
|
| #include "webrtc/base/byteorder.h"
|
| #include "webrtc/base/timeutils.h"
|
| -#include "webrtc/test/testsupport/fileutils.h"
|
| #include "webrtc/system_wrappers/interface/sleep.h"
|
|
|
| namespace {
|
| @@ -23,9 +22,10 @@ namespace {
|
| 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 ParseSsrc(const void* data, size_t len, bool rtcp) {
|
| - const size_t ssrc_pos = (!rtcp) ? 8 : 4;
|
| + 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);
|
| @@ -44,7 +44,12 @@ ConferenceTransport::ConferenceTransport()
|
| this,
|
| "ConferenceTransport")),
|
| rtt_ms_(0),
|
| - stream_count_(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_);
|
| @@ -63,6 +68,10 @@ ConferenceTransport::ConferenceTransport()
|
| local_sender_ = local_base_->CreateChannel();
|
| 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_));
|
|
|
| EXPECT_EQ(0, remote_base_->Init());
|
| @@ -133,26 +142,30 @@ void ConferenceTransport::StorePacket(Packet::Type type, int channel,
|
| // 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) const {
|
| - unsigned int sender_ssrc;
|
| +void ConferenceTransport::SendPacket(const Packet& packet) {
|
| int destination = -1;
|
| +
|
| switch (packet.type_) {
|
| - case Packet::Rtp:
|
| - sender_ssrc = ParseSsrc(packet.data_, packet.len_, false);
|
| - if (sender_ssrc == kLocalSsrc) {
|
| + 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 {
|
| - destination = GetReceiverChannelForSsrc(sender_ssrc);
|
| - if (destination != -1) {
|
| - local_network_->ReceivedRTPPacket(destination, packet.data_,
|
| - packet.len_,
|
| - webrtc::PacketTime());
|
| + 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:
|
| - sender_ssrc = ParseSsrc(packet.data_, packet.len_, true);
|
| + }
|
| + case Packet::Rtcp: {
|
| + unsigned int sender_ssrc = ParseRtcpSsrc(packet.data_, packet.len_);
|
| if (sender_ssrc == kLocalSsrc) {
|
| remote_network_->ReceivedRTCPPacket(reflector_, packet.data_,
|
| packet.len_);
|
| @@ -167,6 +180,7 @@ void ConferenceTransport::SendPacket(const Packet& packet) const {
|
| }
|
| }
|
| break;
|
| + }
|
| }
|
| }
|
|
|
| @@ -207,21 +221,20 @@ void ConferenceTransport::SetRtt(unsigned int rtt_ms) {
|
| rtt_ms_ = rtt_ms;
|
| }
|
|
|
| -unsigned int ConferenceTransport::AddStream() {
|
| - const std::string kInputFileName =
|
| - webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm");
|
| -
|
| +unsigned int ConferenceTransport::AddStream(std::string file_name,
|
| + webrtc::FileFormats format) {
|
| const int new_sender = remote_base_->CreateChannel();
|
| 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, kInputFileName.c_str(), true, false,
|
| - webrtc::kFileFormatPcm32kHzFile, 1.0));
|
| + new_sender, file_name.c_str(), true, false, format, 1.0));
|
|
|
| const int new_receiver = local_base_->CreateChannel();
|
| EXPECT_EQ(0, local_base_->AssociateSendChannel(new_receiver, local_sender_));
|
|
|