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

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

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