diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h index f8527da966..b00de20523 100644 --- a/media/base/fake_media_engine.h +++ b/media/base/fake_media_engine.h @@ -143,6 +143,10 @@ class RtpHelper : public Base { CreateRtpParametersWithEncodings(sp); return true; } + virtual bool AddDefaultRecvStreamForTesting(const StreamParams& sp) { + RTC_CHECK_NOTREACHED(); + return false; + } virtual bool RemoveRecvStream(uint32_t ssrc) { auto parameters_iterator = rtp_receive_parameters_.find(ssrc); if (parameters_iterator != rtp_receive_parameters_.end()) { diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 08e33cd01a..578c0a290f 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -1005,6 +1005,7 @@ class VideoMediaReceiveChannelInterface : public MediaReceiveChannelInterface { bool nack_enabled, webrtc::RtcpMode rtcp_mode, absl::optional rtx_time) = 0; + virtual bool AddDefaultRecvStreamForTesting(const StreamParams& sp) = 0; }; } // namespace cricket diff --git a/media/base/media_channel_impl.h b/media/base/media_channel_impl.h index 1be6c6ef01..57d9a4ee98 100644 --- a/media/base/media_channel_impl.h +++ b/media/base/media_channel_impl.h @@ -242,6 +242,8 @@ class VideoMediaChannel : public MediaChannel, void SetSsrcListChangedCallback( absl::AnyInvocable&)> callback) override = 0; + bool AddRecvStream(const StreamParams& sp) override = 0; + void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override = 0; // This fills the "bitrate parts" (rtx, video bitrate) of the // BandwidthEstimationInfo, since that part that isn't possible to get @@ -815,9 +817,13 @@ class VideoMediaReceiveChannel : public VideoMediaReceiveChannelInterface { impl()->SetReceiverFeedbackParameters(lntf_enabled, nack_enabled, rtcp_mode, rtx_time); } - MediaChannel* ImplForTesting() override { return impl_; } void SetReceive(bool receive) override { impl()->SetReceive(receive); } + MediaChannel* ImplForTesting() override { return impl_; } + bool AddDefaultRecvStreamForTesting(const StreamParams& sp) override { + return impl()->AddDefaultRecvStreamForTesting(sp); + } + private: VideoMediaReceiveChannelInterface* impl() { return impl_; } const VideoMediaReceiveChannelInterface* impl() const { return impl_; } diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index 6e62945d7c..2013e6979c 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -168,7 +168,10 @@ class WebRtcVideoChannel : public VideoMediaChannel, bool AddSendStream(const StreamParams& sp) override; bool RemoveSendStream(uint32_t ssrc) override; bool AddRecvStream(const StreamParams& sp) override; - bool AddRecvStream(const StreamParams& sp, bool default_stream); + bool AddDefaultRecvStreamForTesting(const StreamParams& sp) override { + // Invokes private AddRecvStream variant function + return AddRecvStream(sp, true); + } bool RemoveRecvStream(uint32_t ssrc) override; void ResetUnsignaledRecvStream() override; absl::optional GetUnsignaledSsrc() const override; @@ -379,6 +382,9 @@ class WebRtcVideoChannel : public VideoMediaChannel, RTC_EXCLUSIVE_LOCKS_REQUIRED(thread_checker_); void ReCreateDefaultReceiveStream(uint32_t ssrc, absl::optional rtx_ssrc); + // Add a receive stream. Used for testing. + bool AddRecvStream(const StreamParams& sp, bool default_stream); + void ConfigureReceiverRtp( webrtc::VideoReceiveStreamInterface::Config* config, webrtc::FlexfecReceiveStream::Config* flexfec_config, diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index 32e2c337e6..7958987e9e 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc @@ -1613,14 +1613,13 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test { []() { return std::make_unique(); }, kSdpVideoFormats), field_trials_), - channel_(absl::WrapUnique(static_cast( - engine_.CreateMediaChannel( - cricket::MediaChannel::Role::kBoth, - call_.get(), - cricket::MediaConfig(), - cricket::VideoOptions(), - webrtc::CryptoOptions(), - video_bitrate_allocator_factory_.get())))) { + channel_(absl::WrapUnique(engine_.CreateMediaChannel( + cricket::MediaChannel::Role::kBoth, + call_.get(), + cricket::MediaConfig(), + cricket::VideoOptions(), + webrtc::CryptoOptions(), + video_bitrate_allocator_factory_.get()))) { send_channel_ = std::make_unique(channel_.get()); receive_channel_ = std::make_unique(channel_.get()); @@ -1657,7 +1656,7 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test { std::unique_ptr video_bitrate_allocator_factory_; WebRtcVideoEngine engine_; - std::unique_ptr channel_; + std::unique_ptr channel_; std::unique_ptr send_channel_; std::unique_ptr receive_channel_; cricket::FakeNetworkInterface network_interface_; @@ -1672,8 +1671,8 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, SetEncodedFrameBufferFunction_DefaultStream) { testing::MockFunction callback; EXPECT_CALL(callback, Call); - EXPECT_TRUE(channel_->AddRecvStream( - cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true)); + EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting( + cricket::StreamParams::CreateLegacy(kSsrc))); channel_->SetRecordableEncodedFrameCallback(/*ssrc=*/0, callback.AsStdFunction()); EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); @@ -1687,8 +1686,8 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, SetEncodedFrameBufferFunction_MatchSsrcWithDefaultStream) { testing::MockFunction callback; EXPECT_CALL(callback, Call); - EXPECT_TRUE(channel_->AddRecvStream( - cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true)); + EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting( + cricket::StreamParams::CreateLegacy(kSsrc))); EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction()); DeliverKeyFrame(kSsrc); @@ -1701,8 +1700,8 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, SetEncodedFrameBufferFunction_MatchSsrc) { testing::MockFunction callback; EXPECT_CALL(callback, Call); - EXPECT_TRUE(channel_->AddRecvStream( - cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/false)); + EXPECT_TRUE( + channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction()); DeliverKeyFrame(kSsrc); @@ -1717,8 +1716,7 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, testing::MockFunction> callback; EXPECT_TRUE( - channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1), - /*is_default_stream=*/false)); + channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1))); EXPECT_TRUE(channel_->SetSink(kSsrc + 1, &renderer_)); channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction()); DeliverKeyFrame(kSsrc); // Expected to not cause function to fire. @@ -1731,9 +1729,8 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, testing::StrictMock< testing::MockFunction> callback; - EXPECT_TRUE( - channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1), - /*is_default_stream=*/true)); + EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting( + cricket::StreamParams::CreateLegacy(kSsrc + 1))); EXPECT_TRUE(channel_->SetSink(kSsrc + 1, &renderer_)); channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction()); channel_->SetDefaultSink(&renderer_); @@ -1745,8 +1742,8 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, DoesNotDecodeWhenDisabled) { testing::MockFunction callback; EXPECT_CALL(callback, Call); - EXPECT_TRUE(channel_->AddRecvStream( - cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true)); + EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting( + cricket::StreamParams::CreateLegacy(kSsrc))); channel_->SetRecordableEncodedFrameCallback(/*ssrc=*/0, callback.AsStdFunction()); EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));