| 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 |