OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 scoped_ptr<PeerVideoSender> video_sender_; | 203 scoped_ptr<PeerVideoSender> video_sender_; |
204 scoped_refptr<CastEnvironment> cast_environment_; | 204 scoped_refptr<CastEnvironment> cast_environment_; |
205 | 205 |
206 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); | 206 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); |
207 }; | 207 }; |
208 | 208 |
209 TEST_F(VideoSenderTest, BuiltInEncoder) { | 209 TEST_F(VideoSenderTest, BuiltInEncoder) { |
210 InitEncoder(false); | 210 InitEncoder(false); |
211 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 211 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
212 | 212 |
213 base::TimeTicks capture_time; | 213 const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
214 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 214 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
215 | 215 |
216 task_runner_->RunTasks(); | 216 task_runner_->RunTasks(); |
217 EXPECT_GE( | 217 EXPECT_GE( |
218 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), | 218 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), |
219 1); | 219 1); |
220 } | 220 } |
221 | 221 |
222 TEST_F(VideoSenderTest, ExternalEncoder) { | 222 TEST_F(VideoSenderTest, ExternalEncoder) { |
223 InitEncoder(true); | 223 InitEncoder(true); |
224 task_runner_->RunTasks(); | 224 task_runner_->RunTasks(); |
225 | 225 |
226 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 226 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
227 | 227 |
228 base::TimeTicks capture_time; | 228 const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
229 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 229 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
230 | 230 |
231 task_runner_->RunTasks(); | 231 task_runner_->RunTasks(); |
232 | 232 |
233 // We need to run the task to cleanup the GPU instance. | 233 // We need to run the task to cleanup the GPU instance. |
234 video_sender_.reset(NULL); | 234 video_sender_.reset(NULL); |
235 task_runner_->RunTasks(); | 235 task_runner_->RunTasks(); |
236 } | 236 } |
237 | 237 |
238 TEST_F(VideoSenderTest, RtcpTimer) { | 238 TEST_F(VideoSenderTest, RtcpTimer) { |
239 InitEncoder(false); | 239 InitEncoder(false); |
240 | 240 |
241 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 241 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
242 | 242 |
243 base::TimeTicks capture_time = testing_clock_->NowTicks(); | 243 const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
244 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 244 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
245 | 245 |
246 // Make sure that we send at least one RTCP packet. | 246 // Make sure that we send at least one RTCP packet. |
247 base::TimeDelta max_rtcp_timeout = | 247 base::TimeDelta max_rtcp_timeout = |
248 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); | 248 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); |
249 | 249 |
250 RunTasks(max_rtcp_timeout.InMilliseconds()); | 250 RunTasks(max_rtcp_timeout.InMilliseconds()); |
251 EXPECT_GE(transport_.number_of_rtp_packets(), 1); | 251 EXPECT_GE(transport_.number_of_rtp_packets(), 1); |
252 // Don't send RTCP prior to receiving an ACK. | 252 // Don't send RTCP prior to receiving an ACK. |
253 EXPECT_GE(transport_.number_of_rtcp_packets(), 0); | 253 EXPECT_GE(transport_.number_of_rtcp_packets(), 0); |
254 // Build Cast msg and expect RTCP packet. | 254 // Build Cast msg and expect RTCP packet. |
255 RtcpCastMessage cast_feedback(1); | 255 RtcpCastMessage cast_feedback(1); |
256 cast_feedback.media_ssrc_ = 2; | 256 cast_feedback.media_ssrc_ = 2; |
257 cast_feedback.ack_frame_id_ = 0; | 257 cast_feedback.ack_frame_id_ = 0; |
258 video_sender_->OnReceivedCastFeedback(cast_feedback); | 258 video_sender_->OnReceivedCastFeedback(cast_feedback); |
259 RunTasks(max_rtcp_timeout.InMilliseconds()); | 259 RunTasks(max_rtcp_timeout.InMilliseconds()); |
260 EXPECT_GE(transport_.number_of_rtcp_packets(), 1); | 260 EXPECT_GE(transport_.number_of_rtcp_packets(), 1); |
261 } | 261 } |
262 | 262 |
263 TEST_F(VideoSenderTest, ResendTimer) { | 263 TEST_F(VideoSenderTest, ResendTimer) { |
264 InitEncoder(false); | 264 InitEncoder(false); |
265 | 265 |
266 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 266 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
267 | 267 |
268 base::TimeTicks capture_time; | 268 const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
269 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 269 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
270 | 270 |
271 // ACK the key frame. | 271 // ACK the key frame. |
272 RtcpCastMessage cast_feedback(1); | 272 RtcpCastMessage cast_feedback(1); |
273 cast_feedback.media_ssrc_ = 2; | 273 cast_feedback.media_ssrc_ = 2; |
274 cast_feedback.ack_frame_id_ = 0; | 274 cast_feedback.ack_frame_id_ = 0; |
275 video_sender_->OnReceivedCastFeedback(cast_feedback); | 275 video_sender_->OnReceivedCastFeedback(cast_feedback); |
276 | 276 |
277 video_frame = GetNewVideoFrame(); | 277 video_frame = GetNewVideoFrame(); |
278 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 278 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
(...skipping 11 matching lines...) Expand all Loading... |
290 | 290 |
291 TEST_F(VideoSenderTest, LogAckReceivedEvent) { | 291 TEST_F(VideoSenderTest, LogAckReceivedEvent) { |
292 InitEncoder(false); | 292 InitEncoder(false); |
293 SimpleEventSubscriber event_subscriber; | 293 SimpleEventSubscriber event_subscriber; |
294 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber); | 294 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber); |
295 | 295 |
296 int num_frames = 10; | 296 int num_frames = 10; |
297 for (int i = 0; i < num_frames; i++) { | 297 for (int i = 0; i < num_frames; i++) { |
298 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 298 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
299 | 299 |
300 base::TimeTicks capture_time; | 300 const base::TimeTicks capture_time = testing_clock_->NowTicks(); |
301 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | 301 video_sender_->InsertRawVideoFrame(video_frame, capture_time); |
302 RunTasks(33); | 302 RunTasks(33); |
303 } | 303 } |
304 | 304 |
305 task_runner_->RunTasks(); | 305 task_runner_->RunTasks(); |
306 | 306 |
307 RtcpCastMessage cast_feedback(1); | 307 RtcpCastMessage cast_feedback(1); |
308 cast_feedback.ack_frame_id_ = num_frames - 1; | 308 cast_feedback.ack_frame_id_ = num_frames - 1; |
309 | 309 |
310 video_sender_->OnReceivedCastFeedback(cast_feedback); | 310 video_sender_->OnReceivedCastFeedback(cast_feedback); |
311 | 311 |
312 std::vector<FrameEvent> frame_events; | 312 std::vector<FrameEvent> frame_events; |
313 event_subscriber.GetFrameEventsAndReset(&frame_events); | 313 event_subscriber.GetFrameEventsAndReset(&frame_events); |
314 | 314 |
315 ASSERT_TRUE(!frame_events.empty()); | 315 ASSERT_TRUE(!frame_events.empty()); |
316 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type); | 316 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type); |
317 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); | 317 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); |
318 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); | 318 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); |
319 | 319 |
320 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber); | 320 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber); |
321 } | 321 } |
322 | 322 |
323 TEST_F(VideoSenderTest, StopSendingIntheAbsenceOfAck) { | 323 TEST_F(VideoSenderTest, StopSendingIntheAbsenceOfAck) { |
324 InitEncoder(false); | 324 InitEncoder(false); |
325 // Send a stream of frames and don't ACK; by default we shouldn't have more | 325 // Send a stream of frames and don't ACK; by default we shouldn't have more |
326 // than 4 frames in flight. | 326 // than 4 frames in flight. |
327 // Store size in packets of frame 0, as it should be resent sue to timeout. | 327 // Store size in packets of frame 0, as it should be resent sue to timeout. |
328 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 328 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
329 base::TimeTicks capture_time; | 329 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
330 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | |
331 RunTasks(33); | 330 RunTasks(33); |
332 const int size_of_frame0 = transport_.number_of_rtp_packets(); | 331 const int size_of_frame0 = transport_.number_of_rtp_packets(); |
333 | 332 |
334 for (int i = 1; i < 4; ++i) { | 333 for (int i = 1; i < 4; ++i) { |
335 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 334 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
336 base::TimeTicks capture_time; | 335 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
337 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | |
338 RunTasks(33); | 336 RunTasks(33); |
339 } | 337 } |
340 | 338 |
341 const int number_of_packets_sent = transport_.number_of_rtp_packets(); | 339 const int number_of_packets_sent = transport_.number_of_rtp_packets(); |
342 // Send 4 more frames - they should not be sent to the transport, as we have | 340 // Send 4 more frames - they should not be sent to the transport, as we have |
343 // received any acks. | 341 // received any acks. |
344 for (int i = 0; i < 3; ++i) { | 342 for (int i = 0; i < 3; ++i) { |
345 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); | 343 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
346 base::TimeTicks capture_time; | 344 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
347 video_sender_->InsertRawVideoFrame(video_frame, capture_time); | |
348 RunTasks(33); | 345 RunTasks(33); |
349 } | 346 } |
350 | 347 |
351 EXPECT_EQ(number_of_packets_sent + size_of_frame0, | 348 EXPECT_EQ(number_of_packets_sent + size_of_frame0, |
352 transport_.number_of_rtp_packets()); | 349 transport_.number_of_rtp_packets()); |
353 | 350 |
354 // Start acking and make sure we're back to steady-state. | 351 // Start acking and make sure we're back to steady-state. |
355 RtcpCastMessage cast_feedback(1); | 352 RtcpCastMessage cast_feedback(1); |
356 cast_feedback.media_ssrc_ = 2; | 353 cast_feedback.media_ssrc_ = 2; |
357 cast_feedback.ack_frame_id_ = 0; | 354 cast_feedback.ack_frame_id_ = 0; |
358 video_sender_->OnReceivedCastFeedback(cast_feedback); | 355 video_sender_->OnReceivedCastFeedback(cast_feedback); |
359 EXPECT_GE( | 356 EXPECT_GE( |
360 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), | 357 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), |
361 4); | 358 4); |
362 | 359 |
363 // Empty the pipeline. | 360 // Empty the pipeline. |
364 RunTasks(100); | 361 RunTasks(100); |
365 // Should have sent at least 7 packets. | 362 // Should have sent at least 7 packets. |
366 EXPECT_GE( | 363 EXPECT_GE( |
367 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), | 364 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets(), |
368 7); | 365 7); |
369 } | 366 } |
370 | 367 |
371 } // namespace cast | 368 } // namespace cast |
372 } // namespace media | 369 } // namespace media |
OLD | NEW |