| Index: webrtc/api/webrtcsession_unittest.cc
|
| diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
|
| index ee1d19b23adaee4cf899e28666b294dafc0aa127..fab5e1a56fcc4cd1c314fbfe84f8f5aeca06f1eb 100644
|
| --- a/webrtc/api/webrtcsession_unittest.cc
|
| +++ b/webrtc/api/webrtcsession_unittest.cc
|
| @@ -252,6 +252,11 @@
|
| cricket::TransportChannel* data_rtcp_transport_channel() {
|
| return rtcp_transport_channel(data_channel());
|
| }
|
| +
|
| + using webrtc::WebRtcSession::SetAudioPlayout;
|
| + using webrtc::WebRtcSession::SetAudioSend;
|
| + using webrtc::WebRtcSession::SetVideoPlayout;
|
| + using webrtc::WebRtcSession::SetVideoSend;
|
|
|
| private:
|
| cricket::TransportChannel* rtp_transport_channel(cricket::BaseChannel* ch) {
|
| @@ -3387,6 +3392,163 @@
|
| SetLocalDescriptionWithoutError(offer);
|
| }
|
|
|
| +TEST_F(WebRtcSessionTest, SetAudioPlayout) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + ASSERT_EQ(1u, channel->recv_streams().size());
|
| + uint32_t receive_ssrc = channel->recv_streams()[0].first_ssrc();
|
| + double volume;
|
| + EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume));
|
| + EXPECT_EQ(1, volume);
|
| + session_->SetAudioPlayout(receive_ssrc, false);
|
| + EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume));
|
| + EXPECT_EQ(0, volume);
|
| + session_->SetAudioPlayout(receive_ssrc, true);
|
| + EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume));
|
| + EXPECT_EQ(1, volume);
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, SetAudioMaxSendBitrate) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + uint32_t send_ssrc = channel->send_streams()[0].first_ssrc();
|
| + EXPECT_EQ(-1, channel->max_bps());
|
| + webrtc::RtpParameters params = session_->GetAudioRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, params.encodings.size());
|
| + EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
|
| + params.encodings[0].max_bitrate_bps = 1000;
|
| + EXPECT_TRUE(session_->SetAudioRtpSendParameters(send_ssrc, params));
|
| +
|
| + // Read back the parameters and verify they have been changed.
|
| + params = session_->GetAudioRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, params.encodings.size());
|
| + EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
|
| +
|
| + // Verify that the audio channel received the new parameters.
|
| + params = channel->GetRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, 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, channel->max_bps());
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, SetAudioSend) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + ASSERT_EQ(1u, channel->send_streams().size());
|
| + uint32_t send_ssrc = channel->send_streams()[0].first_ssrc();
|
| + EXPECT_FALSE(channel->IsStreamMuted(send_ssrc));
|
| +
|
| + cricket::AudioOptions options;
|
| + options.echo_cancellation = rtc::Optional<bool>(true);
|
| +
|
| + std::unique_ptr<FakeAudioSource> source(new FakeAudioSource());
|
| + session_->SetAudioSend(send_ssrc, false, options, source.get());
|
| + EXPECT_TRUE(channel->IsStreamMuted(send_ssrc));
|
| + EXPECT_EQ(rtc::Optional<bool>(), channel->options().echo_cancellation);
|
| + EXPECT_TRUE(source->sink() != nullptr);
|
| +
|
| + // This will trigger SetSink(nullptr) to the |source|.
|
| + session_->SetAudioSend(send_ssrc, true, options, nullptr);
|
| + EXPECT_FALSE(channel->IsStreamMuted(send_ssrc));
|
| + EXPECT_EQ(rtc::Optional<bool>(true), channel->options().echo_cancellation);
|
| + EXPECT_TRUE(source->sink() == nullptr);
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, AudioSourceForLocalStream) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + ASSERT_EQ(1u, channel->send_streams().size());
|
| + uint32_t send_ssrc = channel->send_streams()[0].first_ssrc();
|
| +
|
| + std::unique_ptr<FakeAudioSource> source(new FakeAudioSource());
|
| + cricket::AudioOptions options;
|
| + session_->SetAudioSend(send_ssrc, true, options, source.get());
|
| + EXPECT_TRUE(source->sink() != nullptr);
|
| +
|
| + // Delete the |source| and it will trigger OnClose() to the sink, and this
|
| + // will invalidate the |source_| pointer in the sink and prevent getting a
|
| + // SetSink(nullptr) callback afterwards.
|
| + source.reset();
|
| +
|
| + // This will trigger SetSink(nullptr) if no OnClose() callback.
|
| + session_->SetAudioSend(send_ssrc, true, options, nullptr);
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, SetVideoPlayout) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + ASSERT_LT(0u, channel->sinks().size());
|
| + EXPECT_TRUE(channel->sinks().begin()->second == NULL);
|
| + ASSERT_EQ(1u, channel->recv_streams().size());
|
| + uint32_t receive_ssrc = channel->recv_streams()[0].first_ssrc();
|
| + cricket::FakeVideoRenderer renderer;
|
| + session_->SetVideoPlayout(receive_ssrc, true, &renderer);
|
| + EXPECT_TRUE(channel->sinks().begin()->second == &renderer);
|
| + session_->SetVideoPlayout(receive_ssrc, false, &renderer);
|
| + EXPECT_TRUE(channel->sinks().begin()->second == NULL);
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, SetVideoMaxSendBitrate) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + uint32_t send_ssrc = channel->send_streams()[0].first_ssrc();
|
| + EXPECT_EQ(-1, channel->max_bps());
|
| + webrtc::RtpParameters params = session_->GetVideoRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, params.encodings.size());
|
| + EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
|
| + params.encodings[0].max_bitrate_bps = 1000;
|
| + EXPECT_TRUE(session_->SetVideoRtpSendParameters(send_ssrc, params));
|
| +
|
| + // Read back the parameters and verify they have been changed.
|
| + params = session_->GetVideoRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, params.encodings.size());
|
| + EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
|
| +
|
| + // Verify that the video channel received the new parameters.
|
| + params = channel->GetRtpSendParameters(send_ssrc);
|
| + EXPECT_EQ(1, 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, channel->max_bps());
|
| +}
|
| +
|
| +TEST_F(WebRtcSessionTest, SetVideoSend) {
|
| + Init();
|
| + SendAudioVideoStream1();
|
| + CreateAndSetRemoteOfferAndLocalAnswer();
|
| + cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0);
|
| + ASSERT_TRUE(channel != NULL);
|
| + ASSERT_EQ(1u, channel->send_streams().size());
|
| + uint32_t send_ssrc = channel->send_streams()[0].first_ssrc();
|
| + EXPECT_FALSE(channel->IsStreamMuted(send_ssrc));
|
| + cricket::VideoOptions* options = NULL;
|
| + session_->SetVideoSend(send_ssrc, false, options, nullptr);
|
| + EXPECT_TRUE(channel->IsStreamMuted(send_ssrc));
|
| + session_->SetVideoSend(send_ssrc, true, options, nullptr);
|
| + EXPECT_FALSE(channel->IsStreamMuted(send_ssrc));
|
| +}
|
| +
|
| TEST_F(WebRtcSessionTest, CanNotInsertDtmf) {
|
| TestCanInsertDtmf(false);
|
| }
|
|
|