diff --git a/webrtc/audio/test/low_bandwidth_audio_test.cc b/webrtc/audio/test/low_bandwidth_audio_test.cc index c1b1a02235..50d7e674e8 100644 --- a/webrtc/audio/test/low_bandwidth_audio_test.cc +++ b/webrtc/audio/test/low_bandwidth_audio_test.cc @@ -80,12 +80,14 @@ test::PacketTransport* AudioQualityTest::CreateSendTransport( Call* sender_call) { return new test::PacketTransport( sender_call, this, test::PacketTransport::kSender, + MediaType::AUDIO, GetNetworkPipeConfig()); } test::PacketTransport* AudioQualityTest::CreateReceiveTransport() { return new test::PacketTransport(nullptr, this, - test::PacketTransport::kReceiver, GetNetworkPipeConfig()); + test::PacketTransport::kReceiver, MediaType::AUDIO, + GetNetworkPipeConfig()); } void AudioQualityTest::ModifyAudioConfigs( diff --git a/webrtc/call/bitrate_estimator_tests.cc b/webrtc/call/bitrate_estimator_tests.cc index bb4960f658..00a3b9e833 100644 --- a/webrtc/call/bitrate_estimator_tests.cc +++ b/webrtc/call/bitrate_estimator_tests.cc @@ -108,9 +108,11 @@ class BitrateEstimatorTest : public test::CallTest { receiver_call_.reset(Call::Create(config)); sender_call_.reset(Call::Create(config)); - send_transport_.reset(new test::DirectTransport(sender_call_.get())); + send_transport_.reset( + new test::DirectTransport(sender_call_.get(), MediaType::VIDEO)); send_transport_->SetReceiver(receiver_call_->Receiver()); - receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); + receive_transport_.reset( + new test::DirectTransport(receiver_call_.get(), MediaType::VIDEO)); receive_transport_->SetReceiver(sender_call_->Receiver()); video_send_config_ = VideoSendStream::Config(send_transport_.get()); diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc index 94acc9ff9d..396d3c9e0a 100644 --- a/webrtc/call/call.cc +++ b/webrtc/call/call.cc @@ -1221,6 +1221,8 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, const PacketTime& packet_time) { TRACE_EVENT0("webrtc", "Call::DeliverRtp"); + RTC_DCHECK(media_type == MediaType::AUDIO || media_type == MediaType::VIDEO); + ReadLockScoped read_lock(*receive_crit_); // TODO(nisse): We should parse the RTP header only here, and pass // on parsed_packet to the receive streams. @@ -1234,7 +1236,7 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, uint32_t ssrc = parsed_packet->Ssrc(); - if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) { + if (media_type == MediaType::AUDIO) { auto it = audio_receive_ssrcs_.find(ssrc); if (it != audio_receive_ssrcs_.end()) { received_bytes_per_second_counter_.Add(static_cast(length)); @@ -1244,7 +1246,7 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, return DELIVERY_OK; } } - if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { + if (media_type == MediaType::VIDEO) { auto it = video_receive_ssrcs_.find(ssrc); if (it != video_receive_ssrcs_.end()) { received_bytes_per_second_counter_.Add(static_cast(length)); @@ -1260,7 +1262,7 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, return DELIVERY_OK; } } - if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { + if (media_type == MediaType::VIDEO) { received_bytes_per_second_counter_.Add(static_cast(length)); // TODO(brandtr): Update here when FlexFEC supports protecting audio. received_video_bytes_per_second_counter_.Add(static_cast(length)); @@ -1320,10 +1322,7 @@ void Call::NotifyBweOfReceivedPacket(const RtpPacketReceived& packet, return; } // For audio, we only support send side BWE. - // TODO(nisse): Tests passes MediaType::ANY, see - // FakeNetworkPipe::Process. We need to treat that as video. Tests - // should be fixed to use the same MediaType as the production code. - if (media_type != MediaType::AUDIO || + if (media_type == MediaType::VIDEO || (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { receive_side_cc_.OnReceivedPacket( packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc index bd5ab0ff25..d62bec1490 100644 --- a/webrtc/call/call_perf_tests.cc +++ b/webrtc/call/call_perf_tests.cc @@ -193,6 +193,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, audio_net_config.loss_percent = 5; test::PacketTransport audio_send_transport(sender_call_.get(), &observer, test::PacketTransport::kSender, + MediaType::AUDIO, audio_net_config); MediaTypePacketReceiver audio_receiver(receiver_call_->Receiver(), MediaType::AUDIO); @@ -200,6 +201,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, test::PacketTransport video_send_transport(sender_call_.get(), &observer, test::PacketTransport::kSender, + MediaType::VIDEO, FakeNetworkPipe::Config()); MediaTypePacketReceiver video_receiver(receiver_call_->Receiver(), MediaType::VIDEO); @@ -207,6 +209,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, test::PacketTransport receive_transport( receiver_call_.get(), &observer, test::PacketTransport::kReceiver, + MediaType::VIDEO, FakeNetworkPipe::Config()); receive_transport.SetReceiver(sender_call_->Receiver()); @@ -343,12 +346,14 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, private: test::PacketTransport* CreateSendTransport(Call* sender_call) override { return new test::PacketTransport( - sender_call, this, test::PacketTransport::kSender, net_config_); + sender_call, this, test::PacketTransport::kSender, MediaType::VIDEO, + net_config_); } test::PacketTransport* CreateReceiveTransport() override { return new test::PacketTransport( - nullptr, this, test::PacketTransport::kReceiver, net_config_); + nullptr, this, test::PacketTransport::kReceiver, MediaType::VIDEO, + net_config_); } void OnFrame(const VideoFrame& video_frame) override { diff --git a/webrtc/call/rampup_tests.cc b/webrtc/call/rampup_tests.cc index 292edc6083..0a2a7384d8 100644 --- a/webrtc/call/rampup_tests.cc +++ b/webrtc/call/rampup_tests.cc @@ -89,13 +89,34 @@ void RampUpTester::OnVideoStreamsCreated( send_stream_ = send_stream; } +MediaType RampUpTester::SelectMediaType() { + if (num_video_streams_ > 0) { + if (num_audio_streams_ > 0) { + // Rely on call to set media type from payload type. + return MediaType::ANY; + } else { + return MediaType::VIDEO; + } + } else { + return MediaType::AUDIO; + } +} + test::PacketTransport* RampUpTester::CreateSendTransport(Call* sender_call) { send_transport_ = new test::PacketTransport(sender_call, this, test::PacketTransport::kSender, + SelectMediaType(), forward_transport_config_); return send_transport_; } +test::PacketTransport* RampUpTester::CreateReceiveTransport() { + return new test::PacketTransport(nullptr, this, + test::PacketTransport::kReceiver, + SelectMediaType(), + FakeNetworkPipe::Config()); +} + size_t RampUpTester::GetNumVideoStreams() const { return num_video_streams_; } diff --git a/webrtc/call/rampup_tests.h b/webrtc/call/rampup_tests.h index 6710dd12f8..5b24536aed 100644 --- a/webrtc/call/rampup_tests.h +++ b/webrtc/call/rampup_tests.h @@ -84,7 +84,9 @@ class RampUpTester : public test::EndToEndTest { void OnVideoStreamsCreated( VideoSendStream* send_stream, const std::vector& receive_streams) override; + MediaType SelectMediaType(); test::PacketTransport* CreateSendTransport(Call* sender_call) override; + test::PacketTransport* CreateReceiveTransport() override; void ModifyVideoConfigs( VideoSendStream::Config* send_config, std::vector* receive_configs, diff --git a/webrtc/media/engine/fakewebrtccall.cc b/webrtc/media/engine/fakewebrtccall.cc index 9a05ae67e4..f442a3cc61 100644 --- a/webrtc/media/engine/fakewebrtccall.cc +++ b/webrtc/media/engine/fakewebrtccall.cc @@ -520,19 +520,20 @@ FakeCall::DeliveryStatus FakeCall::DeliverPacket( size_t length, const webrtc::PacketTime& packet_time) { EXPECT_GE(length, 12u); + RTC_DCHECK(media_type == webrtc::MediaType::AUDIO || + media_type == webrtc::MediaType::VIDEO); + uint32_t ssrc; if (!GetRtpSsrc(packet, length, &ssrc)) return DELIVERY_PACKET_ERROR; - if (media_type == webrtc::MediaType::ANY || - media_type == webrtc::MediaType::VIDEO) { + if (media_type == webrtc::MediaType::VIDEO) { for (auto receiver : video_receive_streams_) { if (receiver->GetConfig().rtp.remote_ssrc == ssrc) return DELIVERY_OK; } } - if (media_type == webrtc::MediaType::ANY || - media_type == webrtc::MediaType::AUDIO) { + if (media_type == webrtc::MediaType::AUDIO) { for (auto receiver : audio_receive_streams_) { if (receiver->GetConfig().rtp.remote_ssrc == ssrc) { receiver->DeliverRtp(packet, length, packet_time); diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc index 3a13eeef86..75595ab011 100644 --- a/webrtc/test/call_test.cc +++ b/webrtc/test/call_test.cc @@ -26,6 +26,29 @@ namespace { const int kVideoRotationRtpExtensionId = 4; } +void CallTest::PayloadDemuxer::SetReceiver(PacketReceiver* receiver) { + receiver_ = receiver; +} + +PacketReceiver::DeliveryStatus CallTest::PayloadDemuxer::DeliverPacket( + MediaType media_type, + const uint8_t* packet, + size_t length, + const PacketTime& packet_time) { + if (media_type == MediaType::ANY) { + // This simplistic demux logic will not make much sense for RTCP + // packets, but it seems that doesn't matter. + RTC_CHECK_GE(length, 2); + uint8_t pt = packet[1] & 0x7f; + if (pt == kFakeVideoSendPayloadType || pt == kFlexfecPayloadType) { + media_type = MediaType::VIDEO; + } else { + media_type = MediaType::AUDIO; + } + } + return receiver_->DeliverPacket(media_type, packet, length, packet_time); +} + CallTest::CallTest() : clock_(Clock::GetRealTimeClock()), video_send_config_(nullptr), @@ -75,8 +98,20 @@ void CallTest::RunBaseTest(BaseTest* test) { send_transport_.reset(test->CreateSendTransport(sender_call_.get())); if (test->ShouldCreateReceivers()) { - send_transport_->SetReceiver(receiver_call_->Receiver()); - receive_transport_->SetReceiver(sender_call_->Receiver()); + // For tests using only video or only audio, we rely on each test + // configuring the underlying FakeNetworkPipe with the right media + // type. But for tests sending both video and audio over the same + // FakeNetworkPipe, we need to "demux", i.e., setting the + // MediaType based on RTP payload type. + if (num_video_streams_ > 0 && num_audio_streams_ > 0) { + receive_demuxer_.SetReceiver(receiver_call_->Receiver()); + send_transport_->SetReceiver(&receive_demuxer_); + send_demuxer_.SetReceiver(sender_call_->Receiver()); + receive_transport_->SetReceiver(&send_demuxer_); + } else { + send_transport_->SetReceiver(receiver_call_->Receiver()); + receive_transport_->SetReceiver(sender_call_->Receiver()); + } if (num_video_streams_ > 0) receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); if (num_audio_streams_ > 0) @@ -459,11 +494,13 @@ void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) { return new PacketTransport(sender_call, this, test::PacketTransport::kSender, + MediaType::VIDEO, FakeNetworkPipe::Config()); } test::PacketTransport* BaseTest::CreateReceiveTransport() { return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver, + MediaType::VIDEO, FakeNetworkPipe::Config()); } diff --git a/webrtc/test/call_test.h b/webrtc/test/call_test.h index 78fbbfbe43..b4f665821e 100644 --- a/webrtc/test/call_test.h +++ b/webrtc/test/call_test.h @@ -59,6 +59,23 @@ class CallTest : public ::testing::Test { static const int kNackRtpHistoryMs; protected: + // Needed for tests sending both audio and video on the same + // FakeNetworkPipe. We then need to set correct MediaType based on + // packet payload type, before passing the packet on to Call. + class PayloadDemuxer : public PacketReceiver { + public: + PayloadDemuxer() = default; + + void SetReceiver(PacketReceiver* receiver); + DeliveryStatus DeliverPacket(MediaType media_type, + const uint8_t* packet, + size_t length, + const PacketTime& packet_time) override; + + private: + PacketReceiver* receiver_ = nullptr; + }; + // RunBaseTest overwrites the audio_state and the voice_engine of the send and // receive Call configs to simplify test code and avoid having old VoiceEngine // APIs in the tests. @@ -124,6 +141,9 @@ class CallTest : public ::testing::Test { rtc::scoped_refptr decoder_factory_; test::FakeVideoRenderer fake_renderer_; + PayloadDemuxer receive_demuxer_; + PayloadDemuxer send_demuxer_; + private: // TODO(holmer): Remove once VoiceEngine is fully refactored to the new API. // These methods are used to set up legacy voice engines and channels which is @@ -172,6 +192,7 @@ class BaseTest : public RtpRtcpObserver { virtual Call::Config GetReceiverCallConfig(); virtual void OnCallsCreated(Call* sender_call, Call* receiver_call); + // The default implementation creates MediaType::VIDEO transports. virtual test::PacketTransport* CreateSendTransport(Call* sender_call); virtual test::PacketTransport* CreateReceiveTransport(); diff --git a/webrtc/test/direct_transport.cc b/webrtc/test/direct_transport.cc index 922874d111..90531eadfa 100644 --- a/webrtc/test/direct_transport.cc +++ b/webrtc/test/direct_transport.cc @@ -15,17 +15,17 @@ namespace webrtc { namespace test { -DirectTransport::DirectTransport(Call* send_call) - : DirectTransport(FakeNetworkPipe::Config(), send_call) {} +DirectTransport::DirectTransport(Call* send_call, MediaType media_type) + : DirectTransport(FakeNetworkPipe::Config(), send_call, media_type) {} DirectTransport::DirectTransport(const FakeNetworkPipe::Config& config, - Call* send_call) + Call* send_call, MediaType media_type) : send_call_(send_call), packet_event_(false, false), thread_(NetworkProcess, this, "NetworkProcess"), clock_(Clock::GetRealTimeClock()), shutting_down_(false), - fake_network_(clock_, config) { + fake_network_(clock_, config, media_type) { thread_.Start(); if (send_call_) { send_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); diff --git a/webrtc/test/direct_transport.h b/webrtc/test/direct_transport.h index eb552c57c8..20a6857182 100644 --- a/webrtc/test/direct_transport.h +++ b/webrtc/test/direct_transport.h @@ -18,11 +18,11 @@ #include "webrtc/base/criticalsection.h" #include "webrtc/base/event.h" #include "webrtc/base/platform_thread.h" +#include "webrtc/call/call.h" #include "webrtc/test/fake_network_pipe.h" namespace webrtc { -class Call; class Clock; class PacketReceiver; @@ -30,8 +30,17 @@ namespace test { class DirectTransport : public Transport { public: - explicit DirectTransport(Call* send_call); - DirectTransport(const FakeNetworkPipe::Config& config, Call* send_call); + DirectTransport(Call* send_call, MediaType media_type); + DirectTransport(const FakeNetworkPipe::Config& config, Call* send_call, + MediaType media_type); + // These deprecated variants always use MediaType::VIDEO. + RTC_DEPRECATED explicit DirectTransport(Call* send_call) + : DirectTransport(send_call, MediaType::VIDEO) {} + + RTC_DEPRECATED DirectTransport(const FakeNetworkPipe::Config& config, + Call* send_call) + : DirectTransport(config, send_call, MediaType::VIDEO) {} + ~DirectTransport(); void SetConfig(const FakeNetworkPipe::Config& config); diff --git a/webrtc/test/fake_network_pipe.cc b/webrtc/test/fake_network_pipe.cc index 8f2fee6c2c..103416779a 100644 --- a/webrtc/test/fake_network_pipe.cc +++ b/webrtc/test/fake_network_pipe.cc @@ -28,13 +28,16 @@ constexpr int64_t kDefaultProcessIntervalMs = 5; } FakeNetworkPipe::FakeNetworkPipe(Clock* clock, - const FakeNetworkPipe::Config& config) - : FakeNetworkPipe(clock, config, 1) {} + const FakeNetworkPipe::Config& config, + MediaType media_type) + : FakeNetworkPipe(clock, config, media_type, 1) {} FakeNetworkPipe::FakeNetworkPipe(Clock* clock, const FakeNetworkPipe::Config& config, + MediaType media_type, uint64_t seed) : clock_(clock), + media_type_(media_type), packet_receiver_(NULL), random_(seed), config_(), @@ -199,7 +202,7 @@ void FakeNetworkPipe::Process() { while (!packets_to_deliver.empty()) { NetworkPacket* packet = packets_to_deliver.front(); packets_to_deliver.pop(); - packet_receiver_->DeliverPacket(MediaType::ANY, packet->data(), + packet_receiver_->DeliverPacket(media_type_, packet->data(), packet->data_length(), PacketTime()); delete packet; } diff --git a/webrtc/test/fake_network_pipe.h b/webrtc/test/fake_network_pipe.h index 0c73e85e1e..adf76c3a7b 100644 --- a/webrtc/test/fake_network_pipe.h +++ b/webrtc/test/fake_network_pipe.h @@ -25,6 +25,7 @@ namespace webrtc { class Clock; class PacketReceiver; +enum class MediaType; class NetworkPacket { public: @@ -82,9 +83,10 @@ class FakeNetworkPipe { int avg_burst_loss_length = -1; }; - FakeNetworkPipe(Clock* clock, const FakeNetworkPipe::Config& config); + FakeNetworkPipe(Clock* clock, const FakeNetworkPipe::Config& config, + MediaType media_type); FakeNetworkPipe(Clock* clock, - const FakeNetworkPipe::Config& config, + const FakeNetworkPipe::Config& config, MediaType media_type, uint64_t seed); ~FakeNetworkPipe(); @@ -110,6 +112,7 @@ class FakeNetworkPipe { private: Clock* const clock_; + const MediaType media_type_; rtc::CriticalSection lock_; PacketReceiver* packet_receiver_; std::queue capacity_link_; diff --git a/webrtc/test/fake_network_pipe_unittest.cc b/webrtc/test/fake_network_pipe_unittest.cc index aa27399594..c19b0014bb 100644 --- a/webrtc/test/fake_network_pipe_unittest.cc +++ b/webrtc/test/fake_network_pipe_unittest.cc @@ -96,7 +96,7 @@ TEST_F(FakeNetworkPipeTest, CapacityTest) { config.queue_length_packets = 20; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); pipe->SetReceiver(receiver_.get()); // Add 10 packets of 1000 bytes, = 80 kb, and verify it takes one second to @@ -110,22 +110,22 @@ TEST_F(FakeNetworkPipeTest, CapacityTest) { kPacketSize); // Time haven't increased yet, so we souldn't get any packets. - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(0); pipe->Process(); // Advance enough time to release one packet. fake_clock_.AdvanceTimeMilliseconds(kPacketTimeMs); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(1); pipe->Process(); // Release all but one packet fake_clock_.AdvanceTimeMilliseconds(9 * kPacketTimeMs - 1); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(8); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(8); pipe->Process(); // And the last one. fake_clock_.AdvanceTimeMilliseconds(1); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(1); pipe->Process(); } @@ -136,7 +136,7 @@ TEST_F(FakeNetworkPipeTest, ExtraDelayTest) { config.queue_delay_ms = 100; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::AUDIO)); pipe->SetReceiver(receiver_.get()); const int kNumPackets = 2; @@ -149,17 +149,17 @@ TEST_F(FakeNetworkPipeTest, ExtraDelayTest) { // Increase more than kPacketTimeMs, but not more than the extra delay. fake_clock_.AdvanceTimeMilliseconds(kPacketTimeMs); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(0); pipe->Process(); // Advance the network delay to get the first packet. fake_clock_.AdvanceTimeMilliseconds(config.queue_delay_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(1); pipe->Process(); // Advance one more kPacketTimeMs to get the last packet. fake_clock_.AdvanceTimeMilliseconds(kPacketTimeMs); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(1); pipe->Process(); } @@ -170,7 +170,7 @@ TEST_F(FakeNetworkPipeTest, QueueLengthTest) { config.queue_length_packets = 2; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); pipe->SetReceiver(receiver_.get()); const int kPacketSize = 1000; @@ -183,7 +183,7 @@ TEST_F(FakeNetworkPipeTest, QueueLengthTest) { // Increase time enough to deliver all three packets, verify only two are // delivered. fake_clock_.AdvanceTimeMilliseconds(3 * kPacketTimeMs); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(2); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(2); pipe->Process(); } @@ -194,7 +194,7 @@ TEST_F(FakeNetworkPipeTest, StatisticsTest) { config.queue_delay_ms = 20; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); pipe->SetReceiver(receiver_.get()); const int kPacketSize = 1000; @@ -206,7 +206,7 @@ TEST_F(FakeNetworkPipeTest, StatisticsTest) { fake_clock_.AdvanceTimeMilliseconds(3 * kPacketTimeMs + config.queue_delay_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(2); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(2); pipe->Process(); // Packet 1: kPacketTimeMs + config.queue_delay_ms, @@ -224,7 +224,7 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithEmptyPipeTest) { config.queue_length_packets = 20; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); pipe->SetReceiver(receiver_.get()); // Add 10 packets of 1000 bytes, = 80 kb, and verify it takes one second to @@ -237,13 +237,13 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithEmptyPipeTest) { int packet_time_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize); // Time hasn't increased yet, so we souldn't get any packets. - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(0); pipe->Process(); // Advance time in steps to release one packet at a time. for (int i = 0; i < kNumPackets; ++i) { fake_clock_.AdvanceTimeMilliseconds(packet_time_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(1); pipe->Process(); } @@ -259,20 +259,20 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithEmptyPipeTest) { packet_time_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize); // Time hasn't increased yet, so we souldn't get any packets. - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(0); pipe->Process(); // Advance time in steps to release one packet at a time. for (int i = 0; i < kNumPackets; ++i) { fake_clock_.AdvanceTimeMilliseconds(packet_time_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(1); pipe->Process(); } // Check that all the packets were sent. EXPECT_EQ(static_cast(2 * kNumPackets), pipe->sent_packets()); fake_clock_.AdvanceTimeMilliseconds(pipe->TimeUntilNextProcess()); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::VIDEO, _, _, _)).Times(0); pipe->Process(); } @@ -283,7 +283,7 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithPacketsInPipeTest) { config.queue_length_packets = 20; config.link_capacity_kbps = 80; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::AUDIO)); pipe->SetReceiver(receiver_.get()); // Add 10 packets of 1000 bytes, = 80 kb. @@ -306,27 +306,27 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithPacketsInPipeTest) { int packet_time_2_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize); // Time hasn't increased yet, so we souldn't get any packets. - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(0); pipe->Process(); // Advance time in steps to release one packet at a time. for (int i = 0; i < kNumPackets; ++i) { fake_clock_.AdvanceTimeMilliseconds(packet_time_1_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(1); pipe->Process(); } // Advance time in steps to release one packet at a time. for (int i = 0; i < kNumPackets; ++i) { fake_clock_.AdvanceTimeMilliseconds(packet_time_2_ms); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(1); pipe->Process(); } // Check that all the packets were sent. EXPECT_EQ(static_cast(2 * kNumPackets), pipe->sent_packets()); fake_clock_.AdvanceTimeMilliseconds(pipe->TimeUntilNextProcess()); - EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0); + EXPECT_CALL(*receiver_, DeliverPacket(MediaType::AUDIO, _, _, _)).Times(0); pipe->Process(); } @@ -338,7 +338,7 @@ TEST_F(FakeNetworkPipeTest, DisallowReorderingThenAllowReordering) { config.queue_delay_ms = 100; config.delay_standard_deviation_ms = 10; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); ReorderTestReceiver* receiver = new ReorderTestReceiver(); receiver_.reset(receiver); pipe->SetReceiver(receiver_.get()); @@ -390,7 +390,7 @@ TEST_F(FakeNetworkPipeTest, BurstLoss) { config.loss_percent = kLossPercent; config.avg_burst_loss_length = kAvgBurstLength; std::unique_ptr pipe( - new FakeNetworkPipe(&fake_clock_, config)); + new FakeNetworkPipe(&fake_clock_, config, MediaType::VIDEO)); ReorderTestReceiver* receiver = new ReorderTestReceiver(); receiver_.reset(receiver); pipe->SetReceiver(receiver_.get()); diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc index 26805539b9..5ae06b7305 100644 --- a/webrtc/test/layer_filtering_transport.cc +++ b/webrtc/test/layer_filtering_transport.cc @@ -27,7 +27,7 @@ LayerFilteringTransport::LayerFilteringTransport( uint8_t vp9_video_payload_type, int selected_tl, int selected_sl) - : test::DirectTransport(config, send_call), + : test::DirectTransport(config, send_call, MediaType::VIDEO), vp8_video_payload_type_(vp8_video_payload_type), vp9_video_payload_type_(vp9_video_payload_type), selected_tl_(selected_tl), diff --git a/webrtc/test/rtp_rtcp_observer.h b/webrtc/test/rtp_rtcp_observer.h index 8e1375f20f..b268e4ba02 100644 --- a/webrtc/test/rtp_rtcp_observer.h +++ b/webrtc/test/rtp_rtcp_observer.h @@ -94,8 +94,9 @@ class PacketTransport : public test::DirectTransport { PacketTransport(Call* send_call, RtpRtcpObserver* observer, TransportType transport_type, + MediaType media_type, const FakeNetworkPipe::Config& configuration) - : test::DirectTransport(configuration, send_call), + : test::DirectTransport(configuration, send_call, media_type), observer_(observer), transport_type_(transport_type) {} diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc index 6f030c3b58..12b0b52973 100644 --- a/webrtc/video/end_to_end_tests.cc +++ b/webrtc/video/end_to_end_tests.cc @@ -210,8 +210,10 @@ TEST_F(EndToEndTest, RendersSingleDelayedFrame) { CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); - test::DirectTransport sender_transport(sender_call_.get()); - test::DirectTransport receiver_transport(receiver_call_.get()); + test::DirectTransport sender_transport( + sender_call_.get(), MediaType::VIDEO); + test::DirectTransport receiver_transport( + receiver_call_.get(), MediaType::VIDEO); sender_transport.SetReceiver(receiver_call_->Receiver()); receiver_transport.SetReceiver(sender_call_->Receiver()); @@ -257,8 +259,10 @@ TEST_F(EndToEndTest, TransmitsFirstFrame) { CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); - test::DirectTransport sender_transport(sender_call_.get()); - test::DirectTransport receiver_transport(receiver_call_.get()); + test::DirectTransport sender_transport( + sender_call_.get(), MediaType::VIDEO); + test::DirectTransport receiver_transport( + receiver_call_.get(), MediaType::VIDEO); sender_transport.SetReceiver(receiver_call_->Receiver()); receiver_transport.SetReceiver(sender_call_->Receiver()); @@ -529,6 +533,7 @@ TEST_F(EndToEndTest, ReceivesNackAndRetransmitsAudio) { test::PacketTransport* CreateReceiveTransport() override { test::PacketTransport* receive_transport = new test::PacketTransport( nullptr, this, test::PacketTransport::kReceiver, + MediaType::AUDIO, FakeNetworkPipe::Config()); receive_transport_ = receive_transport; return receive_transport; @@ -790,7 +795,8 @@ class FlexfecRenderObserver : public test::EndToEndTest, FakeNetworkPipe::Config config; config.queue_delay_ms = kNetworkDelayMs; return new test::PacketTransport(sender_call, this, - test::PacketTransport::kSender, config); + test::PacketTransport::kSender, + MediaType::VIDEO, config); } void OnFrame(const VideoFrame& video_frame) override { @@ -969,7 +975,8 @@ TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { FakeNetworkPipe::Config config; config.queue_delay_ms = kNetworkDelayMs; return new test::PacketTransport(sender_call, this, - test::PacketTransport::kSender, config); + test::PacketTransport::kSender, + MediaType::VIDEO, config); } // TODO(holmer): Investigate why we don't send FEC packets when the bitrate @@ -1311,8 +1318,10 @@ TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); - test::DirectTransport send_transport(sender_call_.get()); - test::DirectTransport receive_transport(receiver_call_.get()); + test::DirectTransport send_transport( + sender_call_.get(), MediaType::VIDEO); + test::DirectTransport receive_transport( + receiver_call_.get(), MediaType::VIDEO); PacketInputObserver input_observer(receiver_call_->Receiver()); send_transport.SetReceiver(&input_observer); receive_transport.SetReceiver(sender_call_->Receiver()); @@ -1539,10 +1548,10 @@ class MultiStreamTest { VideoReceiveStream::Config* receive_config) { } virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { - return new test::DirectTransport(sender_call); + return new test::DirectTransport(sender_call, MediaType::VIDEO); } virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { - return new test::DirectTransport(receiver_call); + return new test::DirectTransport(receiver_call, MediaType::VIDEO); } }; @@ -1621,7 +1630,7 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { RtpExtensionHeaderObserver(Call* sender_call, const uint32_t& first_media_ssrc, const std::map& ssrc_map) - : DirectTransport(sender_call), + : DirectTransport(sender_call, MediaType::VIDEO), done_(false, false), parser_(RtpHeaderParser::Create()), first_media_ssrc_(first_media_ssrc), @@ -1937,8 +1946,10 @@ TEST_F(EndToEndTest, ObserversEncodedFrames) { CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); - test::DirectTransport sender_transport(sender_call_.get()); - test::DirectTransport receiver_transport(receiver_call_.get()); + test::DirectTransport sender_transport( + sender_call_.get(), MediaType::VIDEO); + test::DirectTransport receiver_transport( + receiver_call_.get(), MediaType::VIDEO); sender_transport.SetReceiver(receiver_call_->Receiver()); receiver_transport.SetReceiver(sender_call_->Receiver()); @@ -2102,6 +2113,7 @@ TEST_F(EndToEndTest, RembWithSendSideBwe) { test::PacketTransport* CreateReceiveTransport() override { receive_transport_ = new test::PacketTransport( nullptr, this, test::PacketTransport::kReceiver, + MediaType::VIDEO, FakeNetworkPipe::Config()); return receive_transport_; } @@ -3065,7 +3077,8 @@ TEST_F(EndToEndTest, GetStats) { FakeNetworkPipe::Config network_config; network_config.loss_percent = 5; return new test::PacketTransport( - sender_call, this, test::PacketTransport::kSender, network_config); + sender_call, this, test::PacketTransport::kSender, MediaType::VIDEO, + network_config); } Call::Config GetSenderCallConfig() override { @@ -3619,9 +3632,11 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx, test::PacketTransport send_transport(sender_call_.get(), &observer, test::PacketTransport::kSender, + MediaType::VIDEO, FakeNetworkPipe::Config()); test::PacketTransport receive_transport(nullptr, &observer, test::PacketTransport::kReceiver, + MediaType::VIDEO, FakeNetworkPipe::Config()); send_transport.SetReceiver(receiver_call_->Receiver()); receive_transport.SetReceiver(sender_call_->Receiver()); @@ -3914,9 +3929,11 @@ TEST_F(EndToEndTest, CallReportsRttForSender) { FakeNetworkPipe::Config config; config.queue_delay_ms = kSendDelayMs; - test::DirectTransport sender_transport(config, sender_call_.get()); + test::DirectTransport sender_transport( + config, sender_call_.get(), MediaType::VIDEO); config.queue_delay_ms = kReceiveDelayMs; - test::DirectTransport receiver_transport(config, receiver_call_.get()); + test::DirectTransport receiver_transport( + config, receiver_call_.get(), MediaType::VIDEO); sender_transport.SetReceiver(receiver_call_->Receiver()); receiver_transport.SetReceiver(sender_call_->Receiver()); @@ -3978,7 +3995,7 @@ void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( CreateCalls(config, config); receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); - test::DirectTransport sender_transport(sender_call_.get()); + test::DirectTransport sender_transport(sender_call_.get(), MediaType::VIDEO); sender_transport.SetReceiver(receiver_call_->Receiver()); CreateSendConfig(1, 0, 0, &sender_transport); CreateMatchingReceiveConfigs(transport); diff --git a/webrtc/video/replay.cc b/webrtc/video/replay.cc index 2188d3e81d..6347dc9977 100644 --- a/webrtc/video/replay.cc +++ b/webrtc/video/replay.cc @@ -283,8 +283,8 @@ void RtpReplay() { if (!rtp_reader->NextPacket(&packet)) break; ++num_packets; - switch (call->Receiver()->DeliverPacket(webrtc::MediaType::ANY, packet.data, - packet.length, PacketTime())) { + switch (call->Receiver()->DeliverPacket( + webrtc::MediaType::VIDEO, packet.data, packet.length, PacketTime())) { case PacketReceiver::DELIVERY_OK: break; case PacketReceiver::DELIVERY_UNKNOWN_SSRC: { diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc index 4c3c731dd7..96a488298e 100644 --- a/webrtc/video/video_quality_test.cc +++ b/webrtc/video/video_quality_test.cc @@ -1590,7 +1590,8 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { test::LayerFilteringTransport send_transport( params_.pipe, sender_call_.get(), kPayloadTypeVP8, kPayloadTypeVP9, params_.video.selected_tl, params_.ss.selected_sl); - test::DirectTransport recv_transport(params_.pipe, receiver_call_.get()); + test::DirectTransport recv_transport( + params_.pipe, receiver_call_.get(), MediaType::VIDEO); std::string graph_title = params_.analyzer.graph_title; if (graph_title.empty()) diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc index cf09b3ac6c..18bb9b8e12 100644 --- a/webrtc/video/video_send_stream_tests.cc +++ b/webrtc/video/video_send_stream_tests.cc @@ -439,7 +439,8 @@ class UlpfecObserver : public test::EndToEndTest { config.loss_percent = 5; config.queue_delay_ms = kNetworkDelayMs; return new test::PacketTransport(sender_call, this, - test::PacketTransport::kSender, config); + test::PacketTransport::kSender, + MediaType::VIDEO, config); } void ModifyVideoConfigs( @@ -594,7 +595,8 @@ class FlexfecObserver : public test::EndToEndTest { config.loss_percent = 5; config.queue_delay_ms = kNetworkDelayMs; return new test::PacketTransport(sender_call, this, - test::PacketTransport::kSender, config); + test::PacketTransport::kSender, + MediaType::VIDEO, config); } void ModifyVideoConfigs( @@ -1263,7 +1265,8 @@ TEST_F(VideoSendStreamTest, PaddingIsPrimarilyRetransmissions) { config.link_capacity_kbps = kCapacityKbps; config.queue_delay_ms = kNetworkDelayMs; return new test::PacketTransport(sender_call, this, - test::PacketTransport::kSender, config); + test::PacketTransport::kSender, + MediaType::VIDEO, config); } void ModifyVideoConfigs(