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

Side by Side Diff: media/cast/sender/video_sender_unittest.cc

Issue 901833004: [Cast] Repurpose CastInitializationStatus for variable frame size support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile fixes. Created 5 years, 10 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 void CreateSharedMemory( 45 void CreateSharedMemory(
46 size_t size, const ReceiveVideoEncodeMemoryCallback& callback) { 46 size_t size, const ReceiveVideoEncodeMemoryCallback& callback) {
47 scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); 47 scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
48 if (!shm->CreateAndMapAnonymous(size)) { 48 if (!shm->CreateAndMapAnonymous(size)) {
49 NOTREACHED(); 49 NOTREACHED();
50 return; 50 return;
51 } 51 }
52 callback.Run(shm.Pass()); 52 callback.Run(shm.Pass());
53 } 53 }
54 54
55 void SaveInitializationStatus(CastInitializationStatus* out_status, 55 void SaveOperationalStatus(OperationalStatus* out_status,
56 CastInitializationStatus in_status) { 56 OperationalStatus in_status) {
57 DVLOG(1) << "OperationalStatus transitioning from " << *out_status << " to "
58 << in_status;
57 *out_status = in_status; 59 *out_status = in_status;
58 } 60 }
59 61
60 class TestPacketSender : public PacketSender { 62 class TestPacketSender : public PacketSender {
61 public: 63 public:
62 TestPacketSender() 64 TestPacketSender()
63 : number_of_rtp_packets_(0), 65 : number_of_rtp_packets_(0),
64 number_of_rtcp_packets_(0), 66 number_of_rtcp_packets_(0),
65 paused_(false) {} 67 paused_(false) {}
66 68
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 int number_of_rtcp_packets_; 106 int number_of_rtcp_packets_;
105 bool paused_; 107 bool paused_;
106 base::Closure callback_; 108 base::Closure callback_;
107 PacketRef stored_packet_; 109 PacketRef stored_packet_;
108 110
109 DISALLOW_COPY_AND_ASSIGN(TestPacketSender); 111 DISALLOW_COPY_AND_ASSIGN(TestPacketSender);
110 }; 112 };
111 113
112 void IgnorePlayoutDelayChanges(base::TimeDelta unused_playout_delay) { 114 void IgnorePlayoutDelayChanges(base::TimeDelta unused_playout_delay) {
113 } 115 }
116
114 class PeerVideoSender : public VideoSender { 117 class PeerVideoSender : public VideoSender {
115 public: 118 public:
116 PeerVideoSender( 119 PeerVideoSender(
117 scoped_refptr<CastEnvironment> cast_environment, 120 scoped_refptr<CastEnvironment> cast_environment,
118 const VideoSenderConfig& video_config, 121 const VideoSenderConfig& video_config,
119 const CastInitializationCallback& initialization_cb, 122 const StatusChangeCallback& status_change_cb,
120 const CreateVideoEncodeAcceleratorCallback& create_vea_cb, 123 const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
121 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb, 124 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
122 CastTransportSender* const transport_sender) 125 CastTransportSender* const transport_sender)
123 : VideoSender(cast_environment, 126 : VideoSender(cast_environment,
124 video_config, 127 video_config,
125 initialization_cb, 128 status_change_cb,
126 create_vea_cb, 129 create_vea_cb,
127 create_video_encode_mem_cb, 130 create_video_encode_mem_cb,
128 transport_sender, 131 transport_sender,
129 base::Bind(&IgnorePlayoutDelayChanges)) {} 132 base::Bind(&IgnorePlayoutDelayChanges)) {}
130 using VideoSender::OnReceivedCastFeedback; 133 using VideoSender::OnReceivedCastFeedback;
131 }; 134 };
132 } // namespace 135 } // namespace
133 136
134 class VideoSenderTest : public ::testing::Test { 137 class VideoSenderTest : public ::testing::Test {
135 protected: 138 protected:
136 VideoSenderTest() 139 VideoSenderTest()
137 : stored_bitrates_(NULL) { 140 : testing_clock_(new base::SimpleTestTickClock()),
138 testing_clock_ = new base::SimpleTestTickClock(); 141 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
142 cast_environment_(new CastEnvironment(
143 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
144 task_runner_,
145 task_runner_,
146 task_runner_)),
147 operational_status_(STATUS_UNINITIALIZED),
148 stored_bitrates_(NULL) {
139 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 149 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
140 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_);
141 cast_environment_ =
142 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
143 task_runner_,
144 task_runner_,
145 task_runner_);
146 last_pixel_value_ = kPixelValue; 150 last_pixel_value_ = kPixelValue;
147 net::IPEndPoint dummy_endpoint; 151 net::IPEndPoint dummy_endpoint;
148 transport_sender_.reset(new CastTransportSenderImpl( 152 transport_sender_.reset(new CastTransportSenderImpl(
149 NULL, 153 NULL,
150 testing_clock_, 154 testing_clock_,
151 dummy_endpoint, 155 dummy_endpoint,
152 dummy_endpoint, 156 dummy_endpoint,
153 make_scoped_ptr(new base::DictionaryValue), 157 make_scoped_ptr(new base::DictionaryValue),
154 base::Bind(&UpdateCastTransportStatus), 158 base::Bind(&UpdateCastTransportStatus),
155 BulkRawEventsCallback(), 159 BulkRawEventsCallback(),
156 base::TimeDelta(), 160 base::TimeDelta(),
157 task_runner_, 161 task_runner_,
158 PacketReceiverCallback(), 162 PacketReceiverCallback(),
159 &transport_)); 163 &transport_));
160 } 164 }
161 165
162 ~VideoSenderTest() override {} 166 ~VideoSenderTest() override {}
163 167
164 void TearDown() override { 168 void TearDown() override {
165 video_sender_.reset(); 169 video_sender_.reset();
166 task_runner_->RunTasks(); 170 task_runner_->RunTasks();
167 } 171 }
168 172
169 static void UpdateCastTransportStatus(CastTransportStatus status) { 173 static void UpdateCastTransportStatus(CastTransportStatus status) {
170 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status); 174 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status);
171 } 175 }
172 176
173 // If |external| is true then external video encoder (VEA) is used. 177 // If |external| is true then external video encoder (VEA) is used.
174 // |expect_init_sucess| is true if initialization is expected to succeed. 178 // |expect_init_sucess| is true if initialization is expected to succeed.
175 CastInitializationStatus InitEncoder(bool external, 179 void InitEncoder(bool external, bool expect_init_success) {
176 bool expect_init_success) {
177 VideoSenderConfig video_config; 180 VideoSenderConfig video_config;
178 video_config.ssrc = 1; 181 video_config.ssrc = 1;
179 video_config.receiver_ssrc = 2; 182 video_config.receiver_ssrc = 2;
180 video_config.rtp_payload_type = 127; 183 video_config.rtp_payload_type = 127;
181 video_config.use_external_encoder = external; 184 video_config.use_external_encoder = external;
182 video_config.width = kWidth; 185 video_config.width = kWidth;
183 video_config.height = kHeight; 186 video_config.height = kHeight;
184 video_config.max_bitrate = 5000000; 187 video_config.max_bitrate = 5000000;
185 video_config.min_bitrate = 1000000; 188 video_config.min_bitrate = 1000000;
186 video_config.start_bitrate = 1000000; 189 video_config.start_bitrate = 1000000;
187 video_config.max_qp = 56; 190 video_config.max_qp = 56;
188 video_config.min_qp = 0; 191 video_config.min_qp = 0;
189 video_config.max_frame_rate = 30; 192 video_config.max_frame_rate = 30;
190 video_config.max_number_of_video_buffers_used = 1; 193 video_config.max_number_of_video_buffers_used = 1;
191 video_config.codec = CODEC_VIDEO_VP8; 194 video_config.codec = CODEC_VIDEO_VP8;
192 CastInitializationStatus status = STATUS_VIDEO_UNINITIALIZED; 195
196 ASSERT_EQ(operational_status_, STATUS_UNINITIALIZED);
193 197
194 if (external) { 198 if (external) {
195 media::FakeVideoEncodeAccelerator* fake_vea = 199 media::FakeVideoEncodeAccelerator* fake_vea =
196 new media::FakeVideoEncodeAccelerator(task_runner_); 200 new media::FakeVideoEncodeAccelerator(task_runner_);
197 stored_bitrates_ = &fake_vea->stored_bitrates(); 201 stored_bitrates_ = &fake_vea->stored_bitrates();
198 fake_vea->SetWillInitializationSucceed(expect_init_success); 202 fake_vea->SetWillInitializationSucceed(expect_init_success);
199 scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea); 203 scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea);
200 video_sender_.reset( 204 video_sender_.reset(
201 new PeerVideoSender(cast_environment_, 205 new PeerVideoSender(cast_environment_,
202 video_config, 206 video_config,
203 base::Bind(&SaveInitializationStatus, 207 base::Bind(&SaveOperationalStatus,
204 &status), 208 &operational_status_),
205 base::Bind(&CreateVideoEncodeAccelerator, 209 base::Bind(&CreateVideoEncodeAccelerator,
206 task_runner_, 210 task_runner_,
207 base::Passed(&fake_vea_owner)), 211 base::Passed(&fake_vea_owner)),
208 base::Bind(&CreateSharedMemory), 212 base::Bind(&CreateSharedMemory),
209 transport_sender_.get())); 213 transport_sender_.get()));
210 } else { 214 } else {
211 video_sender_.reset( 215 video_sender_.reset(
212 new PeerVideoSender(cast_environment_, 216 new PeerVideoSender(cast_environment_,
213 video_config, 217 video_config,
214 base::Bind(&SaveInitializationStatus, 218 base::Bind(&SaveOperationalStatus,
215 &status), 219 &operational_status_),
216 CreateDefaultVideoEncodeAcceleratorCallback(), 220 CreateDefaultVideoEncodeAcceleratorCallback(),
217 CreateDefaultVideoEncodeMemoryCallback(), 221 CreateDefaultVideoEncodeMemoryCallback(),
218 transport_sender_.get())); 222 transport_sender_.get()));
219 } 223 }
220 task_runner_->RunTasks(); 224 task_runner_->RunTasks();
221 return status;
222 } 225 }
223 226
224 scoped_refptr<media::VideoFrame> GetNewVideoFrame() { 227 scoped_refptr<media::VideoFrame> GetNewVideoFrame() {
225 if (first_frame_timestamp_.is_null()) 228 if (first_frame_timestamp_.is_null())
226 first_frame_timestamp_ = testing_clock_->NowTicks(); 229 first_frame_timestamp_ = testing_clock_->NowTicks();
227 gfx::Size size(kWidth, kHeight); 230 gfx::Size size(kWidth, kHeight);
228 scoped_refptr<media::VideoFrame> video_frame = 231 scoped_refptr<media::VideoFrame> video_frame =
229 media::VideoFrame::CreateFrame( 232 media::VideoFrame::CreateFrame(
230 VideoFrame::I420, size, gfx::Rect(size), size, 233 VideoFrame::I420, size, gfx::Rect(size), size,
231 testing_clock_->NowTicks() - first_frame_timestamp_); 234 testing_clock_->NowTicks() - first_frame_timestamp_);
(...skipping 10 matching lines...) Expand all
242 VideoFrame::I420, size, gfx::Rect(size), size, 245 VideoFrame::I420, size, gfx::Rect(size), size,
243 testing_clock_->NowTicks() - first_frame_timestamp_); 246 testing_clock_->NowTicks() - first_frame_timestamp_);
244 PopulateVideoFrameWithNoise(video_frame.get()); 247 PopulateVideoFrameWithNoise(video_frame.get());
245 return video_frame; 248 return video_frame;
246 } 249 }
247 250
248 void RunTasks(int during_ms) { 251 void RunTasks(int during_ms) {
249 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms)); 252 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms));
250 } 253 }
251 254
252 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 255 base::SimpleTestTickClock* const testing_clock_; // Owned by CastEnvironment.
256 const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
257 const scoped_refptr<CastEnvironment> cast_environment_;
258 OperationalStatus operational_status_;
253 TestPacketSender transport_; 259 TestPacketSender transport_;
254 scoped_ptr<CastTransportSenderImpl> transport_sender_; 260 scoped_ptr<CastTransportSenderImpl> transport_sender_;
255 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
256 scoped_ptr<PeerVideoSender> video_sender_; 261 scoped_ptr<PeerVideoSender> video_sender_;
257 const std::vector<uint32>* stored_bitrates_; // Owned by |video_sender_|. 262 const std::vector<uint32>* stored_bitrates_; // Owned by |video_sender_|.
258 scoped_refptr<CastEnvironment> cast_environment_;
259 int last_pixel_value_; 263 int last_pixel_value_;
260 base::TimeTicks first_frame_timestamp_; 264 base::TimeTicks first_frame_timestamp_;
261 265
262 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); 266 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest);
263 }; 267 };
264 268
265 TEST_F(VideoSenderTest, BuiltInEncoder) { 269 TEST_F(VideoSenderTest, BuiltInEncoder) {
266 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 270 InitEncoder(false, true);
271 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
272
267 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 273 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
268 274
269 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 275 const base::TimeTicks reference_time = testing_clock_->NowTicks();
270 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 276 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
271 277
272 task_runner_->RunTasks(); 278 task_runner_->RunTasks();
273 EXPECT_LE(1, transport_.number_of_rtp_packets()); 279 EXPECT_LE(1, transport_.number_of_rtp_packets());
274 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 280 EXPECT_LE(1, transport_.number_of_rtcp_packets());
275 } 281 }
276 282
277 TEST_F(VideoSenderTest, ExternalEncoder) { 283 TEST_F(VideoSenderTest, ExternalEncoder) {
278 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(true, true)); 284 InitEncoder(true, true);
285 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
279 286
280 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 287 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
281 288
282 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 289 const base::TimeTicks reference_time = testing_clock_->NowTicks();
283 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 290 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
284 task_runner_->RunTasks(); 291 task_runner_->RunTasks();
285 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 292 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
286 task_runner_->RunTasks(); 293 task_runner_->RunTasks();
287 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 294 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
288 task_runner_->RunTasks(); 295 task_runner_->RunTasks();
289 296
290 // Fixed bitrate is used for external encoder. Bitrate is only once 297 // Fixed bitrate is used for external encoder. Bitrate is only once
291 // to the encoder. 298 // to the encoder.
292 EXPECT_EQ(1u, stored_bitrates_->size()); 299 EXPECT_EQ(1u, stored_bitrates_->size());
293 video_sender_.reset(NULL); 300 video_sender_.reset(NULL);
294 task_runner_->RunTasks(); 301 task_runner_->RunTasks();
295 } 302 }
296 303
297 TEST_F(VideoSenderTest, ExternalEncoderInitFails) { 304 TEST_F(VideoSenderTest, ExternalEncoderInitFails) {
298 EXPECT_EQ(STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED, 305 InitEncoder(true, false);
299 InitEncoder(true, false)); 306 EXPECT_EQ(STATUS_CODEC_INIT_FAILED, operational_status_);
307
300 video_sender_.reset(NULL); 308 video_sender_.reset(NULL);
301 task_runner_->RunTasks(); 309 task_runner_->RunTasks();
302 } 310 }
303 311
304 TEST_F(VideoSenderTest, RtcpTimer) { 312 TEST_F(VideoSenderTest, RtcpTimer) {
305 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 313 InitEncoder(false, true);
314 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
306 315
307 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 316 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
308 317
309 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 318 const base::TimeTicks reference_time = testing_clock_->NowTicks();
310 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 319 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
311 320
312 // Make sure that we send at least one RTCP packet. 321 // Make sure that we send at least one RTCP packet.
313 base::TimeDelta max_rtcp_timeout = 322 base::TimeDelta max_rtcp_timeout =
314 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); 323 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2);
315 324
316 RunTasks(max_rtcp_timeout.InMilliseconds()); 325 RunTasks(max_rtcp_timeout.InMilliseconds());
317 EXPECT_LE(1, transport_.number_of_rtp_packets()); 326 EXPECT_LE(1, transport_.number_of_rtp_packets());
318 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 327 EXPECT_LE(1, transport_.number_of_rtcp_packets());
319 // Build Cast msg and expect RTCP packet. 328 // Build Cast msg and expect RTCP packet.
320 RtcpCastMessage cast_feedback(1); 329 RtcpCastMessage cast_feedback(1);
321 cast_feedback.media_ssrc = 2; 330 cast_feedback.media_ssrc = 2;
322 cast_feedback.ack_frame_id = 0; 331 cast_feedback.ack_frame_id = 0;
323 video_sender_->OnReceivedCastFeedback(cast_feedback); 332 video_sender_->OnReceivedCastFeedback(cast_feedback);
324 RunTasks(max_rtcp_timeout.InMilliseconds()); 333 RunTasks(max_rtcp_timeout.InMilliseconds());
325 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 334 EXPECT_LE(1, transport_.number_of_rtcp_packets());
326 } 335 }
327 336
328 TEST_F(VideoSenderTest, ResendTimer) { 337 TEST_F(VideoSenderTest, ResendTimer) {
329 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 338 InitEncoder(false, true);
339 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
330 340
331 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 341 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
332 342
333 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 343 const base::TimeTicks reference_time = testing_clock_->NowTicks();
334 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 344 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
335 345
336 // ACK the key frame. 346 // ACK the key frame.
337 RtcpCastMessage cast_feedback(1); 347 RtcpCastMessage cast_feedback(1);
338 cast_feedback.media_ssrc = 2; 348 cast_feedback.media_ssrc = 2;
339 cast_feedback.ack_frame_id = 0; 349 cast_feedback.ack_frame_id = 0;
340 video_sender_->OnReceivedCastFeedback(cast_feedback); 350 video_sender_->OnReceivedCastFeedback(cast_feedback);
341 351
342 video_frame = GetNewVideoFrame(); 352 video_frame = GetNewVideoFrame();
343 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 353 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
344 354
345 base::TimeDelta max_resend_timeout = 355 base::TimeDelta max_resend_timeout =
346 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs); 356 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs);
347 357
348 // Make sure that we do a re-send. 358 // Make sure that we do a re-send.
349 RunTasks(max_resend_timeout.InMilliseconds()); 359 RunTasks(max_resend_timeout.InMilliseconds());
350 // Should have sent at least 3 packets. 360 // Should have sent at least 3 packets.
351 EXPECT_LE( 361 EXPECT_LE(
352 3, 362 3,
353 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 363 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
354 } 364 }
355 365
356 TEST_F(VideoSenderTest, LogAckReceivedEvent) { 366 TEST_F(VideoSenderTest, LogAckReceivedEvent) {
357 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 367 InitEncoder(false, true);
368 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
369
358 SimpleEventSubscriber event_subscriber; 370 SimpleEventSubscriber event_subscriber;
359 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber); 371 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber);
360 372
361 int num_frames = 10; 373 int num_frames = 10;
362 for (int i = 0; i < num_frames; i++) { 374 for (int i = 0; i < num_frames; i++) {
363 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 375 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
364 376
365 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 377 const base::TimeTicks reference_time = testing_clock_->NowTicks();
366 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 378 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
367 RunTasks(33); 379 RunTasks(33);
(...skipping 11 matching lines...) Expand all
379 391
380 ASSERT_TRUE(!frame_events.empty()); 392 ASSERT_TRUE(!frame_events.empty());
381 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type); 393 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type);
382 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); 394 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type);
383 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); 395 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id);
384 396
385 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber); 397 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber);
386 } 398 }
387 399
388 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) { 400 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) {
389 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 401 InitEncoder(false, true);
402 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
403
390 // Send a stream of frames and don't ACK; by default we shouldn't have more 404 // Send a stream of frames and don't ACK; by default we shouldn't have more
391 // than 4 frames in flight. 405 // than 4 frames in flight.
392 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 406 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
393 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 407 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
394 RunTasks(33); 408 RunTasks(33);
395 409
396 // Send 3 more frames and record the number of packets sent. 410 // Send 3 more frames and record the number of packets sent.
397 for (int i = 0; i < 3; ++i) { 411 for (int i = 0; i < 3; ++i) {
398 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 412 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
399 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 413 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
(...skipping 25 matching lines...) Expand all
425 439
426 // Empty the pipeline. 440 // Empty the pipeline.
427 RunTasks(100); 441 RunTasks(100);
428 // Should have sent at least 7 packets. 442 // Should have sent at least 7 packets.
429 EXPECT_LE( 443 EXPECT_LE(
430 7, 444 7,
431 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 445 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
432 } 446 }
433 447
434 TEST_F(VideoSenderTest, DuplicateAckRetransmit) { 448 TEST_F(VideoSenderTest, DuplicateAckRetransmit) {
435 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 449 InitEncoder(false, true);
450 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
451
436 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 452 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
437 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 453 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
438 RunTasks(33); 454 RunTasks(33);
439 RtcpCastMessage cast_feedback(1); 455 RtcpCastMessage cast_feedback(1);
440 cast_feedback.media_ssrc = 2; 456 cast_feedback.media_ssrc = 2;
441 cast_feedback.ack_frame_id = 0; 457 cast_feedback.ack_frame_id = 0;
442 458
443 // Send 3 more frames but don't ACK. 459 // Send 3 more frames but don't ACK.
444 for (int i = 0; i < 3; ++i) { 460 for (int i = 0; i < 3; ++i) {
445 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 461 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
(...skipping 19 matching lines...) Expand all
465 for (int i = 0; i < 3; ++i) { 481 for (int i = 0; i < 3; ++i) {
466 RtcpCastMessage ack_feedback(1); 482 RtcpCastMessage ack_feedback(1);
467 ack_feedback.media_ssrc = 2; 483 ack_feedback.media_ssrc = 2;
468 ack_feedback.ack_frame_id = 0; 484 ack_feedback.ack_frame_id = 0;
469 video_sender_->OnReceivedCastFeedback(ack_feedback); 485 video_sender_->OnReceivedCastFeedback(ack_feedback);
470 } 486 }
471 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 487 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
472 } 488 }
473 489
474 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { 490 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) {
475 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 491 InitEncoder(false, true);
492 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
493
476 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 494 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
477 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 495 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
478 RunTasks(33); 496 RunTasks(33);
479 RtcpCastMessage cast_feedback(1); 497 RtcpCastMessage cast_feedback(1);
480 cast_feedback.media_ssrc = 2; 498 cast_feedback.media_ssrc = 2;
481 cast_feedback.ack_frame_id = 0; 499 cast_feedback.ack_frame_id = 0;
482 500
483 // Send 2 more frames but don't ACK. 501 // Send 2 more frames but don't ACK.
484 for (int i = 0; i < 2; ++i) { 502 for (int i = 0; i < 2; ++i) {
485 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 503 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
(...skipping 30 matching lines...) Expand all
516 ack_feedback.ack_frame_id = 0; 534 ack_feedback.ack_frame_id = 0;
517 video_sender_->OnReceivedCastFeedback(ack_feedback); 535 video_sender_->OnReceivedCastFeedback(ack_feedback);
518 } 536 }
519 537
520 transport_.SetPause(false); 538 transport_.SetPause(false);
521 RunTasks(100); 539 RunTasks(100);
522 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 540 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
523 } 541 }
524 542
525 TEST_F(VideoSenderTest, AcksCancelRetransmits) { 543 TEST_F(VideoSenderTest, AcksCancelRetransmits) {
526 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 544 InitEncoder(false, true);
545 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
546
527 transport_.SetPause(true); 547 transport_.SetPause(true);
528 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); 548 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame();
529 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 549 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
530 RunTasks(33); 550 RunTasks(33);
531 551
532 // Frame should be in buffer, waiting. Now let's ack it. 552 // Frame should be in buffer, waiting. Now let's ack it.
533 RtcpCastMessage cast_feedback(1); 553 RtcpCastMessage cast_feedback(1);
534 cast_feedback.media_ssrc = 2; 554 cast_feedback.media_ssrc = 2;
535 cast_feedback.ack_frame_id = 0; 555 cast_feedback.ack_frame_id = 0;
536 video_sender_->OnReceivedCastFeedback(cast_feedback); 556 video_sender_->OnReceivedCastFeedback(cast_feedback);
537 557
538 transport_.SetPause(false); 558 transport_.SetPause(false);
539 RunTasks(33); 559 RunTasks(33);
540 EXPECT_EQ(0, transport_.number_of_rtp_packets()); 560 EXPECT_EQ(0, transport_.number_of_rtp_packets());
541 } 561 }
542 562
543 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) { 563 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) {
544 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 564 InitEncoder(false, true);
565 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
566
545 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get()); 567 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get());
546 } 568 }
547 569
548 } // namespace cast 570 } // namespace cast
549 } // namespace media 571 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698