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