Change FakeMediaEngine to use send/receive channels

Also update the tests that depend on FakeMediaEngine.

Bug: webrtc:13931
Change-Id: Ia608c4ce68a29e45174b68ba0103af31e9a7d3d1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/294280
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39345}
This commit is contained in:
Harald Alvestrand 2023-02-20 10:33:09 +00:00 committed by WebRTC LUCI CQ
parent b337c40e58
commit 70429d45a6
6 changed files with 277 additions and 172 deletions

View File

@ -463,14 +463,36 @@ VoiceMediaChannel* FakeVoiceEngine::CreateMediaChannel(
FakeVoiceMediaChannel* ch =
new FakeVoiceMediaChannel(role, this, options, call->network_thread());
channels_.push_back(ch);
switch (role) {
case MediaChannel::Role::kSend:
send_channels_.push_back(ch);
break;
case MediaChannel::Role::kReceive:
receive_channels_.push_back(ch);
break;
default:
// kBoth isn't supported any more.
RTC_CHECK_NOTREACHED();
}
return ch;
}
FakeVoiceMediaChannel* FakeVoiceEngine::GetChannel(size_t index) {
return (channels_.size() > index) ? channels_[index] : NULL;
FakeVoiceMediaChannel* FakeVoiceEngine::GetSendChannel(size_t index) {
return (send_channels_.size() > index) ? send_channels_[index] : NULL;
}
FakeVoiceMediaChannel* FakeVoiceEngine::GetReceiveChannel(size_t index) {
return (receive_channels_.size() > index) ? receive_channels_[index] : NULL;
}
void FakeVoiceEngine::UnregisterChannel(VoiceMediaChannel* channel) {
channels_.erase(absl::c_find(channels_, channel));
switch (channel->role()) {
case MediaChannel::Role::kSend:
send_channels_.erase(absl::c_find(send_channels_, channel));
break;
case MediaChannel::Role::kReceive:
receive_channels_.erase(absl::c_find(receive_channels_, channel));
break;
default:
RTC_CHECK_NOTREACHED();
}
}
const std::vector<AudioCodec>& FakeVoiceEngine::send_codecs() const {
return send_codecs_;
@ -535,16 +557,41 @@ VideoMediaChannel* FakeVideoEngine::CreateMediaChannel(
FakeVideoMediaChannel* ch =
new FakeVideoMediaChannel(role, this, options, call->network_thread());
channels_.emplace_back(ch);
switch (role) {
case MediaChannel::Role::kSend:
send_channels_.emplace_back(ch);
break;
case MediaChannel::Role::kReceive:
receive_channels_.emplace_back(ch);
break;
default:
// kBoth isn't supported
RTC_CHECK_NOTREACHED();
}
return ch;
}
FakeVideoMediaChannel* FakeVideoEngine::GetChannel(size_t index) {
return (channels_.size() > index) ? channels_[index] : nullptr;
FakeVideoMediaChannel* FakeVideoEngine::GetSendChannel(size_t index) {
return (send_channels_.size() > index) ? send_channels_[index] : nullptr;
}
FakeVideoMediaChannel* FakeVideoEngine::GetReceiveChannel(size_t index) {
return (receive_channels_.size() > index) ? receive_channels_[index]
: nullptr;
}
void FakeVideoEngine::UnregisterChannel(VideoMediaChannel* channel) {
auto it = absl::c_find(channels_, channel);
RTC_DCHECK(it != channels_.end());
channels_.erase(it);
switch (channel->role()) {
case MediaChannel::Role::kSend: {
auto it = absl::c_find(send_channels_, channel);
RTC_DCHECK(it != send_channels_.end());
send_channels_.erase(it);
} break;
case MediaChannel::Role::kReceive: {
auto it = absl::c_find(receive_channels_, channel);
RTC_DCHECK(it != receive_channels_.end());
receive_channels_.erase(it);
} break;
default:
RTC_CHECK_NOTREACHED();
}
}
std::vector<VideoCodec> FakeVideoEngine::send_codecs(bool use_rtx) const {
return send_codecs_;
@ -597,11 +644,17 @@ void FakeMediaEngine::SetVideoCodecs(const std::vector<VideoCodec>& codecs) {
video_->SetRecvCodecs(codecs);
}
FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceChannel(size_t index) {
return voice_->GetChannel(index);
FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceSendChannel(size_t index) {
return voice_->GetSendChannel(index);
}
FakeVideoMediaChannel* FakeMediaEngine::GetVideoChannel(size_t index) {
return video_->GetChannel(index);
FakeVideoMediaChannel* FakeMediaEngine::GetVideoSendChannel(size_t index) {
return video_->GetSendChannel(index);
}
FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceReceiveChannel(size_t index) {
return voice_->GetReceiveChannel(index);
}
FakeVideoMediaChannel* FakeMediaEngine::GetVideoReceiveChannel(size_t index) {
return video_->GetReceiveChannel(index);
}
void FakeMediaEngine::set_fail_create_channel(bool fail) {

View File

@ -543,7 +543,8 @@ class FakeVoiceEngine : public VoiceEngineInterface {
const AudioOptions& options,
const webrtc::CryptoOptions& crypto_options,
webrtc::AudioCodecPairId codec_pair_id) override;
FakeVoiceMediaChannel* GetChannel(size_t index);
FakeVoiceMediaChannel* GetSendChannel(size_t index);
FakeVoiceMediaChannel* GetReceiveChannel(size_t index);
void UnregisterChannel(VoiceMediaChannel* channel);
// TODO(ossu): For proper testing, These should either individually settable
@ -564,7 +565,8 @@ class FakeVoiceEngine : public VoiceEngineInterface {
std::vector<webrtc::RtpHeaderExtensionCapability> header_extensions);
private:
std::vector<FakeVoiceMediaChannel*> channels_;
std::vector<FakeVoiceMediaChannel*> send_channels_;
std::vector<FakeVoiceMediaChannel*> receive_channels_;
std::vector<AudioCodec> recv_codecs_;
std::vector<AudioCodec> send_codecs_;
bool fail_create_channel_;
@ -585,7 +587,8 @@ class FakeVideoEngine : public VideoEngineInterface {
const webrtc::CryptoOptions& crypto_options,
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
override;
FakeVideoMediaChannel* GetChannel(size_t index);
FakeVideoMediaChannel* GetSendChannel(size_t index);
FakeVideoMediaChannel* GetReceiveChannel(size_t index);
void UnregisterChannel(VideoMediaChannel* channel);
std::vector<VideoCodec> send_codecs() const override {
return send_codecs(true);
@ -604,7 +607,8 @@ class FakeVideoEngine : public VideoEngineInterface {
std::vector<webrtc::RtpHeaderExtensionCapability> header_extensions);
private:
std::vector<FakeVideoMediaChannel*> channels_;
std::vector<FakeVideoMediaChannel*> send_channels_;
std::vector<FakeVideoMediaChannel*> receive_channels_;
std::vector<VideoCodec> send_codecs_;
std::vector<VideoCodec> recv_codecs_;
bool capture_;
@ -626,8 +630,10 @@ class FakeMediaEngine : public CompositeMediaEngine {
void SetAudioSendCodecs(const std::vector<AudioCodec>& codecs);
void SetVideoCodecs(const std::vector<VideoCodec>& codecs);
FakeVoiceMediaChannel* GetVoiceChannel(size_t index);
FakeVideoMediaChannel* GetVideoChannel(size_t index);
FakeVoiceMediaChannel* GetVoiceSendChannel(size_t index);
FakeVideoMediaChannel* GetVideoSendChannel(size_t index);
FakeVoiceMediaChannel* GetVoiceReceiveChannel(size_t index);
FakeVideoMediaChannel* GetVideoReceiveChannel(size_t index);
void set_fail_create_channel(bool fail);

View File

@ -39,7 +39,8 @@ class AudioRtpReceiverTest : public ::testing::Test {
std::string(),
std::vector<std::string>(),
false)),
media_channel_(rtc::Thread::Current()) {
media_channel_(cricket::MediaChannel::Role::kReceive,
rtc::Thread::Current()) {
EXPECT_CALL(media_channel_, SetRawAudioSink(kSsrc, _));
EXPECT_CALL(media_channel_, SetBaseMinimumPlayoutDelayMs(kSsrc, _));
}
@ -101,7 +102,8 @@ TEST_F(AudioRtpReceiverTest, VolumesSetBeforeStartingAreRespected) {
TEST(AudioRtpReceiver, OnChangedNotificationsAfterConstruction) {
webrtc::test::RunLoop loop;
auto* thread = rtc::Thread::Current(); // Points to loop's thread.
cricket::MockVoiceMediaChannel media_channel(thread);
cricket::MockVoiceMediaChannel media_channel(
cricket::MediaChannel::Role::kReceive, thread);
auto receiver = rtc::make_ref_counted<AudioRtpReceiver>(
thread, std::string(), std::vector<std::string>(), true, &media_channel);

View File

@ -290,29 +290,33 @@ TEST_P(PeerConnectionMediaTest, AudioVideoOfferAnswerCreateSendRecvStreams) {
ASSERT_TRUE(
caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
auto* caller_voice_send = caller->media_engine()->GetVoiceChannel(0);
auto* caller_voice_receive = caller->media_engine()->GetVoiceChannel(1);
auto* caller_voice_send = caller->media_engine()->GetVoiceSendChannel(0);
auto* caller_voice_receive =
caller->media_engine()->GetVoiceReceiveChannel(0);
EXPECT_THAT(GetIds(caller_voice_receive->recv_streams()),
ElementsAre(kCalleeAudioId));
EXPECT_THAT(GetIds(caller_voice_send->send_streams()),
ElementsAre(kCallerAudioId));
auto* caller_video_send = caller->media_engine()->GetVideoChannel(0);
auto* caller_video_receive = caller->media_engine()->GetVideoChannel(1);
auto* caller_video_send = caller->media_engine()->GetVideoSendChannel(0);
auto* caller_video_receive =
caller->media_engine()->GetVideoReceiveChannel(0);
EXPECT_THAT(GetIds(caller_video_receive->recv_streams()),
ElementsAre(kCalleeVideoId));
EXPECT_THAT(GetIds(caller_video_send->send_streams()),
ElementsAre(kCallerVideoId));
auto* callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
auto* callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
auto* callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
auto* callee_voice_receive =
callee->media_engine()->GetVoiceReceiveChannel(0);
EXPECT_THAT(GetIds(callee_voice_receive->recv_streams()),
ElementsAre(kCallerAudioId));
EXPECT_THAT(GetIds(callee_voice_send->send_streams()),
ElementsAre(kCalleeAudioId));
auto* callee_video_send = callee->media_engine()->GetVideoChannel(0);
auto* callee_video_receive = callee->media_engine()->GetVideoChannel(1);
auto* callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
auto* callee_video_receive =
callee->media_engine()->GetVideoReceiveChannel(0);
EXPECT_THAT(GetIds(callee_video_receive->recv_streams()),
ElementsAre(kCallerVideoId));
EXPECT_THAT(GetIds(callee_video_send->send_streams()),
@ -338,8 +342,10 @@ TEST_F(PeerConnectionMediaTestUnifiedPlan,
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
ASSERT_FALSE(callee->media_engine()->GetVoiceChannel(0));
ASSERT_FALSE(callee->media_engine()->GetVideoChannel(0));
ASSERT_FALSE(callee->media_engine()->GetVoiceSendChannel(0));
ASSERT_FALSE(callee->media_engine()->GetVideoSendChannel(0));
ASSERT_FALSE(callee->media_engine()->GetVoiceReceiveChannel(0));
ASSERT_FALSE(callee->media_engine()->GetVideoReceiveChannel(0));
}
// Test that removing streams from a subsequent offer causes the receive streams
@ -359,12 +365,14 @@ TEST_F(PeerConnectionMediaTestPlanB, EmptyRemoteOfferRemovesRecvStreams) {
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
auto callee_video = callee->media_engine()->GetVideoChannel(0);
EXPECT_EQ(1u, callee_voice->send_streams().size());
EXPECT_EQ(0u, callee_voice->recv_streams().size());
EXPECT_EQ(1u, callee_video->send_streams().size());
EXPECT_EQ(0u, callee_video->recv_streams().size());
auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
EXPECT_EQ(1u, callee_voice_send->send_streams().size());
EXPECT_EQ(0u, callee_voice_receive->recv_streams().size());
EXPECT_EQ(1u, callee_video_send->send_streams().size());
EXPECT_EQ(0u, callee_video_receive->recv_streams().size());
}
// Test enabling of simulcast with Plan B semantics.
@ -436,8 +444,8 @@ TEST_F(PeerConnectionMediaTestUnifiedPlan,
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
EXPECT_FALSE(callee->media_engine()->GetVoiceChannel(0));
EXPECT_FALSE(callee->media_engine()->GetVideoChannel(0));
EXPECT_FALSE(callee->media_engine()->GetVoiceReceiveChannel(0));
EXPECT_FALSE(callee->media_engine()->GetVideoReceiveChannel(0));
}
// Test that removing streams from a subsequent answer causes the send streams
@ -457,10 +465,10 @@ TEST_F(PeerConnectionMediaTestPlanB, EmptyLocalAnswerRemovesSendStreams) {
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
EXPECT_EQ(0u, callee_voice_send->send_streams().size());
EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
EXPECT_EQ(0u, callee_video_send->send_streams().size());
@ -481,10 +489,10 @@ TEST_P(PeerConnectionMediaTest, NewStreamInRemoteOfferAddsRecvStreams) {
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
auto a1 = callee->media_engine()->GetVoiceChannel(1);
auto a2 = callee->media_engine()->GetVoiceChannel(3);
auto v1 = callee->media_engine()->GetVideoChannel(1);
auto v2 = callee->media_engine()->GetVideoChannel(3);
auto a1 = callee->media_engine()->GetVoiceReceiveChannel(0);
auto a2 = callee->media_engine()->GetVoiceReceiveChannel(1);
auto v1 = callee->media_engine()->GetVideoReceiveChannel(0);
auto v2 = callee->media_engine()->GetVideoReceiveChannel(1);
if (IsUnifiedPlan()) {
ASSERT_TRUE(a1);
EXPECT_EQ(1u, a1->recv_streams().size());
@ -527,9 +535,9 @@ TEST_P(PeerConnectionMediaTest, NewStreamInLocalAnswerAddsSendStreams) {
ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get(), offer_options,
answer_options));
auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
auto callee_voice = callee->media_engine()->GetVoiceSendChannel(0);
ASSERT_TRUE(callee_voice);
auto callee_video = callee->media_engine()->GetVideoChannel(0);
auto callee_video = callee->media_engine()->GetVideoSendChannel(0);
ASSERT_TRUE(callee_video);
if (IsUnifiedPlan()) {
@ -1102,12 +1110,12 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithAudioOnlyAnswer) {
ASSERT_TRUE(caller->SetRemoteDescription(
callee->CreateAnswerAndSetAsLocal(options_reject_video)));
auto caller_voice_send = caller->media_engine()->GetVoiceChannel(0);
auto caller_voice_receive = caller->media_engine()->GetVoiceChannel(1);
auto caller_voice_send = caller->media_engine()->GetVoiceSendChannel(0);
auto caller_voice_receive = caller->media_engine()->GetVoiceReceiveChannel(0);
ASSERT_TRUE(caller_voice_send && caller_voice_receive);
EXPECT_EQ(0u, caller_voice_receive->recv_streams().size());
EXPECT_EQ(1u, caller_voice_send->send_streams().size());
auto caller_video = caller->media_engine()->GetVideoChannel(0);
auto caller_video = caller->media_engine()->GetVideoSendChannel(0);
EXPECT_FALSE(caller_video);
// Callee adds its own audio/video stream and offers to receive audio/video
@ -1118,13 +1126,13 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithAudioOnlyAnswer) {
ASSERT_TRUE(
caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
ASSERT_TRUE(callee_voice_send && callee_voice_receive);
EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
EXPECT_EQ(1u, callee_voice_send->send_streams().size());
auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
ASSERT_TRUE(callee_video_send && callee_video_receive);
EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
EXPECT_EQ(1u, callee_video_send->send_streams().size());
@ -1135,12 +1143,12 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithAudioOnlyAnswer) {
ASSERT_TRUE(
callee->SetLocalDescription(callee->CreateAnswer(options_reject_video)));
callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
ASSERT_TRUE(callee_voice_send && callee_voice_receive);
EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
EXPECT_EQ(1u, callee_voice_send->send_streams().size());
auto callee_video = callee->media_engine()->GetVideoChannel(0);
auto callee_video = callee->media_engine()->GetVideoSendChannel(0);
EXPECT_FALSE(callee_video);
}
@ -1176,12 +1184,13 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithVideoOnlyAnswer) {
ASSERT_TRUE(caller->SetRemoteDescription(
callee->CreateAnswerAndSetAsLocal(options_reject_audio)));
auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
auto caller_voice = caller->media_engine()->GetVoiceSendChannel(0);
EXPECT_FALSE(caller_voice);
auto caller_video = caller->media_engine()->GetVideoChannel(0);
ASSERT_TRUE(caller_video);
EXPECT_EQ(0u, caller_video->recv_streams().size());
EXPECT_EQ(1u, caller_video->send_streams().size());
auto caller_video_send = caller->media_engine()->GetVideoSendChannel(0);
auto caller_video_receive = caller->media_engine()->GetVideoReceiveChannel(0);
ASSERT_TRUE(caller_video_send && caller_video_receive);
EXPECT_EQ(0u, caller_video_receive->recv_streams().size());
EXPECT_EQ(1u, caller_video_send->send_streams().size());
// Callee adds its own audio/video stream and offers to receive audio/video
// too.
@ -1191,13 +1200,13 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithVideoOnlyAnswer) {
ASSERT_TRUE(caller->SetRemoteDescription(
callee->CreateAnswerAndSetAsLocal(options_no_bundle)));
auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
ASSERT_TRUE(callee_voice_send && callee_voice_receive);
EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
EXPECT_EQ(1u, callee_voice_send->send_streams().size());
auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
ASSERT_TRUE(callee_video_send && callee_video_receive);
EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
EXPECT_EQ(1u, callee_video_send->send_streams().size());
@ -1208,10 +1217,10 @@ TEST_P(PeerConnectionMediaTest, TestAVOfferWithVideoOnlyAnswer) {
ASSERT_TRUE(
callee->SetLocalDescription(callee->CreateAnswer(options_reject_audio)));
auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
auto callee_voice = callee->media_engine()->GetVoiceReceiveChannel(0);
EXPECT_FALSE(callee_voice);
callee_video_send = callee->media_engine()->GetVideoChannel(0);
callee_video_receive = callee->media_engine()->GetVideoChannel(1);
callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
ASSERT_TRUE(callee_video_send && callee_video_receive);
EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
EXPECT_EQ(1u, callee_video_send->send_streams().size());
@ -1226,7 +1235,7 @@ TEST_P(PeerConnectionMediaTest, MediaEngineErrorPropagatedToClients) {
ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
auto video_channel = caller->media_engine()->GetVideoChannel(0);
auto video_channel = caller->media_engine()->GetVideoSendChannel(0);
video_channel->set_fail_set_send_codecs(true);
std::string error;
@ -1249,7 +1258,7 @@ TEST_P(PeerConnectionMediaTest,
ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
auto video_channel = caller->media_engine()->GetVideoChannel(0);
auto video_channel = caller->media_engine()->GetVideoSendChannel(0);
video_channel->set_fail_set_send_codecs(true);
EXPECT_FALSE(
@ -1347,7 +1356,7 @@ TEST_P(PeerConnectionMediaTest,
ASSERT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
auto caller_voice = caller->media_engine()->GetVoiceSendChannel(0);
ASSERT_TRUE(caller_voice);
const cricket::AudioOptions& audio_options = caller_voice->options();
EXPECT_EQ(config.combined_audio_video_bwe,

View File

@ -119,45 +119,60 @@ class RtpSenderReceiverTest
// Create the channels, discard the result; we get them later.
// Fake media channels are owned by the media engine.
media_engine_->voice().CreateMediaChannel(
cricket::MediaChannel::Role::kBoth, &fake_call_, cricket::MediaConfig(),
cricket::MediaChannel::Role::kSend, &fake_call_, cricket::MediaConfig(),
cricket::AudioOptions(), webrtc::CryptoOptions(),
webrtc::AudioCodecPairId::Create());
media_engine_->video().CreateMediaChannel(
cricket::MediaChannel::Role::kBoth, &fake_call_, cricket::MediaConfig(),
cricket::MediaChannel::Role::kSend, &fake_call_, cricket::MediaConfig(),
cricket::VideoOptions(), webrtc::CryptoOptions(),
video_bitrate_allocator_factory_.get());
// TODO(hta): Split into sender and receiver channels
media_engine_->voice().CreateMediaChannel(
cricket::MediaChannel::Role::kReceive, &fake_call_,
cricket::MediaConfig(), cricket::AudioOptions(),
webrtc::CryptoOptions(), webrtc::AudioCodecPairId::Create());
media_engine_->video().CreateMediaChannel(
cricket::MediaChannel::Role::kReceive, &fake_call_,
cricket::MediaConfig(), cricket::VideoOptions(),
webrtc::CryptoOptions(), video_bitrate_allocator_factory_.get());
voice_media_channel_ = absl::WrapUnique(media_engine_->GetVoiceChannel(0));
video_media_channel_ = absl::WrapUnique(media_engine_->GetVideoChannel(0));
voice_media_send_channel_ =
absl::WrapUnique(media_engine_->GetVoiceSendChannel(0));
video_media_send_channel_ =
absl::WrapUnique(media_engine_->GetVideoSendChannel(0));
voice_media_receive_channel_ =
absl::WrapUnique(media_engine_->GetVoiceReceiveChannel(0));
video_media_receive_channel_ =
absl::WrapUnique(media_engine_->GetVideoReceiveChannel(0));
RTC_CHECK(voice_media_channel());
RTC_CHECK(video_media_channel());
RTC_CHECK(voice_media_send_channel());
RTC_CHECK(video_media_send_channel());
RTC_CHECK(voice_media_receive_channel());
RTC_CHECK(video_media_receive_channel());
// Create sender channel objects
voice_send_channel_ =
std::make_unique<cricket::VoiceMediaSendChannel>(voice_media_channel());
video_send_channel_ =
std::make_unique<cricket::VideoMediaSendChannel>(video_media_channel());
voice_send_channel_ = std::make_unique<cricket::VoiceMediaSendChannel>(
voice_media_send_channel());
video_send_channel_ = std::make_unique<cricket::VideoMediaSendChannel>(
video_media_send_channel());
// Create streams for predefined SSRCs. Streams need to exist in order
// for the senders and receievers to apply parameters to them.
// Normally these would be created by SetLocalDescription and
// SetRemoteDescription.
voice_media_channel_->AddSendStream(
voice_media_send_channel_->AddSendStream(
cricket::StreamParams::CreateLegacy(kAudioSsrc));
voice_media_channel_->AddRecvStream(
voice_media_receive_channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kAudioSsrc));
voice_media_channel_->AddSendStream(
voice_media_send_channel_->AddSendStream(
cricket::StreamParams::CreateLegacy(kAudioSsrc2));
voice_media_channel_->AddRecvStream(
voice_media_receive_channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kAudioSsrc2));
video_media_channel_->AddSendStream(
video_media_send_channel_->AddSendStream(
cricket::StreamParams::CreateLegacy(kVideoSsrc));
video_media_channel_->AddRecvStream(
video_media_receive_channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kVideoSsrc));
video_media_channel_->AddSendStream(
video_media_send_channel_->AddSendStream(
cricket::StreamParams::CreateLegacy(kVideoSsrc2));
video_media_channel_->AddRecvStream(
video_media_receive_channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kVideoSsrc2));
}
@ -185,7 +200,7 @@ class RtpSenderReceiverTest
const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000,
0, 1);
params.codecs.push_back(kTelephoneEventCodec);
voice_media_channel()->SetSendParameters(params);
voice_media_send_channel()->SetSendParameters(params);
}
void AddVideoTrack() { AddVideoTrack(false); }
@ -221,7 +236,7 @@ class RtpSenderReceiverTest
audio_rtp_sender_ =
AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr, nullptr);
audio_rtp_sender_->SetMediaChannel(
voice_media_channel()->AsVoiceSendChannel());
voice_media_send_channel()->AsVoiceSendChannel());
}
void CreateVideoRtpSender(uint32_t ssrc) {
@ -240,7 +255,7 @@ class RtpSenderReceiverTest
}
uint32_t CreateVideoRtpSender(const cricket::StreamParams& stream_params) {
video_media_channel_->AddSendStream(stream_params);
video_media_send_channel_->AddSendStream(stream_params);
uint32_t primary_ssrc = stream_params.first_ssrc();
CreateVideoRtpSender(primary_ssrc);
return primary_ssrc;
@ -274,7 +289,7 @@ class RtpSenderReceiverTest
EXPECT_CALL(*set_streams_observer, OnSetStreams());
video_rtp_sender_->SetStreams({local_stream_->id()});
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
video_rtp_sender_->SetSsrc(ssrc);
VerifyVideoChannelInput(ssrc);
}
@ -282,7 +297,7 @@ class RtpSenderReceiverTest
video_rtp_sender_ =
VideoRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
}
void DestroyAudioRtpSender() {
@ -301,7 +316,7 @@ class RtpSenderReceiverTest
rtc::Thread::Current(), kAudioTrackId, streams,
/*is_unified_plan=*/true);
audio_rtp_receiver_->SetMediaChannel(
voice_media_channel()->AsVoiceReceiveChannel());
voice_media_receive_channel()->AsVoiceReceiveChannel());
audio_rtp_receiver_->SetupMediaChannel(kAudioSsrc);
audio_track_ = audio_rtp_receiver_->audio_track();
VerifyVoiceChannelOutput();
@ -312,7 +327,7 @@ class RtpSenderReceiverTest
video_rtp_receiver_ = rtc::make_ref_counted<VideoRtpReceiver>(
rtc::Thread::Current(), kVideoTrackId, streams);
video_rtp_receiver_->SetMediaChannel(
video_media_channel()->AsVideoReceiveChannel());
video_media_receive_channel()->AsVideoReceiveChannel());
video_rtp_receiver_->SetupMediaChannel(kVideoSsrc);
video_track_ = video_rtp_receiver_->video_track();
VerifyVideoChannelOutput();
@ -327,13 +342,13 @@ class RtpSenderReceiverTest
ssrcs.push_back(kVideoSsrcSimulcast + i);
cricket::StreamParams stream_params =
cricket::CreateSimStreamParams("cname", ssrcs);
video_media_channel_->AddRecvStream(stream_params);
video_media_receive_channel_->AddRecvStream(stream_params);
uint32_t primary_ssrc = stream_params.first_ssrc();
video_rtp_receiver_ = rtc::make_ref_counted<VideoRtpReceiver>(
rtc::Thread::Current(), kVideoTrackId, streams);
video_rtp_receiver_->SetMediaChannel(
video_media_channel()->AsVideoReceiveChannel());
video_media_receive_channel()->AsVideoReceiveChannel());
video_rtp_receiver_->SetupMediaChannel(primary_ssrc);
video_track_ = video_rtp_receiver_->video_track();
}
@ -360,53 +375,55 @@ class RtpSenderReceiverTest
void VerifyVoiceChannelInput(uint32_t ssrc) {
// Verify that the media channel has an audio source, and the stream isn't
// muted.
EXPECT_TRUE(voice_media_channel()->HasSource(ssrc));
EXPECT_FALSE(voice_media_channel()->IsStreamMuted(ssrc));
EXPECT_TRUE(voice_media_send_channel()->HasSource(ssrc));
EXPECT_FALSE(voice_media_send_channel()->IsStreamMuted(ssrc));
}
void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
void VerifyVideoChannelInput(uint32_t ssrc) {
// Verify that the media channel has a video source,
EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
EXPECT_TRUE(video_media_send_channel_->HasSource(ssrc));
}
void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
void VerifyVoiceChannelNoInput(uint32_t ssrc) {
// Verify that the media channel's source is reset.
EXPECT_FALSE(voice_media_channel()->HasSource(ssrc));
EXPECT_FALSE(voice_media_receive_channel()->HasSource(ssrc));
}
void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
void VerifyVideoChannelNoInput(uint32_t ssrc) {
// Verify that the media channel's source is reset.
EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
EXPECT_FALSE(video_media_receive_channel_->HasSource(ssrc));
}
void VerifyVoiceChannelOutput() {
// Verify that the volume is initialized to 1.
double volume;
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(1, volume);
}
void VerifyVideoChannelOutput() {
// Verify that the media channel has a sink.
EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
EXPECT_TRUE(video_media_receive_channel_->HasSink(kVideoSsrc));
}
void VerifyVoiceChannelNoOutput() {
// Verify that the volume is reset to 0.
double volume;
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0, volume);
}
void VerifyVideoChannelNoOutput() {
// Verify that the media channel's sink is reset.
EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
EXPECT_FALSE(video_media_receive_channel_->HasSink(kVideoSsrc));
}
// Verifies that the encoding layers contain the specified RIDs.
@ -483,7 +500,8 @@ class RtpSenderReceiverTest
RunDisableEncodingLayersTest(all_layers, disabled_layers,
video_rtp_sender_.get());
auto channel_parameters = video_media_channel_->GetRtpSendParameters(ssrc);
auto channel_parameters =
video_media_send_channel_->GetRtpSendParameters(ssrc);
ASSERT_EQ(channel_parameters.encodings.size(), all_layers.size());
for (size_t i = 0; i < all_layers.size(); ++i) {
EXPECT_EQ(all_layers[i], channel_parameters.encodings[i].rid);
@ -506,11 +524,17 @@ class RtpSenderReceiverTest
}
protected:
cricket::FakeVideoMediaChannel* video_media_channel() {
return video_media_channel_.get();
cricket::FakeVideoMediaChannel* video_media_send_channel() {
return video_media_send_channel_.get();
}
cricket::FakeVoiceMediaChannel* voice_media_channel() {
return voice_media_channel_.get();
cricket::FakeVoiceMediaChannel* voice_media_send_channel() {
return voice_media_send_channel_.get();
}
cricket::FakeVideoMediaChannel* video_media_receive_channel() {
return video_media_receive_channel_.get();
}
cricket::FakeVoiceMediaChannel* voice_media_receive_channel() {
return voice_media_receive_channel_.get();
}
test::RunLoop run_loop_;
@ -526,8 +550,10 @@ class RtpSenderReceiverTest
std::unique_ptr<cricket::FakeMediaEngine> media_engine_;
rtc::UniqueRandomIdGenerator ssrc_generator_;
cricket::FakeCall fake_call_;
std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_channel_;
std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_channel_;
std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_send_channel_;
std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_send_channel_;
std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_receive_channel_;
std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_receive_channel_;
std::unique_ptr<cricket::VoiceMediaSendChannel> voice_send_channel_;
std::unique_ptr<cricket::VideoMediaSendChannel> video_send_channel_;
rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
@ -585,7 +611,7 @@ TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
auto source = LocalAudioSource::Create(&options);
CreateAudioRtpSender(source);
EXPECT_EQ(true, voice_media_channel()->options().echo_cancellation);
EXPECT_EQ(true, voice_media_send_channel()->options().echo_cancellation);
DestroyAudioRtpSender();
}
@ -596,10 +622,10 @@ TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
CreateAudioRtpSender();
audio_track_->set_enabled(false);
EXPECT_TRUE(voice_media_channel()->IsStreamMuted(kAudioSsrc));
EXPECT_TRUE(voice_media_send_channel()->IsStreamMuted(kAudioSsrc));
audio_track_->set_enabled(true);
EXPECT_FALSE(voice_media_channel()->IsStreamMuted(kAudioSsrc));
EXPECT_FALSE(voice_media_send_channel()->IsStreamMuted(kAudioSsrc));
DestroyAudioRtpSender();
}
@ -610,19 +636,22 @@ TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
CreateAudioRtpReceiver();
double volume;
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(1, volume);
// Handling of enable/disable is applied asynchronously.
audio_track_->set_enabled(false);
run_loop_.Flush();
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0, volume);
audio_track_->set_enabled(true);
run_loop_.Flush();
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(1, volume);
DestroyAudioRtpReceiver();
@ -677,7 +706,8 @@ TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
double volume;
audio_track_->GetSource()->SetVolume(0.5);
run_loop_.Flush();
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0.5, volume);
// Disable the audio track, this should prevent setting the volume.
@ -685,19 +715,22 @@ TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
RTC_DCHECK_EQ(worker_thread_, run_loop_.task_queue());
run_loop_.Flush();
audio_track_->GetSource()->SetVolume(0.8);
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0, volume);
// When the track is enabled, the previously set volume should take effect.
audio_track_->set_enabled(true);
run_loop_.Flush();
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0.8, volume);
// Try changing volume one more time.
audio_track_->GetSource()->SetVolume(0.9);
run_loop_.Flush();
EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_TRUE(
voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
EXPECT_EQ(0.9, volume);
DestroyAudioRtpReceiver();
@ -706,16 +739,16 @@ TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
TEST_F(RtpSenderReceiverTest, AudioRtpReceiverDelay) {
CreateAudioRtpReceiver();
VerifyRtpReceiverDelayBehaviour(
voice_media_channel()->AsVoiceReceiveChannel(), audio_rtp_receiver_.get(),
kAudioSsrc);
voice_media_receive_channel()->AsVoiceReceiveChannel(),
audio_rtp_receiver_.get(), kAudioSsrc);
DestroyAudioRtpReceiver();
}
TEST_F(RtpSenderReceiverTest, VideoRtpReceiverDelay) {
CreateVideoRtpReceiver();
VerifyRtpReceiverDelayBehaviour(
video_media_channel()->AsVideoReceiveChannel(), video_rtp_receiver_.get(),
kVideoSsrc);
video_media_receive_channel()->AsVideoReceiveChannel(),
video_rtp_receiver_.get(), kVideoSsrc);
DestroyVideoRtpReceiver();
}
@ -953,9 +986,9 @@ TEST_F(RtpSenderReceiverTest, AudioSenderInitParametersMovedAfterNegotiation) {
std::vector<uint32_t> ssrcs(1, 1);
cricket::StreamParams stream_params =
cricket::CreateSimStreamParams("cname", ssrcs);
voice_media_channel()->AddSendStream(stream_params);
voice_media_send_channel()->AddSendStream(stream_params);
audio_rtp_sender_->SetMediaChannel(
voice_media_channel()->AsVoiceSendChannel());
voice_media_send_channel()->AsVoiceSendChannel());
audio_rtp_sender_->SetSsrc(1);
params = audio_rtp_sender_->GetParameters();
@ -1070,7 +1103,7 @@ TEST_F(RtpSenderReceiverTest, AudioSenderCantSetUnimplementedRtpParameters) {
TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
CreateAudioRtpSender();
EXPECT_EQ(-1, voice_media_channel()->max_bps());
EXPECT_EQ(-1, voice_media_send_channel()->max_bps());
webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
EXPECT_EQ(1U, params.encodings.size());
EXPECT_FALSE(params.encodings[0].max_bitrate_bps);
@ -1083,12 +1116,12 @@ TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
// Verify that the audio channel received the new parameters.
params = voice_media_channel()->GetRtpSendParameters(kAudioSsrc);
params = voice_media_send_channel()->GetRtpSendParameters(kAudioSsrc);
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
// Verify that the global bitrate limit has not been changed.
EXPECT_EQ(-1, voice_media_channel()->max_bps());
EXPECT_EQ(-1, voice_media_send_channel()->max_bps());
DestroyAudioRtpSender();
}
@ -1108,7 +1141,7 @@ TEST_F(RtpSenderReceiverTest, SetAudioBitratePriority) {
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
params = voice_media_channel()->GetRtpSendParameters(kAudioSsrc);
params = voice_media_send_channel()->GetRtpSendParameters(kAudioSsrc);
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
@ -1207,9 +1240,9 @@ TEST_F(RtpSenderReceiverTest, VideoSenderInitParametersMovedAfterNegotiation) {
ssrcs.push_back(kVideoSsrcSimulcast + i);
cricket::StreamParams stream_params =
cricket::CreateSimStreamParams("cname", ssrcs);
video_media_channel()->AddSendStream(stream_params);
video_media_send_channel()->AddSendStream(stream_params);
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast);
params = video_rtp_sender_->GetParameters();
@ -1248,9 +1281,9 @@ TEST_F(RtpSenderReceiverTest,
ssrcs.push_back(kVideoSsrcSimulcast + i);
cricket::StreamParams stream_params =
cricket::CreateSimStreamParams("cname", ssrcs);
video_media_channel()->AddSendStream(stream_params);
video_media_send_channel()->AddSendStream(stream_params);
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast);
params = video_rtp_sender_->GetParameters();
@ -1292,9 +1325,9 @@ TEST_F(RtpSenderReceiverDeathTest,
ssrcs.push_back(kVideoSsrcSimulcast + i);
cricket::StreamParams stream_params =
cricket::StreamParams::CreateLegacy(kVideoSsrc);
video_media_channel()->AddSendStream(stream_params);
video_media_send_channel()->AddSendStream(stream_params);
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
}
#endif
@ -1525,7 +1558,7 @@ TEST_F(RtpSenderReceiverTest, VideoSenderCantSetReadOnlyEncodingParameters) {
TEST_F(RtpSenderReceiverTest, SetVideoMinMaxSendBitrate) {
CreateVideoRtpSender();
EXPECT_EQ(-1, video_media_channel()->max_bps());
EXPECT_EQ(-1, video_media_send_channel()->max_bps());
webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
EXPECT_EQ(1U, params.encodings.size());
EXPECT_FALSE(params.encodings[0].min_bitrate_bps);
@ -1541,13 +1574,13 @@ TEST_F(RtpSenderReceiverTest, SetVideoMinMaxSendBitrate) {
EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
// Verify that the video channel received the new parameters.
params = video_media_channel()->GetRtpSendParameters(kVideoSsrc);
params = video_media_send_channel()->GetRtpSendParameters(kVideoSsrc);
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(100, params.encodings[0].min_bitrate_bps);
EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
// Verify that the global bitrate limit has not been changed.
EXPECT_EQ(-1, video_media_channel()->max_bps());
EXPECT_EQ(-1, video_media_send_channel()->max_bps());
DestroyVideoRtpSender();
}
@ -1565,7 +1598,8 @@ TEST_F(RtpSenderReceiverTest, SetVideoMinMaxSendBitrateSimulcast) {
EXPECT_TRUE(video_rtp_sender_->SetParameters(params).ok());
// Verify that the video channel received the new parameters.
params = video_media_channel()->GetRtpSendParameters(kVideoSsrcSimulcast);
params =
video_media_send_channel()->GetRtpSendParameters(kVideoSsrcSimulcast);
EXPECT_EQ(kVideoSimulcastLayerCount, params.encodings.size());
EXPECT_EQ(100, params.encodings[0].min_bitrate_bps);
EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
@ -1590,7 +1624,7 @@ TEST_F(RtpSenderReceiverTest, SetVideoBitratePriority) {
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
params = video_media_channel()->GetRtpSendParameters(kVideoSsrc);
params = video_media_send_channel()->GetRtpSendParameters(kVideoSsrc);
EXPECT_EQ(1U, params.encodings.size());
EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
@ -1644,23 +1678,23 @@ TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) {
video_track_->set_enabled(true);
// `video_track_` is not screencast by default.
EXPECT_EQ(false, video_media_channel()->options().is_screencast);
EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
// No content hint should be set by default.
EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
video_track_->content_hint());
// Setting detailed should turn a non-screencast source into screencast mode.
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
// Removing the content hint should turn the track back into non-screencast
// mode.
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
EXPECT_EQ(false, video_media_channel()->options().is_screencast);
EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
// Setting fluid should remain in non-screencast mode (its default).
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
EXPECT_EQ(false, video_media_channel()->options().is_screencast);
EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
// Setting text should have the same effect as Detailed
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kText);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
DestroyVideoRtpSender();
}
@ -1674,22 +1708,22 @@ TEST_F(RtpSenderReceiverTest,
video_track_->set_enabled(true);
// `video_track_` with a screencast source should be screencast by default.
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
// No content hint should be set by default.
EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
video_track_->content_hint());
// Setting fluid should turn a screencast source into non-screencast mode.
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
EXPECT_EQ(false, video_media_channel()->options().is_screencast);
EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
// Removing the content hint should turn the track back into screencast mode.
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
// Setting detailed should still remain in screencast mode (its default).
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
// Setting text should have the same effect as Detailed
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kText);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
DestroyVideoRtpSender();
}
@ -1710,21 +1744,21 @@ TEST_F(RtpSenderReceiverTest,
EXPECT_CALL(*set_streams_observer, OnSetStreams());
video_rtp_sender_->SetStreams({local_stream_->id()});
video_rtp_sender_->SetMediaChannel(
video_media_channel()->AsVideoSendChannel());
video_media_send_channel()->AsVideoSendChannel());
video_track_->set_enabled(true);
// Sender is not ready to send (no SSRC) so no option should have been set.
EXPECT_EQ(absl::nullopt, video_media_channel()->options().is_screencast);
EXPECT_EQ(absl::nullopt, video_media_send_channel()->options().is_screencast);
// Verify that the content hint is accounted for when video_rtp_sender_ does
// get enabled.
video_rtp_sender_->SetSsrc(kVideoSsrc);
EXPECT_EQ(true, video_media_channel()->options().is_screencast);
EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
// And removing the hint should go back to false (to verify that false was
// default correctly).
video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
EXPECT_EQ(false, video_media_channel()->options().is_screencast);
EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
DestroyVideoRtpSender();
}
@ -1763,22 +1797,22 @@ TEST_F(RtpSenderReceiverTest, InsertDtmf) {
auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
ASSERT_NE(nullptr, dtmf_sender);
EXPECT_EQ(0U, voice_media_channel()->dtmf_info_queue().size());
EXPECT_EQ(0U, voice_media_send_channel()->dtmf_info_queue().size());
// Insert DTMF
const int expected_duration = 90;
dtmf_sender->InsertDtmf("012", expected_duration, 100);
// Verify
ASSERT_EQ_WAIT(3U, voice_media_channel()->dtmf_info_queue().size(),
ASSERT_EQ_WAIT(3U, voice_media_send_channel()->dtmf_info_queue().size(),
kDefaultTimeout);
const uint32_t send_ssrc =
voice_media_channel()->send_streams()[0].first_ssrc();
EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[0],
voice_media_send_channel()->send_streams()[0].first_ssrc();
EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[0],
send_ssrc, 0, expected_duration));
EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[1],
EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[1],
send_ssrc, 1, expected_duration));
EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[2],
EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[2],
send_ssrc, 2, expected_duration));
}

View File

@ -28,8 +28,9 @@ using ::testing::Mock;
namespace cricket {
class MockVoiceMediaChannel : public VoiceMediaChannel {
public:
explicit MockVoiceMediaChannel(webrtc::TaskQueueBase* network_thread)
: VoiceMediaChannel(MediaChannel::Role::kBoth, network_thread) {}
MockVoiceMediaChannel(MediaChannel::Role role,
webrtc::TaskQueueBase* network_thread)
: VoiceMediaChannel(role, network_thread) {}
MOCK_METHOD(void,
SetInterface,