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

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

Issue 288103002: [Cast] EncodedAudioFrame+EncodedVideoFrame+reference_time --> EncodedFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/video_sender/video_sender.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « media/cast/video_sender/video_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698