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}
This commit is contained in:
Harald Alvestrand 2023-05-25 08:41:53 +00:00 committed by WebRTC LUCI CQ
parent 5c35d08703
commit cfd4cd0703
5 changed files with 38 additions and 24 deletions

View File

@ -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()) {

View File

@ -1005,6 +1005,7 @@ class VideoMediaReceiveChannelInterface : public MediaReceiveChannelInterface {
bool nack_enabled,
webrtc::RtcpMode rtcp_mode,
absl::optional<int> rtx_time) = 0;
virtual bool AddDefaultRecvStreamForTesting(const StreamParams& sp) = 0;
};
} // namespace cricket

View File

@ -242,6 +242,8 @@ class VideoMediaChannel : public MediaChannel,
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 @@ 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_; }

View File

@ -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<uint32_t> GetUnsignaledSsrc() const override;
@ -379,6 +382,9 @@ class WebRtcVideoChannel : public VideoMediaChannel,
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,

View File

@ -1613,14 +1613,13 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test {
[]() { 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 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test {
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 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
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 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
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 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
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 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
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 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
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,
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_));