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: media/cast/sender/video_sender_unittest.cc

Issue 555563003: Cast: Flow hw encoder initialization error to extensions API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed compile Created 6 years, 3 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 | « media/cast/sender/video_sender.cc ('k') | media/cast/test/end2end_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 void CreateSharedMemory( 44 void CreateSharedMemory(
45 size_t size, const ReceiveVideoEncodeMemoryCallback& callback) { 45 size_t size, const ReceiveVideoEncodeMemoryCallback& callback) {
46 scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); 46 scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
47 if (!shm->CreateAndMapAnonymous(size)) { 47 if (!shm->CreateAndMapAnonymous(size)) {
48 NOTREACHED(); 48 NOTREACHED();
49 return; 49 return;
50 } 50 }
51 callback.Run(shm.Pass()); 51 callback.Run(shm.Pass());
52 } 52 }
53 53
54 void SaveInitializationStatus(CastInitializationStatus* out_status,
55 CastInitializationStatus in_status) {
56 *out_status = in_status;
57 }
58
54 class TestPacketSender : public PacketSender { 59 class TestPacketSender : public PacketSender {
55 public: 60 public:
56 TestPacketSender() 61 TestPacketSender()
57 : number_of_rtp_packets_(0), 62 : number_of_rtp_packets_(0),
58 number_of_rtcp_packets_(0), 63 number_of_rtcp_packets_(0),
59 paused_(false) {} 64 paused_(false) {}
60 65
61 // A singular packet implies a RTCP packet. 66 // A singular packet implies a RTCP packet.
62 virtual bool SendPacket(PacketRef packet, 67 virtual bool SendPacket(PacketRef packet,
63 const base::Closure& cb) OVERRIDE { 68 const base::Closure& cb) OVERRIDE {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 PacketRef stored_packet_; 109 PacketRef stored_packet_;
105 110
106 DISALLOW_COPY_AND_ASSIGN(TestPacketSender); 111 DISALLOW_COPY_AND_ASSIGN(TestPacketSender);
107 }; 112 };
108 113
109 class PeerVideoSender : public VideoSender { 114 class PeerVideoSender : public VideoSender {
110 public: 115 public:
111 PeerVideoSender( 116 PeerVideoSender(
112 scoped_refptr<CastEnvironment> cast_environment, 117 scoped_refptr<CastEnvironment> cast_environment,
113 const VideoSenderConfig& video_config, 118 const VideoSenderConfig& video_config,
119 const CastInitializationCallback& initialization_cb,
114 const CreateVideoEncodeAcceleratorCallback& create_vea_cb, 120 const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
115 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb, 121 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
116 CastTransportSender* const transport_sender) 122 CastTransportSender* const transport_sender)
117 : VideoSender(cast_environment, 123 : VideoSender(cast_environment,
118 video_config, 124 video_config,
125 initialization_cb,
119 create_vea_cb, 126 create_vea_cb,
120 create_video_encode_mem_cb, 127 create_video_encode_mem_cb,
121 transport_sender) {} 128 transport_sender) {}
122 using VideoSender::OnReceivedCastFeedback; 129 using VideoSender::OnReceivedCastFeedback;
123 }; 130 };
124 } // namespace 131 } // namespace
125 132
126 class VideoSenderTest : public ::testing::Test { 133 class VideoSenderTest : public ::testing::Test {
127 protected: 134 protected:
128 VideoSenderTest() { 135 VideoSenderTest() {
(...skipping 22 matching lines...) Expand all
151 158
152 virtual void TearDown() OVERRIDE { 159 virtual void TearDown() OVERRIDE {
153 video_sender_.reset(); 160 video_sender_.reset();
154 task_runner_->RunTasks(); 161 task_runner_->RunTasks();
155 } 162 }
156 163
157 static void UpdateCastTransportStatus(CastTransportStatus status) { 164 static void UpdateCastTransportStatus(CastTransportStatus status) {
158 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status); 165 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status);
159 } 166 }
160 167
161 void InitEncoder(bool external) { 168 // If |external| is true then external video encoder (VEA) is used.
169 // |expect_init_sucess| is true if initialization is expected to succeed.
170 CastInitializationStatus InitEncoder(bool external,
171 bool expect_init_success) {
162 VideoSenderConfig video_config; 172 VideoSenderConfig video_config;
163 video_config.ssrc = 1; 173 video_config.ssrc = 1;
164 video_config.incoming_feedback_ssrc = 2; 174 video_config.incoming_feedback_ssrc = 2;
165 video_config.rtp_payload_type = 127; 175 video_config.rtp_payload_type = 127;
166 video_config.use_external_encoder = external; 176 video_config.use_external_encoder = external;
167 video_config.width = kWidth; 177 video_config.width = kWidth;
168 video_config.height = kHeight; 178 video_config.height = kHeight;
169 video_config.max_bitrate = 5000000; 179 video_config.max_bitrate = 5000000;
170 video_config.min_bitrate = 1000000; 180 video_config.min_bitrate = 1000000;
171 video_config.start_bitrate = 1000000; 181 video_config.start_bitrate = 1000000;
172 video_config.max_qp = 56; 182 video_config.max_qp = 56;
173 video_config.min_qp = 0; 183 video_config.min_qp = 0;
174 video_config.max_frame_rate = 30; 184 video_config.max_frame_rate = 30;
175 video_config.max_number_of_video_buffers_used = 1; 185 video_config.max_number_of_video_buffers_used = 1;
176 video_config.codec = CODEC_VIDEO_VP8; 186 video_config.codec = CODEC_VIDEO_VP8;
187 CastInitializationStatus status = STATUS_VIDEO_UNINITIALIZED;
177 188
178 if (external) { 189 if (external) {
179 scoped_ptr<VideoEncodeAccelerator> fake_vea( 190 test::FakeVideoEncodeAccelerator* fake_vea =
180 new test::FakeVideoEncodeAccelerator(task_runner_, 191 new test::FakeVideoEncodeAccelerator(
181 &stored_bitrates_)); 192 task_runner_, &stored_bitrates_);
193 fake_vea->SetWillInitializationSucceed(expect_init_success);
194 scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea);
182 video_sender_.reset( 195 video_sender_.reset(
183 new PeerVideoSender(cast_environment_, 196 new PeerVideoSender(cast_environment_,
184 video_config, 197 video_config,
198 base::Bind(&SaveInitializationStatus,
199 &status),
185 base::Bind(&CreateVideoEncodeAccelerator, 200 base::Bind(&CreateVideoEncodeAccelerator,
186 task_runner_, 201 task_runner_,
187 base::Passed(&fake_vea)), 202 base::Passed(&fake_vea_owner)),
188 base::Bind(&CreateSharedMemory), 203 base::Bind(&CreateSharedMemory),
189 transport_sender_.get())); 204 transport_sender_.get()));
190 } else { 205 } else {
191 video_sender_.reset( 206 video_sender_.reset(
192 new PeerVideoSender(cast_environment_, 207 new PeerVideoSender(cast_environment_,
193 video_config, 208 video_config,
209 base::Bind(&SaveInitializationStatus,
210 &status),
194 CreateDefaultVideoEncodeAcceleratorCallback(), 211 CreateDefaultVideoEncodeAcceleratorCallback(),
195 CreateDefaultVideoEncodeMemoryCallback(), 212 CreateDefaultVideoEncodeMemoryCallback(),
196 transport_sender_.get())); 213 transport_sender_.get()));
197 } 214 }
198 ASSERT_EQ(STATUS_VIDEO_INITIALIZED, video_sender_->InitializationResult()); 215 task_runner_->RunTasks();
216 return status;
199 } 217 }
200 218
201 scoped_refptr<media::VideoFrame> GetNewVideoFrame() { 219 scoped_refptr<media::VideoFrame> GetNewVideoFrame() {
202 gfx::Size size(kWidth, kHeight); 220 gfx::Size size(kWidth, kHeight);
203 scoped_refptr<media::VideoFrame> video_frame = 221 scoped_refptr<media::VideoFrame> video_frame =
204 media::VideoFrame::CreateFrame( 222 media::VideoFrame::CreateFrame(
205 VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta()); 223 VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta());
206 PopulateVideoFrame(video_frame.get(), last_pixel_value_++); 224 PopulateVideoFrame(video_frame.get(), last_pixel_value_++);
207 return video_frame; 225 return video_frame;
208 } 226 }
(...skipping 17 matching lines...) Expand all
226 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 244 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
227 scoped_ptr<PeerVideoSender> video_sender_; 245 scoped_ptr<PeerVideoSender> video_sender_;
228 std::vector<uint32> stored_bitrates_; 246 std::vector<uint32> stored_bitrates_;
229 scoped_refptr<CastEnvironment> cast_environment_; 247 scoped_refptr<CastEnvironment> cast_environment_;
230 int last_pixel_value_; 248 int last_pixel_value_;
231 249
232 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); 250 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest);
233 }; 251 };
234 252
235 TEST_F(VideoSenderTest, BuiltInEncoder) { 253 TEST_F(VideoSenderTest, BuiltInEncoder) {
236 InitEncoder(false); 254 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
237 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 255 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
238 256
239 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 257 const base::TimeTicks capture_time = testing_clock_->NowTicks();
240 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 258 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
241 259
242 task_runner_->RunTasks(); 260 task_runner_->RunTasks();
243 EXPECT_LE(1, transport_.number_of_rtp_packets()); 261 EXPECT_LE(1, transport_.number_of_rtp_packets());
244 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 262 EXPECT_LE(1, transport_.number_of_rtcp_packets());
245 } 263 }
246 264
247 TEST_F(VideoSenderTest, ExternalEncoder) { 265 TEST_F(VideoSenderTest, ExternalEncoder) {
248 InitEncoder(true); 266 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(true, true));
249 task_runner_->RunTasks();
250 267
251 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 268 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
252 269
253 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 270 const base::TimeTicks capture_time = testing_clock_->NowTicks();
254 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 271 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
255 task_runner_->RunTasks(); 272 task_runner_->RunTasks();
256 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 273 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
257 task_runner_->RunTasks(); 274 task_runner_->RunTasks();
258 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 275 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
259 task_runner_->RunTasks(); 276 task_runner_->RunTasks();
260 277
261 // Fixed bitrate is used for external encoder. Bitrate is only once 278 // Fixed bitrate is used for external encoder. Bitrate is only once
262 // to the encoder. 279 // to the encoder.
263 EXPECT_EQ(1u, stored_bitrates_.size()); 280 EXPECT_EQ(1u, stored_bitrates_.size());
281 video_sender_.reset(NULL);
282 task_runner_->RunTasks();
283 }
264 284
265 // We need to run the task to cleanup the GPU instance. 285 TEST_F(VideoSenderTest, ExternalEncoderInitFails) {
286 EXPECT_EQ(STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED,
287 InitEncoder(true, false));
266 video_sender_.reset(NULL); 288 video_sender_.reset(NULL);
267 task_runner_->RunTasks(); 289 task_runner_->RunTasks();
268 } 290 }
269 291
270 TEST_F(VideoSenderTest, RtcpTimer) { 292 TEST_F(VideoSenderTest, RtcpTimer) {
271 InitEncoder(false); 293 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
272 294
273 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 295 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
274 296
275 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 297 const base::TimeTicks capture_time = testing_clock_->NowTicks();
276 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 298 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
277 299
278 // Make sure that we send at least one RTCP packet. 300 // Make sure that we send at least one RTCP packet.
279 base::TimeDelta max_rtcp_timeout = 301 base::TimeDelta max_rtcp_timeout =
280 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); 302 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2);
281 303
282 RunTasks(max_rtcp_timeout.InMilliseconds()); 304 RunTasks(max_rtcp_timeout.InMilliseconds());
283 EXPECT_LE(1, transport_.number_of_rtp_packets()); 305 EXPECT_LE(1, transport_.number_of_rtp_packets());
284 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 306 EXPECT_LE(1, transport_.number_of_rtcp_packets());
285 // Build Cast msg and expect RTCP packet. 307 // Build Cast msg and expect RTCP packet.
286 RtcpCastMessage cast_feedback(1); 308 RtcpCastMessage cast_feedback(1);
287 cast_feedback.media_ssrc = 2; 309 cast_feedback.media_ssrc = 2;
288 cast_feedback.ack_frame_id = 0; 310 cast_feedback.ack_frame_id = 0;
289 video_sender_->OnReceivedCastFeedback(cast_feedback); 311 video_sender_->OnReceivedCastFeedback(cast_feedback);
290 RunTasks(max_rtcp_timeout.InMilliseconds()); 312 RunTasks(max_rtcp_timeout.InMilliseconds());
291 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 313 EXPECT_LE(1, transport_.number_of_rtcp_packets());
292 } 314 }
293 315
294 TEST_F(VideoSenderTest, ResendTimer) { 316 TEST_F(VideoSenderTest, ResendTimer) {
295 InitEncoder(false); 317 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
296 318
297 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 319 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
298 320
299 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 321 const base::TimeTicks capture_time = testing_clock_->NowTicks();
300 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 322 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
301 323
302 // ACK the key frame. 324 // ACK the key frame.
303 RtcpCastMessage cast_feedback(1); 325 RtcpCastMessage cast_feedback(1);
304 cast_feedback.media_ssrc = 2; 326 cast_feedback.media_ssrc = 2;
305 cast_feedback.ack_frame_id = 0; 327 cast_feedback.ack_frame_id = 0;
306 video_sender_->OnReceivedCastFeedback(cast_feedback); 328 video_sender_->OnReceivedCastFeedback(cast_feedback);
307 329
308 video_frame = GetNewVideoFrame(); 330 video_frame = GetNewVideoFrame();
309 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 331 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
310 332
311 base::TimeDelta max_resend_timeout = 333 base::TimeDelta max_resend_timeout =
312 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs); 334 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs);
313 335
314 // Make sure that we do a re-send. 336 // Make sure that we do a re-send.
315 RunTasks(max_resend_timeout.InMilliseconds()); 337 RunTasks(max_resend_timeout.InMilliseconds());
316 // Should have sent at least 3 packets. 338 // Should have sent at least 3 packets.
317 EXPECT_LE( 339 EXPECT_LE(
318 3, 340 3,
319 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 341 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
320 } 342 }
321 343
322 TEST_F(VideoSenderTest, LogAckReceivedEvent) { 344 TEST_F(VideoSenderTest, LogAckReceivedEvent) {
323 InitEncoder(false); 345 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
324 SimpleEventSubscriber event_subscriber; 346 SimpleEventSubscriber event_subscriber;
325 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber); 347 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber);
326 348
327 int num_frames = 10; 349 int num_frames = 10;
328 for (int i = 0; i < num_frames; i++) { 350 for (int i = 0; i < num_frames; i++) {
329 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 351 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
330 352
331 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 353 const base::TimeTicks capture_time = testing_clock_->NowTicks();
332 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 354 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
333 RunTasks(33); 355 RunTasks(33);
(...skipping 11 matching lines...) Expand all
345 367
346 ASSERT_TRUE(!frame_events.empty()); 368 ASSERT_TRUE(!frame_events.empty());
347 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type); 369 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type);
348 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); 370 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type);
349 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); 371 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id);
350 372
351 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber); 373 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber);
352 } 374 }
353 375
354 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) { 376 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) {
355 InitEncoder(false); 377 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
356 // Send a stream of frames and don't ACK; by default we shouldn't have more 378 // Send a stream of frames and don't ACK; by default we shouldn't have more
357 // than 4 frames in flight. 379 // than 4 frames in flight.
358 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 380 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
359 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 381 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
360 RunTasks(33); 382 RunTasks(33);
361 383
362 // Send 3 more frames and record the number of packets sent. 384 // Send 3 more frames and record the number of packets sent.
363 for (int i = 0; i < 3; ++i) { 385 for (int i = 0; i < 3; ++i) {
364 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 386 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
365 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 387 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
(...skipping 25 matching lines...) Expand all
391 413
392 // Empty the pipeline. 414 // Empty the pipeline.
393 RunTasks(100); 415 RunTasks(100);
394 // Should have sent at least 7 packets. 416 // Should have sent at least 7 packets.
395 EXPECT_LE( 417 EXPECT_LE(
396 7, 418 7,
397 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 419 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
398 } 420 }
399 421
400 TEST_F(VideoSenderTest, DuplicateAckRetransmit) { 422 TEST_F(VideoSenderTest, DuplicateAckRetransmit) {
401 InitEncoder(false); 423 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
402 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 424 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
403 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 425 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
404 RunTasks(33); 426 RunTasks(33);
405 RtcpCastMessage cast_feedback(1); 427 RtcpCastMessage cast_feedback(1);
406 cast_feedback.media_ssrc = 2; 428 cast_feedback.media_ssrc = 2;
407 cast_feedback.ack_frame_id = 0; 429 cast_feedback.ack_frame_id = 0;
408 430
409 // Send 3 more frames but don't ACK. 431 // Send 3 more frames but don't ACK.
410 for (int i = 0; i < 3; ++i) { 432 for (int i = 0; i < 3; ++i) {
411 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 433 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
(...skipping 19 matching lines...) Expand all
431 for (int i = 0; i < 3; ++i) { 453 for (int i = 0; i < 3; ++i) {
432 RtcpCastMessage ack_feedback(1); 454 RtcpCastMessage ack_feedback(1);
433 ack_feedback.media_ssrc = 2; 455 ack_feedback.media_ssrc = 2;
434 ack_feedback.ack_frame_id = 0; 456 ack_feedback.ack_frame_id = 0;
435 video_sender_->OnReceivedCastFeedback(ack_feedback); 457 video_sender_->OnReceivedCastFeedback(ack_feedback);
436 } 458 }
437 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 459 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
438 } 460 }
439 461
440 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { 462 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) {
441 InitEncoder(false); 463 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
442 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 464 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
443 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 465 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
444 RunTasks(33); 466 RunTasks(33);
445 RtcpCastMessage cast_feedback(1); 467 RtcpCastMessage cast_feedback(1);
446 cast_feedback.media_ssrc = 2; 468 cast_feedback.media_ssrc = 2;
447 cast_feedback.ack_frame_id = 0; 469 cast_feedback.ack_frame_id = 0;
448 470
449 // Send 2 more frames but don't ACK. 471 // Send 2 more frames but don't ACK.
450 for (int i = 0; i < 2; ++i) { 472 for (int i = 0; i < 2; ++i) {
451 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 473 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
(...skipping 30 matching lines...) Expand all
482 ack_feedback.ack_frame_id = 0; 504 ack_feedback.ack_frame_id = 0;
483 video_sender_->OnReceivedCastFeedback(ack_feedback); 505 video_sender_->OnReceivedCastFeedback(ack_feedback);
484 } 506 }
485 507
486 transport_.SetPause(false); 508 transport_.SetPause(false);
487 RunTasks(100); 509 RunTasks(100);
488 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 510 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
489 } 511 }
490 512
491 TEST_F(VideoSenderTest, AcksCancelRetransmits) { 513 TEST_F(VideoSenderTest, AcksCancelRetransmits) {
492 InitEncoder(false); 514 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
493 transport_.SetPause(true); 515 transport_.SetPause(true);
494 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); 516 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame();
495 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 517 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
496 RunTasks(33); 518 RunTasks(33);
497 519
498 // Frame should be in buffer, waiting. Now let's ack it. 520 // Frame should be in buffer, waiting. Now let's ack it.
499 RtcpCastMessage cast_feedback(1); 521 RtcpCastMessage cast_feedback(1);
500 cast_feedback.media_ssrc = 2; 522 cast_feedback.media_ssrc = 2;
501 cast_feedback.ack_frame_id = 0; 523 cast_feedback.ack_frame_id = 0;
502 video_sender_->OnReceivedCastFeedback(cast_feedback); 524 video_sender_->OnReceivedCastFeedback(cast_feedback);
503 525
504 transport_.SetPause(false); 526 transport_.SetPause(false);
505 RunTasks(33); 527 RunTasks(33);
506 EXPECT_EQ(0, transport_.number_of_rtp_packets()); 528 EXPECT_EQ(0, transport_.number_of_rtp_packets());
507 } 529 }
508 530
509 } // namespace cast 531 } // namespace cast
510 } // namespace media 532 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/end2end_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698