OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |