Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: webrtc/api/rtpsenderreceiver_unittest.cc

Issue 2046173002: Use VoiceChannel/VideoChannel directly from RtpSender/RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Moving code that needs to execute out of RTC_DCHECKs. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/api/rtpsender.cc ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <memory> 11 #include <memory>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 14
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webrtc/api/audiotrack.h" 17 #include "webrtc/api/audiotrack.h"
18 #include "webrtc/api/fakemediacontroller.h"
19 #include "webrtc/api/localaudiosource.h"
18 #include "webrtc/api/mediastream.h" 20 #include "webrtc/api/mediastream.h"
19 #include "webrtc/api/remoteaudiosource.h" 21 #include "webrtc/api/remoteaudiosource.h"
20 #include "webrtc/api/rtpreceiver.h" 22 #include "webrtc/api/rtpreceiver.h"
21 #include "webrtc/api/rtpsender.h" 23 #include "webrtc/api/rtpsender.h"
22 #include "webrtc/api/streamcollection.h" 24 #include "webrtc/api/streamcollection.h"
23 #include "webrtc/api/test/fakevideotracksource.h" 25 #include "webrtc/api/test/fakevideotracksource.h"
24 #include "webrtc/api/videotracksource.h" 26 #include "webrtc/api/videotracksource.h"
25 #include "webrtc/api/videotrack.h" 27 #include "webrtc/api/videotrack.h"
26 #include "webrtc/base/gunit.h" 28 #include "webrtc/base/gunit.h"
27 #include "webrtc/media/base/mediachannel.h" 29 #include "webrtc/media/base/mediachannel.h"
30 #include "webrtc/media/base/fakemediaengine.h"
31 #include "webrtc/media/engine/fakewebrtccall.h"
32 #include "webrtc/p2p/base/faketransportcontroller.h"
33 #include "webrtc/pc/channelmanager.h"
28 34
29 using ::testing::_; 35 using ::testing::_;
30 using ::testing::Exactly; 36 using ::testing::Exactly;
31 using ::testing::InvokeWithoutArgs; 37 using ::testing::InvokeWithoutArgs;
32 using ::testing::Return; 38 using ::testing::Return;
33 39
34 static const char kStreamLabel1[] = "local_stream_1"; 40 static const char kStreamLabel1[] = "local_stream_1";
35 static const char kVideoTrackId[] = "video_1"; 41 static const char kVideoTrackId[] = "video_1";
36 static const char kAudioTrackId[] = "audio_1"; 42 static const char kAudioTrackId[] = "audio_1";
37 static const uint32_t kVideoSsrc = 98; 43 static const uint32_t kVideoSsrc = 98;
38 static const uint32_t kVideoSsrc2 = 100; 44 static const uint32_t kVideoSsrc2 = 100;
39 static const uint32_t kAudioSsrc = 99; 45 static const uint32_t kAudioSsrc = 99;
40 static const uint32_t kAudioSsrc2 = 101; 46 static const uint32_t kAudioSsrc2 = 101;
41 47
42 namespace webrtc { 48 namespace webrtc {
43 49
44 // Helper class to test RtpSender/RtpReceiver. 50 class RtpSenderReceiverTest : public testing::Test {
45 class MockAudioProvider : public AudioProviderInterface {
46 public: 51 public:
47 // TODO(nisse): Valid overrides commented out, because the gmock 52 RtpSenderReceiverTest()
48 // methods don't use any override declarations, and we want to avoid 53 : // Create fake media engine/etc. so we can create channels to use to
49 // warnings from -Winconsistent-missing-override. See 54 // test RtpSenders/RtpReceivers.
50 // http://crbug.com/428099. 55 media_engine_(new cricket::FakeMediaEngine()),
51 ~MockAudioProvider() /* override */ {} 56 channel_manager_(media_engine_,
57 rtc::Thread::Current(),
58 rtc::Thread::Current()),
59 fake_call_(webrtc::Call::Config()),
60 fake_media_controller_(&channel_manager_, &fake_call_),
61 stream_(MediaStream::Create(kStreamLabel1)) {
62 // Create channels to be used by the RtpSenders and RtpReceivers.
63 channel_manager_.Init();
64 voice_channel_ = channel_manager_.CreateVoiceChannel(
65 &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
66 nullptr, false, cricket::AudioOptions());
67 video_channel_ = channel_manager_.CreateVideoChannel(
68 &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
69 nullptr, false, cricket::VideoOptions());
70 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
71 video_media_channel_ = media_engine_->GetVideoChannel(0);
72 RTC_CHECK(voice_channel_);
73 RTC_CHECK(video_channel_);
74 RTC_CHECK(voice_media_channel_);
75 RTC_CHECK(video_media_channel_);
52 76
53 MOCK_METHOD2(SetAudioPlayout, 77 // Create streams for predefined SSRCs. Streams need to exist in order
54 void(uint32_t ssrc, 78 // for the senders and receievers to apply parameters to them.
55 bool enable)); 79 // Normally these would be created by SetLocalDescription and
56 MOCK_METHOD4(SetAudioSend, 80 // SetRemoteDescription.
57 void(uint32_t ssrc, 81 voice_media_channel_->AddSendStream(
58 bool enable, 82 cricket::StreamParams::CreateLegacy(kAudioSsrc));
59 const cricket::AudioOptions& options, 83 voice_media_channel_->AddRecvStream(
60 cricket::AudioSource* source)); 84 cricket::StreamParams::CreateLegacy(kAudioSsrc));
61 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume)); 85 voice_media_channel_->AddSendStream(
62 MOCK_CONST_METHOD1(GetAudioRtpSendParameters, RtpParameters(uint32_t ssrc)); 86 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
63 MOCK_METHOD2(SetAudioRtpSendParameters, 87 voice_media_channel_->AddRecvStream(
64 bool(uint32_t ssrc, const RtpParameters&)); 88 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
65 MOCK_CONST_METHOD1(GetAudioRtpReceiveParameters, 89 video_media_channel_->AddSendStream(
66 RtpParameters(uint32_t ssrc)); 90 cricket::StreamParams::CreateLegacy(kVideoSsrc));
67 MOCK_METHOD2(SetAudioRtpReceiveParameters, 91 video_media_channel_->AddRecvStream(
68 bool(uint32_t ssrc, const RtpParameters&)); 92 cricket::StreamParams::CreateLegacy(kVideoSsrc));
69 93 video_media_channel_->AddSendStream(
70 void SetRawAudioSink( 94 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
71 uint32_t, std::unique_ptr<AudioSinkInterface> sink) /* override */ { 95 video_media_channel_->AddRecvStream(
72 sink_ = std::move(sink); 96 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
73 } 97 }
74 98
75 private: 99 void TearDown() override { channel_manager_.Terminate(); }
76 std::unique_ptr<AudioSinkInterface> sink_;
77 };
78
79 // Helper class to test RtpSender/RtpReceiver.
80 class MockVideoProvider : public VideoProviderInterface {
81 public:
82 virtual ~MockVideoProvider() {}
83 MOCK_METHOD3(SetVideoPlayout,
84 void(uint32_t ssrc,
85 bool enable,
86 rtc::VideoSinkInterface<cricket::VideoFrame>* sink));
87 MOCK_METHOD4(SetVideoSend,
88 void(uint32_t ssrc,
89 bool enable,
90 const cricket::VideoOptions* options,
91 rtc::VideoSourceInterface<cricket::VideoFrame>* source));
92
93 MOCK_CONST_METHOD1(GetVideoRtpSendParameters, RtpParameters(uint32_t ssrc));
94 MOCK_METHOD2(SetVideoRtpSendParameters,
95 bool(uint32_t ssrc, const RtpParameters&));
96 MOCK_CONST_METHOD1(GetVideoRtpReceiveParameters,
97 RtpParameters(uint32_t ssrc));
98 MOCK_METHOD2(SetVideoRtpReceiveParameters,
99 bool(uint32_t ssrc, const RtpParameters&));
100 };
101
102 class RtpSenderReceiverTest : public testing::Test {
103 public:
104 virtual void SetUp() {
105 stream_ = MediaStream::Create(kStreamLabel1);
106 }
107 100
108 void AddVideoTrack() { 101 void AddVideoTrack() {
109 rtc::scoped_refptr<VideoTrackSourceInterface> source( 102 rtc::scoped_refptr<VideoTrackSourceInterface> source(
110 FakeVideoTrackSource::Create()); 103 FakeVideoTrackSource::Create());
111 video_track_ = VideoTrack::Create(kVideoTrackId, source); 104 video_track_ = VideoTrack::Create(kVideoTrackId, source);
112 EXPECT_TRUE(stream_->AddTrack(video_track_)); 105 EXPECT_TRUE(stream_->AddTrack(video_track_));
113 } 106 }
114 107
115 void CreateAudioRtpSender() { 108 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
116 audio_track_ = AudioTrack::Create(kAudioTrackId, NULL); 109
110 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
111 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
117 EXPECT_TRUE(stream_->AddTrack(audio_track_)); 112 EXPECT_TRUE(stream_->AddTrack(audio_track_));
118 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
119 audio_rtp_sender_ = 113 audio_rtp_sender_ =
120 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(), 114 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
121 &audio_provider_, nullptr); 115 voice_channel_, nullptr);
122 audio_rtp_sender_->SetSsrc(kAudioSsrc); 116 audio_rtp_sender_->SetSsrc(kAudioSsrc);
117 VerifyVoiceChannelInput();
123 } 118 }
124 119
125 void CreateVideoRtpSender() { 120 void CreateVideoRtpSender() {
126 AddVideoTrack(); 121 AddVideoTrack();
127 EXPECT_CALL(video_provider_,
128 SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
129 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], 122 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
130 stream_->label(), &video_provider_); 123 stream_->label(), video_channel_);
131 video_rtp_sender_->SetSsrc(kVideoSsrc); 124 video_rtp_sender_->SetSsrc(kVideoSsrc);
125 VerifyVideoChannelInput();
132 } 126 }
133 127
134 void DestroyAudioRtpSender() { 128 void DestroyAudioRtpSender() {
135 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _))
136 .Times(1);
137 audio_rtp_sender_ = nullptr; 129 audio_rtp_sender_ = nullptr;
130 VerifyVoiceChannelNoInput();
138 } 131 }
139 132
140 void DestroyVideoRtpSender() { 133 void DestroyVideoRtpSender() {
141 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
142 .Times(1);
143 video_rtp_sender_ = nullptr; 134 video_rtp_sender_ = nullptr;
135 VerifyVideoChannelNoInput();
144 } 136 }
145 137
146 void CreateAudioRtpReceiver() { 138 void CreateAudioRtpReceiver() {
147 audio_track_ = AudioTrack::Create( 139 audio_track_ = AudioTrack::Create(
148 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL)); 140 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
149 EXPECT_TRUE(stream_->AddTrack(audio_track_)); 141 EXPECT_TRUE(stream_->AddTrack(audio_track_));
150 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
151 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId, 142 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
152 kAudioSsrc, &audio_provider_); 143 kAudioSsrc, voice_channel_);
153 audio_track_ = audio_rtp_receiver_->audio_track(); 144 audio_track_ = audio_rtp_receiver_->audio_track();
145 VerifyVoiceChannelOutput();
154 } 146 }
155 147
156 void CreateVideoRtpReceiver() { 148 void CreateVideoRtpReceiver() {
157 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, true, _));
158 video_rtp_receiver_ = 149 video_rtp_receiver_ =
159 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(), 150 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
160 kVideoSsrc, &video_provider_); 151 kVideoSsrc, video_channel_);
161 video_track_ = video_rtp_receiver_->video_track(); 152 video_track_ = video_rtp_receiver_->video_track();
153 VerifyVideoChannelOutput();
162 } 154 }
163 155
164 void DestroyAudioRtpReceiver() { 156 void DestroyAudioRtpReceiver() {
165 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
166 audio_rtp_receiver_ = nullptr; 157 audio_rtp_receiver_ = nullptr;
158 VerifyVoiceChannelNoOutput();
167 } 159 }
168 160
169 void DestroyVideoRtpReceiver() { 161 void DestroyVideoRtpReceiver() {
170 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, false, NULL));
171 video_rtp_receiver_ = nullptr; 162 video_rtp_receiver_ = nullptr;
163 VerifyVideoChannelNoOutput();
164 }
165
166 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
167
168 void VerifyVoiceChannelInput(uint32_t ssrc) {
169 // Verify that the media channel has an audio source, and the stream isn't
170 // muted.
171 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
172 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
173 }
174
175 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
176
177 void VerifyVideoChannelInput(uint32_t ssrc) {
178 // Verify that the media channel has a video source,
179 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
180 }
181
182 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
183
184 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
185 // Verify that the media channel's source is reset.
186 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
187 }
188
189 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
190
191 void VerifyVideoChannelNoInput(uint32_t ssrc) {
192 // Verify that the media channel's source is reset.
193 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
194 }
195
196 void VerifyVoiceChannelOutput() {
197 // Verify that the volume is initialized to 1.
198 double volume;
199 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
200 EXPECT_EQ(1, volume);
201 }
202
203 void VerifyVideoChannelOutput() {
204 // Verify that the media channel has a sink.
205 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
206 }
207
208 void VerifyVoiceChannelNoOutput() {
209 // Verify that the volume is reset to 0.
210 double volume;
211 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
212 EXPECT_EQ(0, volume);
213 }
214
215 void VerifyVideoChannelNoOutput() {
216 // Verify that the media channel's sink is reset.
217 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
172 } 218 }
173 219
174 protected: 220 protected:
175 MockAudioProvider audio_provider_; 221 cricket::FakeMediaEngine* media_engine_;
176 MockVideoProvider video_provider_; 222 cricket::FakeTransportController fake_transport_controller_;
223 cricket::ChannelManager channel_manager_;
224 cricket::FakeCall fake_call_;
225 cricket::FakeMediaController fake_media_controller_;
226 cricket::VoiceChannel* voice_channel_;
227 cricket::VideoChannel* video_channel_;
228 cricket::FakeVoiceMediaChannel* voice_media_channel_;
229 cricket::FakeVideoMediaChannel* video_media_channel_;
177 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_; 230 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
178 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_; 231 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
179 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_; 232 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
180 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_; 233 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
181 rtc::scoped_refptr<MediaStreamInterface> stream_; 234 rtc::scoped_refptr<MediaStreamInterface> stream_;
182 rtc::scoped_refptr<VideoTrackInterface> video_track_; 235 rtc::scoped_refptr<VideoTrackInterface> video_track_;
183 rtc::scoped_refptr<AudioTrackInterface> audio_track_; 236 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
184 }; 237 };
185 238
186 // Test that |audio_provider_| is notified when an audio track is associated 239 // Test that |voice_channel_| is updated when an audio track is associated
187 // and disassociated with an AudioRtpSender. 240 // and disassociated with an AudioRtpSender.
188 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) { 241 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
189 CreateAudioRtpSender(); 242 CreateAudioRtpSender();
190 DestroyAudioRtpSender(); 243 DestroyAudioRtpSender();
191 } 244 }
192 245
193 // Test that |video_provider_| is notified when a video track is associated and 246 // Test that |video_channel_| is updated when a video track is associated and
194 // disassociated with a VideoRtpSender. 247 // disassociated with a VideoRtpSender.
195 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) { 248 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
196 CreateVideoRtpSender(); 249 CreateVideoRtpSender();
197 DestroyVideoRtpSender(); 250 DestroyVideoRtpSender();
198 } 251 }
199 252
200 // Test that |audio_provider_| is notified when a remote audio and track is 253 // Test that |voice_channel_| is updated when a remote audio track is
201 // associated and disassociated with an AudioRtpReceiver. 254 // associated and disassociated with an AudioRtpReceiver.
202 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) { 255 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
203 CreateAudioRtpReceiver(); 256 CreateAudioRtpReceiver();
204 DestroyAudioRtpReceiver(); 257 DestroyAudioRtpReceiver();
205 } 258 }
206 259
207 // Test that |video_provider_| is notified when a remote 260 // Test that |video_channel_| is updated when a remote video track is
208 // video track is associated and disassociated with a VideoRtpReceiver. 261 // associated and disassociated with a VideoRtpReceiver.
209 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) { 262 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
210 CreateVideoRtpReceiver(); 263 CreateVideoRtpReceiver();
211 DestroyVideoRtpReceiver(); 264 DestroyVideoRtpReceiver();
212 } 265 }
213 266
214 TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) { 267 // Test that the AudioRtpSender applies options from the local audio source.
215 CreateAudioRtpSender(); 268 TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
269 cricket::AudioOptions options;
270 options.echo_cancellation = rtc::Optional<bool>(true);
271 auto source = LocalAudioSource::Create(
272 PeerConnectionFactoryInterface::Options(), &options);
273 CreateAudioRtpSender(source.get());
216 274
217 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)); 275 EXPECT_EQ(rtc::Optional<bool>(true),
218 audio_track_->set_enabled(false); 276 voice_media_channel_->options().echo_cancellation);
219
220 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
221 audio_track_->set_enabled(true);
222 277
223 DestroyAudioRtpSender(); 278 DestroyAudioRtpSender();
224 } 279 }
225 280
281 // Test that the stream is muted when the track is disabled, and unmuted when
282 // the track is enabled.
283 TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
284 CreateAudioRtpSender();
285
286 audio_track_->set_enabled(false);
287 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
288
289 audio_track_->set_enabled(true);
290 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
291
292 DestroyAudioRtpSender();
293 }
294
295 // Test that the volume is set to 0 when the track is disabled, and back to
296 // 1 when the track is enabled.
226 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) { 297 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
227 CreateAudioRtpReceiver(); 298 CreateAudioRtpReceiver();
228 299
229 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false)); 300 double volume;
301 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
302 EXPECT_EQ(1, volume);
303
230 audio_track_->set_enabled(false); 304 audio_track_->set_enabled(false);
305 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
306 EXPECT_EQ(0, volume);
231 307
232 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
233 audio_track_->set_enabled(true); 308 audio_track_->set_enabled(true);
309 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
310 EXPECT_EQ(1, volume);
234 311
235 DestroyAudioRtpReceiver(); 312 DestroyAudioRtpReceiver();
236 } 313 }
237 314
315 // Currently no action is taken when a remote video track is disabled or
316 // enabled, so there's nothing to test here, other than what is normally
317 // verified in DestroyVideoRtpSender.
238 TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) { 318 TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
239 CreateVideoRtpSender(); 319 CreateVideoRtpSender();
240 320
241 EXPECT_CALL(video_provider_,
242 SetVideoSend(kVideoSsrc, false, _, video_track_.get()));
243 video_track_->set_enabled(false); 321 video_track_->set_enabled(false);
244
245 EXPECT_CALL(video_provider_,
246 SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
247 video_track_->set_enabled(true); 322 video_track_->set_enabled(true);
248 323
249 DestroyVideoRtpSender(); 324 DestroyVideoRtpSender();
250 } 325 }
251 326
327 // Test that the state of the video track created by the VideoRtpReceiver is
328 // updated when the receiver is destroyed.
252 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) { 329 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
253 CreateVideoRtpReceiver(); 330 CreateVideoRtpReceiver();
254 331
255 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state()); 332 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
256 EXPECT_EQ(webrtc::MediaSourceInterface::kLive, 333 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
257 video_track_->GetSource()->state()); 334 video_track_->GetSource()->state());
258 335
259 DestroyVideoRtpReceiver(); 336 DestroyVideoRtpReceiver();
260 337
261 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state()); 338 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
262 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded, 339 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
263 video_track_->GetSource()->state()); 340 video_track_->GetSource()->state());
264 } 341 }
265 342
343 // Currently no action is taken when a remote video track is disabled or
344 // enabled, so there's nothing to test here, other than what is normally
345 // verified in DestroyVideoRtpReceiver.
266 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) { 346 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
267 CreateVideoRtpReceiver(); 347 CreateVideoRtpReceiver();
268 348
269 video_track_->set_enabled(false); 349 video_track_->set_enabled(false);
270
271 video_track_->set_enabled(true); 350 video_track_->set_enabled(true);
272 351
273 DestroyVideoRtpReceiver(); 352 DestroyVideoRtpReceiver();
274 } 353 }
275 354
355 // Test that the AudioRtpReceiver applies volume changes from the track source
356 // to the media channel.
276 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) { 357 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
277 CreateAudioRtpReceiver(); 358 CreateAudioRtpReceiver();
278 359
279 double volume = 0.5; 360 double volume;
280 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, volume)); 361 audio_track_->GetSource()->SetVolume(0.5);
281 audio_track_->GetSource()->SetVolume(volume); 362 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
363 EXPECT_EQ(0.5, volume);
282 364
283 // Disable the audio track, this should prevent setting the volume. 365 // Disable the audio track, this should prevent setting the volume.
284 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
285 audio_track_->set_enabled(false); 366 audio_track_->set_enabled(false);
286 audio_track_->GetSource()->SetVolume(1.0); 367 audio_track_->GetSource()->SetVolume(0.8);
287 368 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
288 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true)); 369 EXPECT_EQ(0, volume);
370
371 // When the track is enabled, the previously set volume should take effect.
289 audio_track_->set_enabled(true); 372 audio_track_->set_enabled(true);
290 373 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
291 double new_volume = 0.8; 374 EXPECT_EQ(0.8, volume);
292 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, new_volume)); 375
293 audio_track_->GetSource()->SetVolume(new_volume); 376 // Try changing volume one more time.
377 audio_track_->GetSource()->SetVolume(0.9);
378 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
379 EXPECT_EQ(0.9, volume);
294 380
295 DestroyAudioRtpReceiver(); 381 DestroyAudioRtpReceiver();
296 } 382 }
297 383
298 // Test that provider methods aren't called without both a track and an SSRC. 384 // Test that the media channel isn't enabled for sending if the audio sender
385 // doesn't have both a track and SSRC.
299 TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) { 386 TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
300 rtc::scoped_refptr<AudioRtpSender> sender = 387 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
301 new AudioRtpSender(&audio_provider_, nullptr);
302 rtc::scoped_refptr<AudioTrackInterface> track = 388 rtc::scoped_refptr<AudioTrackInterface> track =
303 AudioTrack::Create(kAudioTrackId, nullptr); 389 AudioTrack::Create(kAudioTrackId, nullptr);
304 EXPECT_TRUE(sender->SetTrack(track)); 390
305 EXPECT_TRUE(sender->SetTrack(nullptr)); 391 // Track but no SSRC.
306 sender->SetSsrc(kAudioSsrc); 392 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
307 sender->SetSsrc(0); 393 VerifyVoiceChannelNoInput();
308 // Just let it get destroyed and make sure it doesn't call any methods on the 394
309 // provider interface. 395 // SSRC but no track.
310 } 396 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
311 397 audio_rtp_sender_->SetSsrc(kAudioSsrc);
312 // Test that provider methods aren't called without both a track and an SSRC. 398 VerifyVoiceChannelNoInput();
399 }
400
401 // Test that the media channel isn't enabled for sending if the video sender
402 // doesn't have both a track and SSRC.
313 TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) { 403 TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
314 rtc::scoped_refptr<VideoRtpSender> sender = 404 video_rtp_sender_ = new VideoRtpSender(video_channel_);
315 new VideoRtpSender(&video_provider_); 405
316 EXPECT_TRUE(sender->SetTrack(video_track_)); 406 // Track but no SSRC.
317 EXPECT_TRUE(sender->SetTrack(nullptr)); 407 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
318 sender->SetSsrc(kVideoSsrc); 408 VerifyVideoChannelNoInput();
319 sender->SetSsrc(0); 409
320 // Just let it get destroyed and make sure it doesn't call any methods on the 410 // SSRC but no track.
321 // provider interface. 411 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
322 } 412 video_rtp_sender_->SetSsrc(kVideoSsrc);
323 413 VerifyVideoChannelNoInput();
324 // Test that an audio sender calls the expected methods on the provider once 414 }
325 // it has a track and SSRC, when the SSRC is set first. 415
416 // Test that the media channel is enabled for sending when the audio sender
417 // has a track and SSRC, when the SSRC is set first.
326 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) { 418 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
327 rtc::scoped_refptr<AudioRtpSender> sender = 419 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
328 new AudioRtpSender(&audio_provider_, nullptr);
329 rtc::scoped_refptr<AudioTrackInterface> track = 420 rtc::scoped_refptr<AudioTrackInterface> track =
330 AudioTrack::Create(kAudioTrackId, nullptr); 421 AudioTrack::Create(kAudioTrackId, nullptr);
331 sender->SetSsrc(kAudioSsrc); 422 audio_rtp_sender_->SetSsrc(kAudioSsrc);
332 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 423 audio_rtp_sender_->SetTrack(track);
333 sender->SetTrack(track); 424 VerifyVoiceChannelInput();
334 425
335 // Calls expected from destructor. 426 DestroyAudioRtpSender();
336 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 427 }
337 } 428
338 429 // Test that the media channel is enabled for sending when the audio sender
339 // Test that an audio sender calls the expected methods on the provider once 430 // has a track and SSRC, when the SSRC is set last.
340 // it has a track and SSRC, when the SSRC is set last.
341 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) { 431 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
342 rtc::scoped_refptr<AudioRtpSender> sender = 432 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
343 new AudioRtpSender(&audio_provider_, nullptr);
344 rtc::scoped_refptr<AudioTrackInterface> track = 433 rtc::scoped_refptr<AudioTrackInterface> track =
345 AudioTrack::Create(kAudioTrackId, nullptr); 434 AudioTrack::Create(kAudioTrackId, nullptr);
346 sender->SetTrack(track); 435 audio_rtp_sender_->SetTrack(track);
347 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 436 audio_rtp_sender_->SetSsrc(kAudioSsrc);
348 sender->SetSsrc(kAudioSsrc); 437 VerifyVoiceChannelInput();
349 438
350 // Calls expected from destructor. 439 DestroyAudioRtpSender();
351 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 440 }
352 } 441
353 442 // Test that the media channel is enabled for sending when the video sender
354 // Test that a video sender calls the expected methods on the provider once 443 // has a track and SSRC, when the SSRC is set first.
355 // it has a track and SSRC, when the SSRC is set first.
356 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) { 444 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
357 AddVideoTrack(); 445 AddVideoTrack();
358 rtc::scoped_refptr<VideoRtpSender> sender = 446 video_rtp_sender_ = new VideoRtpSender(video_channel_);
359 new VideoRtpSender(&video_provider_); 447 video_rtp_sender_->SetSsrc(kVideoSsrc);
360 sender->SetSsrc(kVideoSsrc); 448 video_rtp_sender_->SetTrack(video_track_);
361 EXPECT_CALL(video_provider_, 449 VerifyVideoChannelInput();
362 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 450
363 sender->SetTrack(video_track_); 451 DestroyVideoRtpSender();
364 452 }
365 // Calls expected from destructor. 453
366 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 454 // Test that the media channel is enabled for sending when the video sender
367 .Times(1); 455 // has a track and SSRC, when the SSRC is set last.
368 }
369
370 // Test that a video sender calls the expected methods on the provider once
371 // it has a track and SSRC, when the SSRC is set last.
372 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) { 456 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
373 AddVideoTrack(); 457 AddVideoTrack();
374 rtc::scoped_refptr<VideoRtpSender> sender = 458 video_rtp_sender_ = new VideoRtpSender(video_channel_);
375 new VideoRtpSender(&video_provider_); 459 video_rtp_sender_->SetTrack(video_track_);
376 sender->SetTrack(video_track_); 460 video_rtp_sender_->SetSsrc(kVideoSsrc);
377 EXPECT_CALL(video_provider_, 461 VerifyVideoChannelInput();
378 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 462
379 sender->SetSsrc(kVideoSsrc); 463 DestroyVideoRtpSender();
380 464 }
381 // Calls expected from destructor. 465
382 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 466 // Test that the media channel stops sending when the audio sender's SSRC is set
383 .Times(1); 467 // to 0.
384 }
385
386 // Test that the sender is disconnected from the provider when its SSRC is
387 // set to 0.
388 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) { 468 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
389 rtc::scoped_refptr<AudioTrackInterface> track = 469 CreateAudioRtpSender();
390 AudioTrack::Create(kAudioTrackId, nullptr); 470
391 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 471 audio_rtp_sender_->SetSsrc(0);
392 rtc::scoped_refptr<AudioRtpSender> sender = 472 VerifyVoiceChannelNoInput();
393 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 473 }
394 sender->SetSsrc(kAudioSsrc); 474
395 475 // Test that the media channel stops sending when the video sender's SSRC is set
396 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 476 // to 0.
397 sender->SetSsrc(0);
398
399 // Make sure it's SetSsrc that called methods on the provider, and not the
400 // destructor.
401 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
402 }
403
404 // Test that the sender is disconnected from the provider when its SSRC is
405 // set to 0.
406 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) { 477 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
407 AddVideoTrack(); 478 CreateAudioRtpSender();
408 EXPECT_CALL(video_provider_, 479
409 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 480 audio_rtp_sender_->SetSsrc(0);
410 rtc::scoped_refptr<VideoRtpSender> sender = 481 VerifyVideoChannelNoInput();
411 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_); 482 }
412 sender->SetSsrc(kVideoSsrc); 483
413 484 // Test that the media channel stops sending when the audio sender's track is
414 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 485 // set to null.
415 .Times(1);
416 sender->SetSsrc(0);
417
418 // Make sure it's SetSsrc that called methods on the provider, and not the
419 // destructor.
420 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
421 }
422
423 TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) { 486 TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
424 rtc::scoped_refptr<AudioTrackInterface> track = 487 CreateAudioRtpSender();
425 AudioTrack::Create(kAudioTrackId, nullptr); 488
426 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 489 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
427 rtc::scoped_refptr<AudioRtpSender> sender = 490 VerifyVoiceChannelNoInput();
428 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 491 }
429 sender->SetSsrc(kAudioSsrc); 492
430 493 // Test that the media channel stops sending when the video sender's track is
431 // Expect that SetAudioSend will be called before the reference to the track 494 // set to null.
432 // is released.
433 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, nullptr))
434 .Times(1)
435 .WillOnce(InvokeWithoutArgs([&track] {
436 EXPECT_LT(2, track->AddRef());
437 track->Release();
438 }));
439 EXPECT_TRUE(sender->SetTrack(nullptr));
440
441 // Make sure it's SetTrack that called methods on the provider, and not the
442 // destructor.
443 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
444 }
445
446 TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) { 495 TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
447 rtc::scoped_refptr<VideoTrackSourceInterface> source( 496 CreateVideoRtpSender();
448 FakeVideoTrackSource::Create()); 497
449 rtc::scoped_refptr<VideoTrackInterface> track = 498 video_rtp_sender_->SetSsrc(0);
450 VideoTrack::Create(kVideoTrackId, source); 499 VerifyVideoChannelNoInput();
451 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _, track.get())); 500 }
452 rtc::scoped_refptr<VideoRtpSender> sender = 501
453 new VideoRtpSender(track, kStreamLabel1, &video_provider_); 502 // Test that when the audio sender's SSRC is changed, the media channel stops
454 sender->SetSsrc(kVideoSsrc); 503 // sending with the old SSRC and starts sending with the new one.
455
456 // Expect that SetVideoSend will be called before the reference to the track
457 // is released.
458 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
459 .Times(1)
460 .WillOnce(InvokeWithoutArgs([&track] {
461 EXPECT_LT(2, track->AddRef());
462 track->Release();
463 }));
464 EXPECT_TRUE(sender->SetTrack(nullptr));
465
466 // Make sure it's SetTrack that called methods on the provider, and not the
467 // destructor.
468 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
469 }
470
471 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) { 504 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
472 AddVideoTrack(); 505 CreateAudioRtpSender();
473 rtc::scoped_refptr<AudioTrackInterface> track = 506
474 AudioTrack::Create(kAudioTrackId, nullptr); 507 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
475 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 508 VerifyVoiceChannelNoInput(kAudioSsrc);
476 rtc::scoped_refptr<AudioRtpSender> sender = 509 VerifyVoiceChannelInput(kAudioSsrc2);
477 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 510
478 sender->SetSsrc(kAudioSsrc); 511 audio_rtp_sender_ = nullptr;
479 512 VerifyVoiceChannelNoInput(kAudioSsrc2);
480 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 513 }
481 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, true, _, _)).Times(1); 514
482 sender->SetSsrc(kAudioSsrc2); 515 // Test that when the audio sender's SSRC is changed, the media channel stops
483 516 // sending with the old SSRC and starts sending with the new one.
484 // Calls expected from destructor.
485 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, false, _, _)).Times(1);
486 }
487
488 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) { 517 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
489 AddVideoTrack(); 518 CreateVideoRtpSender();
490 EXPECT_CALL(video_provider_, 519
491 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 520 video_rtp_sender_->SetSsrc(kVideoSsrc2);
492 rtc::scoped_refptr<VideoRtpSender> sender = 521 VerifyVideoChannelNoInput(kVideoSsrc);
493 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_); 522 VerifyVideoChannelInput(kVideoSsrc2);
494 sender->SetSsrc(kVideoSsrc); 523
495 524 video_rtp_sender_ = nullptr;
496 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 525 VerifyVideoChannelNoInput(kVideoSsrc2);
497 .Times(1);
498 EXPECT_CALL(video_provider_,
499 SetVideoSend(kVideoSsrc2, true, _, video_track_.get()))
500 .Times(1);
501 sender->SetSsrc(kVideoSsrc2);
502
503 // Calls expected from destructor.
504 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _, nullptr))
505 .Times(1);
506 } 526 }
507 527
508 TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) { 528 TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
509 CreateAudioRtpSender(); 529 CreateAudioRtpSender();
510 530
511 EXPECT_CALL(audio_provider_, GetAudioRtpSendParameters(kAudioSsrc))
512 .WillOnce(Return(RtpParameters()));
513 EXPECT_CALL(audio_provider_, SetAudioRtpSendParameters(kAudioSsrc, _))
514 .WillOnce(Return(true));
515 RtpParameters params = audio_rtp_sender_->GetParameters(); 531 RtpParameters params = audio_rtp_sender_->GetParameters();
532 EXPECT_EQ(1u, params.encodings.size());
516 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params)); 533 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
517 534
518 DestroyAudioRtpSender(); 535 DestroyAudioRtpSender();
519 } 536 }
520 537
538 TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
539 CreateAudioRtpSender();
540
541 EXPECT_EQ(-1, voice_media_channel_->max_bps());
542 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
543 EXPECT_EQ(1, params.encodings.size());
544 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
545 params.encodings[0].max_bitrate_bps = 1000;
546 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
547
548 // Read back the parameters and verify they have been changed.
549 params = audio_rtp_sender_->GetParameters();
550 EXPECT_EQ(1, params.encodings.size());
551 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
552
553 // Verify that the audio channel received the new parameters.
554 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
555 EXPECT_EQ(1, params.encodings.size());
556 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
557
558 // Verify that the global bitrate limit has not been changed.
559 EXPECT_EQ(-1, voice_media_channel_->max_bps());
560
561 DestroyAudioRtpSender();
562 }
563
521 TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) { 564 TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
522 CreateVideoRtpSender(); 565 CreateVideoRtpSender();
523 566
524 EXPECT_CALL(video_provider_, GetVideoRtpSendParameters(kVideoSsrc))
525 .WillOnce(Return(RtpParameters()));
526 EXPECT_CALL(video_provider_, SetVideoRtpSendParameters(kVideoSsrc, _))
527 .WillOnce(Return(true));
528 RtpParameters params = video_rtp_sender_->GetParameters(); 567 RtpParameters params = video_rtp_sender_->GetParameters();
568 EXPECT_EQ(1u, params.encodings.size());
529 EXPECT_TRUE(video_rtp_sender_->SetParameters(params)); 569 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
530 570
531 DestroyVideoRtpSender(); 571 DestroyVideoRtpSender();
532 } 572 }
533 573
574 TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
575 CreateVideoRtpSender();
576
577 EXPECT_EQ(-1, video_media_channel_->max_bps());
578 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
579 EXPECT_EQ(1, params.encodings.size());
580 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
581 params.encodings[0].max_bitrate_bps = 1000;
582 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
583
584 // Read back the parameters and verify they have been changed.
585 params = video_rtp_sender_->GetParameters();
586 EXPECT_EQ(1, params.encodings.size());
587 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
588
589 // Verify that the video channel received the new parameters.
590 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
591 EXPECT_EQ(1, params.encodings.size());
592 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
593
594 // Verify that the global bitrate limit has not been changed.
595 EXPECT_EQ(-1, video_media_channel_->max_bps());
596
597 DestroyVideoRtpSender();
598 }
599
534 TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) { 600 TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
535 CreateAudioRtpReceiver(); 601 CreateAudioRtpReceiver();
536 602
537 EXPECT_CALL(audio_provider_, GetAudioRtpReceiveParameters(kAudioSsrc))
538 .WillOnce(Return(RtpParameters()));
539 EXPECT_CALL(audio_provider_, SetAudioRtpReceiveParameters(kAudioSsrc, _))
540 .WillOnce(Return(true));
541 RtpParameters params = audio_rtp_receiver_->GetParameters(); 603 RtpParameters params = audio_rtp_receiver_->GetParameters();
604 EXPECT_EQ(1u, params.encodings.size());
542 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params)); 605 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
543 606
544 DestroyAudioRtpReceiver(); 607 DestroyAudioRtpReceiver();
545 } 608 }
546 609
547 TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) { 610 TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
548 CreateVideoRtpReceiver(); 611 CreateVideoRtpReceiver();
549 612
550 EXPECT_CALL(video_provider_, GetVideoRtpReceiveParameters(kVideoSsrc))
551 .WillOnce(Return(RtpParameters()));
552 EXPECT_CALL(video_provider_, SetVideoRtpReceiveParameters(kVideoSsrc, _))
553 .WillOnce(Return(true));
554 RtpParameters params = video_rtp_receiver_->GetParameters(); 613 RtpParameters params = video_rtp_receiver_->GetParameters();
614 EXPECT_EQ(1u, params.encodings.size());
555 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params)); 615 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
556 616
557 DestroyVideoRtpReceiver(); 617 DestroyVideoRtpReceiver();
558 } 618 }
559 619
560 } // namespace webrtc 620 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtpsender.cc ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698