Introduce AddDefaultRecvStreamForTesting to VideoReceiveChannel API
This change allows us to remove one static_cast from tests that
was problematic for another refactoring.
Bug: webrtc:13931
Change-Id: I8e1b5cecadd806b266b6c115b56b18b9613cbe82
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/306500
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40144}
diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h
index f8527da..b00de20 100644
--- a/media/base/fake_media_engine.h
+++ b/media/base/fake_media_engine.h
@@ -143,6 +143,10 @@
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 08e33cd..578c0a2 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -1005,6 +1005,7 @@
bool nack_enabled,
webrtc::RtcpMode rtcp_mode,
absl::optional<int> 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 1be6c6e..57d9a4e 100644
--- a/media/base/media_channel_impl.h
+++ b/media/base/media_channel_impl.h
@@ -242,6 +242,8 @@
void SetSsrcListChangedCallback(
absl::AnyInvocable<void(const std::set<uint32_t>&)> 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 @@
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 6e62945..2013e69 100644
--- a/media/engine/webrtc_video_engine.h
+++ b/media/engine/webrtc_video_engine.h
@@ -168,7 +168,10 @@
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<uint32_t> GetUnsignaledSsrc() const override;
@@ -379,6 +382,9 @@
RTC_EXCLUSIVE_LOCKS_REQUIRED(thread_checker_);
void ReCreateDefaultReceiveStream(uint32_t ssrc,
absl::optional<uint32_t> 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 32e2c33..7958987 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -1613,14 +1613,13 @@
[]() { return std::make_unique<webrtc::test::FakeDecoder>(); },
kSdpVideoFormats),
field_trials_),
- channel_(absl::WrapUnique(static_cast<cricket::WebRtcVideoChannel*>(
- 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<VideoMediaSendChannel>(channel_.get());
receive_channel_ =
std::make_unique<VideoMediaReceiveChannel>(channel_.get());
@@ -1657,7 +1656,7 @@
std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
video_bitrate_allocator_factory_;
WebRtcVideoEngine engine_;
- std::unique_ptr<WebRtcVideoChannel> channel_;
+ std::unique_ptr<VideoMediaChannel> channel_;
std::unique_ptr<VideoMediaSendChannel> send_channel_;
std::unique_ptr<VideoMediaReceiveChannel> receive_channel_;
cricket::FakeNetworkInterface network_interface_;
@@ -1672,8 +1671,8 @@
SetEncodedFrameBufferFunction_DefaultStream) {
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> 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 @@
SetEncodedFrameBufferFunction_MatchSsrcWithDefaultStream) {
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> 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 @@
SetEncodedFrameBufferFunction_MatchSsrc) {
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> 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 @@
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)>>
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 @@
testing::StrictMock<
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)>>
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, DoesNotDecodeWhenDisabled) {
testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> 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_));