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 <queue> | 7 #include <queue> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 power_source_ = new TestPowerSource(); | 228 power_source_ = new TestPowerSource(); |
229 power_monitor_.reset(new base::PowerMonitor( | 229 power_monitor_.reset(new base::PowerMonitor( |
230 std::unique_ptr<TestPowerSource>(power_source_))); | 230 std::unique_ptr<TestPowerSource>(power_source_))); |
231 | 231 |
232 cast_environment_ = new CastEnvironment( | 232 cast_environment_ = new CastEnvironment( |
233 std::unique_ptr<base::TickClock>(clock_), message_loop_.task_runner(), | 233 std::unique_ptr<base::TickClock>(clock_), message_loop_.task_runner(), |
234 message_loop_.task_runner(), message_loop_.task_runner()); | 234 message_loop_.task_runner(), message_loop_.task_runner()); |
235 encoder_.reset(new H264VideoToolboxEncoder( | 235 encoder_.reset(new H264VideoToolboxEncoder( |
236 cast_environment_, video_sender_config_, | 236 cast_environment_, video_sender_config_, |
237 base::Bind(&SaveOperationalStatus, &operational_status_))); | 237 base::Bind(&SaveOperationalStatus, &operational_status_))); |
238 message_loop_.RunUntilIdle(); | 238 base::RunLoop().RunUntilIdle(); |
239 EXPECT_EQ(STATUS_INITIALIZED, operational_status_); | 239 EXPECT_EQ(STATUS_INITIALIZED, operational_status_); |
240 } | 240 } |
241 | 241 |
242 void TearDown() final { | 242 void TearDown() final { |
243 encoder_.reset(); | 243 encoder_.reset(); |
244 message_loop_.RunUntilIdle(); | 244 base::RunLoop().RunUntilIdle(); |
245 power_monitor_.reset(); | 245 power_monitor_.reset(); |
246 } | 246 } |
247 | 247 |
248 void AdvanceClockAndVideoFrameTimestamp() { | 248 void AdvanceClockAndVideoFrameTimestamp() { |
249 clock_->Advance(base::TimeDelta::FromMilliseconds(33)); | 249 clock_->Advance(base::TimeDelta::FromMilliseconds(33)); |
250 frame_->set_timestamp(frame_->timestamp() + | 250 frame_->set_timestamp(frame_->timestamp() + |
251 base::TimeDelta::FromMilliseconds(33)); | 251 base::TimeDelta::FromMilliseconds(33)); |
252 } | 252 } |
253 | 253 |
254 static void SetUpTestCase() { | 254 static void SetUpTestCase() { |
(...skipping 30 matching lines...) Expand all Loading... |
285 TEST_F(H264VideoToolboxEncoderTest, CheckFrameMetadataSequence) { | 285 TEST_F(H264VideoToolboxEncoderTest, CheckFrameMetadataSequence) { |
286 scoped_refptr<MetadataRecorder> metadata_recorder(new MetadataRecorder()); | 286 scoped_refptr<MetadataRecorder> metadata_recorder(new MetadataRecorder()); |
287 VideoEncoder::FrameEncodedCallback cb = base::Bind( | 287 VideoEncoder::FrameEncodedCallback cb = base::Bind( |
288 &MetadataRecorder::CompareFrameWithExpected, metadata_recorder.get()); | 288 &MetadataRecorder::CompareFrameWithExpected, metadata_recorder.get()); |
289 | 289 |
290 metadata_recorder->PushExpectation( | 290 metadata_recorder->PushExpectation( |
291 FrameId::first(), FrameId::first(), | 291 FrameId::first(), FrameId::first(), |
292 RtpTimeTicks::FromTimeDelta(frame_->timestamp(), kVideoFrequency), | 292 RtpTimeTicks::FromTimeDelta(frame_->timestamp(), kVideoFrequency), |
293 clock_->NowTicks()); | 293 clock_->NowTicks()); |
294 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); | 294 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); |
295 message_loop_.RunUntilIdle(); | 295 base::RunLoop().RunUntilIdle(); |
296 | 296 |
297 for (FrameId frame_id = FrameId::first() + 1; | 297 for (FrameId frame_id = FrameId::first() + 1; |
298 frame_id < FrameId::first() + 10; ++frame_id) { | 298 frame_id < FrameId::first() + 10; ++frame_id) { |
299 AdvanceClockAndVideoFrameTimestamp(); | 299 AdvanceClockAndVideoFrameTimestamp(); |
300 metadata_recorder->PushExpectation( | 300 metadata_recorder->PushExpectation( |
301 frame_id, frame_id - 1, | 301 frame_id, frame_id - 1, |
302 RtpTimeTicks::FromTimeDelta(frame_->timestamp(), kVideoFrequency), | 302 RtpTimeTicks::FromTimeDelta(frame_->timestamp(), kVideoFrequency), |
303 clock_->NowTicks()); | 303 clock_->NowTicks()); |
304 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); | 304 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); |
305 } | 305 } |
306 | 306 |
307 encoder_.reset(); | 307 encoder_.reset(); |
308 message_loop_.RunUntilIdle(); | 308 base::RunLoop().RunUntilIdle(); |
309 | 309 |
310 EXPECT_EQ(10, metadata_recorder->count_frames_delivered()); | 310 EXPECT_EQ(10, metadata_recorder->count_frames_delivered()); |
311 } | 311 } |
312 | 312 |
313 #if defined(USE_PROPRIETARY_CODECS) | 313 #if defined(USE_PROPRIETARY_CODECS) |
314 TEST_F(H264VideoToolboxEncoderTest, CheckFramesAreDecodable) { | 314 TEST_F(H264VideoToolboxEncoderTest, CheckFramesAreDecodable) { |
315 VideoDecoderConfig config(kCodecH264, H264PROFILE_MAIN, frame_->format(), | 315 VideoDecoderConfig config(kCodecH264, H264PROFILE_MAIN, frame_->format(), |
316 COLOR_SPACE_UNSPECIFIED, frame_->coded_size(), | 316 COLOR_SPACE_UNSPECIFIED, frame_->coded_size(), |
317 frame_->visible_rect(), frame_->natural_size(), | 317 frame_->visible_rect(), frame_->natural_size(), |
318 EmptyExtraData(), Unencrypted()); | 318 EmptyExtraData(), Unencrypted()); |
(...skipping 17 matching lines...) Expand all Loading... |
336 | 336 |
337 TEST_F(H264VideoToolboxEncoderTest, CheckVideoFrameFactory) { | 337 TEST_F(H264VideoToolboxEncoderTest, CheckVideoFrameFactory) { |
338 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); | 338 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); |
339 ASSERT_TRUE(video_frame_factory.get()); | 339 ASSERT_TRUE(video_frame_factory.get()); |
340 // The first call to |MaybeCreateFrame| will return null but post a task to | 340 // The first call to |MaybeCreateFrame| will return null but post a task to |
341 // the encoder to initialize for the specified frame size. We then drain the | 341 // the encoder to initialize for the specified frame size. We then drain the |
342 // message loop. After that, the encoder should have initialized and we | 342 // message loop. After that, the encoder should have initialized and we |
343 // request a frame again. | 343 // request a frame again. |
344 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 344 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
345 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 345 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
346 message_loop_.RunUntilIdle(); | 346 base::RunLoop().RunUntilIdle(); |
347 CreateFrameAndMemsetPlane(video_frame_factory.get()); | 347 CreateFrameAndMemsetPlane(video_frame_factory.get()); |
348 } | 348 } |
349 | 349 |
350 TEST_F(H264VideoToolboxEncoderTest, CheckPowerMonitoring) { | 350 TEST_F(H264VideoToolboxEncoderTest, CheckPowerMonitoring) { |
351 // Encode a frame, suspend, encode a frame, resume, encode a frame. | 351 // Encode a frame, suspend, encode a frame, resume, encode a frame. |
352 | 352 |
353 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); | 353 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); |
354 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); | 354 EXPECT_TRUE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); |
355 power_source_->GenerateSuspendEvent(); | 355 power_source_->GenerateSuspendEvent(); |
356 EXPECT_FALSE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); | 356 EXPECT_FALSE(encoder_->EncodeVideoFrame(frame_, clock_->NowTicks(), cb)); |
(...skipping 15 matching lines...) Expand all Loading... |
372 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); | 372 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); |
373 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); | 373 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); |
374 ASSERT_TRUE(video_frame_factory.get()); | 374 ASSERT_TRUE(video_frame_factory.get()); |
375 | 375 |
376 // The first call to |MaybeCreateFrame| will return null but post a task to | 376 // The first call to |MaybeCreateFrame| will return null but post a task to |
377 // the encoder to initialize for the specified frame size. We then drain the | 377 // the encoder to initialize for the specified frame size. We then drain the |
378 // message loop. After that, the encoder should have initialized and we | 378 // message loop. After that, the encoder should have initialized and we |
379 // request a frame again. | 379 // request a frame again. |
380 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 380 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
381 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 381 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
382 message_loop_.RunUntilIdle(); | 382 base::RunLoop().RunUntilIdle(); |
383 CreateFrameAndMemsetPlane(video_frame_factory.get()); | 383 CreateFrameAndMemsetPlane(video_frame_factory.get()); |
384 | 384 |
385 // After a power suspension, the factory should not produce frames. | 385 // After a power suspension, the factory should not produce frames. |
386 power_source_->GenerateSuspendEvent(); | 386 power_source_->GenerateSuspendEvent(); |
387 | 387 |
388 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 388 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
389 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 389 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
390 message_loop_.RunUntilIdle(); | 390 base::RunLoop().RunUntilIdle(); |
391 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 391 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
392 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 392 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
393 | 393 |
394 // After a power resume event, the factory should produce frames right away | 394 // After a power resume event, the factory should produce frames right away |
395 // because the encoder re-initializes on its own. | 395 // because the encoder re-initializes on its own. |
396 power_source_->GenerateResumeEvent(); | 396 power_source_->GenerateResumeEvent(); |
397 CreateFrameAndMemsetPlane(video_frame_factory.get()); | 397 CreateFrameAndMemsetPlane(video_frame_factory.get()); |
398 } | 398 } |
399 | 399 |
400 TEST_F(H264VideoToolboxEncoderTest, | 400 TEST_F(H264VideoToolboxEncoderTest, |
401 CheckPowerMonitoringVideoFrameFactoryNoInitialFrame) { | 401 CheckPowerMonitoringVideoFrameFactoryNoInitialFrame) { |
402 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); | 402 VideoEncoder::FrameEncodedCallback cb = base::Bind(&NoopFrameEncodedCallback); |
403 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); | 403 auto video_frame_factory = encoder_->CreateVideoFrameFactory(); |
404 ASSERT_TRUE(video_frame_factory.get()); | 404 ASSERT_TRUE(video_frame_factory.get()); |
405 | 405 |
406 // After a power suspension, the factory should not produce frames. | 406 // After a power suspension, the factory should not produce frames. |
407 power_source_->GenerateSuspendEvent(); | 407 power_source_->GenerateSuspendEvent(); |
408 | 408 |
409 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 409 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
410 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 410 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
411 message_loop_.RunUntilIdle(); | 411 base::RunLoop().RunUntilIdle(); |
412 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( | 412 ASSERT_FALSE(video_frame_factory->MaybeCreateFrame( |
413 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); | 413 gfx::Size(kVideoWidth, kVideoHeight), base::TimeDelta())); |
414 | 414 |
415 // After a power resume event, the factory should produce frames right away | 415 // After a power resume event, the factory should produce frames right away |
416 // because the encoder re-initializes on its own. | 416 // because the encoder re-initializes on its own. |
417 power_source_->GenerateResumeEvent(); | 417 power_source_->GenerateResumeEvent(); |
418 CreateFrameAndMemsetPlane(video_frame_factory.get()); | 418 CreateFrameAndMemsetPlane(video_frame_factory.get()); |
419 } | 419 } |
420 | 420 |
421 } // namespace cast | 421 } // namespace cast |
422 } // namespace media | 422 } // namespace media |
OLD | NEW |