| 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 <vector> | 5 #include <vector> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 H264VideoToolboxEncoder::IsSupported(video_config_)) || | 94 H264VideoToolboxEncoder::IsSupported(video_config_)) || |
| 95 #endif | 95 #endif |
| 96 false; | 96 false; |
| 97 } | 97 } |
| 98 | 98 |
| 99 bool is_testing_platform_encoder() const { | 99 bool is_testing_platform_encoder() const { |
| 100 return video_config_.use_external_encoder || | 100 return video_config_.use_external_encoder || |
| 101 is_testing_video_toolbox_encoder(); | 101 is_testing_video_toolbox_encoder(); |
| 102 } | 102 } |
| 103 | 103 |
| 104 bool encoder_has_resize_delay() const { |
| 105 return is_testing_platform_encoder() && !is_testing_video_toolbox_encoder(); |
| 106 } |
| 107 |
| 104 VideoEncoder* video_encoder() const { | 108 VideoEncoder* video_encoder() const { |
| 105 return video_encoder_.get(); | 109 return video_encoder_.get(); |
| 106 } | 110 } |
| 107 | 111 |
| 108 void DestroyEncoder() { | 112 void DestroyEncoder() { |
| 109 video_encoder_.reset(); | 113 video_encoder_.reset(); |
| 110 } | 114 } |
| 111 | 115 |
| 112 base::TimeTicks Now() const { | 116 base::TimeTicks Now() const { |
| 113 return testing_clock_->NowTicks(); | 117 return testing_clock_->NowTicks(); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 CreateEncoder(false); | 279 CreateEncoder(false); |
| 276 SetVEAFactoryAutoRespond(true); | 280 SetVEAFactoryAutoRespond(true); |
| 277 | 281 |
| 278 EXPECT_EQ(0, count_frames_delivered()); | 282 EXPECT_EQ(0, count_frames_delivered()); |
| 279 ExpectVEAResponsesForExternalVideoEncoder(0, 0); | 283 ExpectVEAResponsesForExternalVideoEncoder(0, 0); |
| 280 | 284 |
| 281 uint32 frame_id = 0; | 285 uint32 frame_id = 0; |
| 282 uint32 reference_frame_id = 0; | 286 uint32 reference_frame_id = 0; |
| 283 const gfx::Size frame_size(1280, 720); | 287 const gfx::Size frame_size(1280, 720); |
| 284 | 288 |
| 285 // For the platform encoders, the first one or more frames is dropped while | 289 // Some encoders drop one or more frames initially while the encoder |
| 286 // the encoder initializes. Then, for all encoders, expect one key frame is | 290 // initializes. Then, for all encoders, expect one key frame is delivered. |
| 287 // delivered. | |
| 288 bool accepted_first_frame = false; | 291 bool accepted_first_frame = false; |
| 289 do { | 292 do { |
| 290 accepted_first_frame = EncodeAndCheckDelivery( | 293 accepted_first_frame = EncodeAndCheckDelivery( |
| 291 CreateTestVideoFrame(frame_size), frame_id, reference_frame_id); | 294 CreateTestVideoFrame(frame_size), frame_id, reference_frame_id); |
| 292 if (!is_testing_platform_encoder()) | 295 if (!encoder_has_resize_delay()) |
| 293 EXPECT_TRUE(accepted_first_frame); | 296 EXPECT_TRUE(accepted_first_frame); |
| 294 RunTasksAndAdvanceClock(); | 297 RunTasksAndAdvanceClock(); |
| 295 } while (!accepted_first_frame); | 298 } while (!accepted_first_frame); |
| 296 ExpectVEAResponsesForExternalVideoEncoder(1, 3); | 299 ExpectVEAResponsesForExternalVideoEncoder(1, 3); |
| 297 | 300 |
| 298 // Expect the remaining frames are encoded as delta frames. | 301 // Expect the remaining frames are encoded as delta frames. |
| 299 for (++frame_id; frame_id < 10; ++frame_id, ++reference_frame_id) { | 302 for (++frame_id; frame_id < 10; ++frame_id, ++reference_frame_id) { |
| 300 EXPECT_TRUE(EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), | 303 EXPECT_TRUE(EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), |
| 301 frame_id, | 304 frame_id, |
| 302 reference_frame_id)); | 305 reference_frame_id)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 frame_sizes.push_back(gfx::Size(600, 400)); // Grow both dimensions. | 361 frame_sizes.push_back(gfx::Size(600, 400)); // Grow both dimensions. |
| 359 frame_sizes.push_back(gfx::Size(638, 400)); // Shrink only one dimension. | 362 frame_sizes.push_back(gfx::Size(638, 400)); // Shrink only one dimension. |
| 360 frame_sizes.push_back(gfx::Size(638, 398)); // Shrink the other dimension. | 363 frame_sizes.push_back(gfx::Size(638, 398)); // Shrink the other dimension. |
| 361 frame_sizes.push_back(gfx::Size(320, 180)); // Shrink both dimensions again. | 364 frame_sizes.push_back(gfx::Size(320, 180)); // Shrink both dimensions again. |
| 362 frame_sizes.push_back(gfx::Size(322, 180)); // Grow only one dimension. | 365 frame_sizes.push_back(gfx::Size(322, 180)); // Grow only one dimension. |
| 363 frame_sizes.push_back(gfx::Size(322, 182)); // Grow the other dimension. | 366 frame_sizes.push_back(gfx::Size(322, 182)); // Grow the other dimension. |
| 364 frame_sizes.push_back(gfx::Size(1920, 1080)); // Grow both dimensions again. | 367 frame_sizes.push_back(gfx::Size(1920, 1080)); // Grow both dimensions again. |
| 365 | 368 |
| 366 uint32 frame_id = 0; | 369 uint32 frame_id = 0; |
| 367 | 370 |
| 368 // Encode one frame at each size. For the platform encoders, expect no frames | 371 // Encode one frame at each size. For encoders with a resize delay, except no |
| 369 // to be delivered since each frame size change will sprun re-initialization | 372 // frames to be delivered since each frame size change will sprun |
| 370 // of the underlying encoder. Otherwise, expect all key frames to come out. | 373 // re-initialization of the underlying encoder. Otherwise expect all key |
| 374 // frames to come out. |
| 371 for (const auto& frame_size : frame_sizes) { | 375 for (const auto& frame_size : frame_sizes) { |
| 372 EXPECT_EQ(!is_testing_platform_encoder(), | 376 EXPECT_EQ(!encoder_has_resize_delay(), |
| 373 EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), | 377 EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), frame_id, |
| 374 frame_id, | |
| 375 frame_id)); | 378 frame_id)); |
| 376 RunTasksAndAdvanceClock(); | 379 RunTasksAndAdvanceClock(); |
| 377 if (!is_testing_platform_encoder()) | 380 if (!encoder_has_resize_delay()) |
| 378 ++frame_id; | 381 ++frame_id; |
| 379 } | 382 } |
| 380 | 383 |
| 381 // Encode 10+ frames at each size. For the platform decoders, expect the | 384 // Encode 10+ frames at each size. For encoders with a resize delay, expect |
| 382 // first one or more frames are dropped while the encoder re-inits. Then, for | 385 // the first one or more frames are dropped while the encoder re-inits. Then, |
| 383 // all encoders, expect one key frame followed by all delta frames. | 386 // for all encoders, expect one key frame followed by all delta frames. |
| 384 for (const auto& frame_size : frame_sizes) { | 387 for (const auto& frame_size : frame_sizes) { |
| 385 bool accepted_first_frame = false; | 388 bool accepted_first_frame = false; |
| 386 do { | 389 do { |
| 387 accepted_first_frame = EncodeAndCheckDelivery( | 390 accepted_first_frame = EncodeAndCheckDelivery( |
| 388 CreateTestVideoFrame(frame_size), frame_id, frame_id); | 391 CreateTestVideoFrame(frame_size), frame_id, frame_id); |
| 389 if (!is_testing_platform_encoder()) | 392 if (!encoder_has_resize_delay()) |
| 390 EXPECT_TRUE(accepted_first_frame); | 393 EXPECT_TRUE(accepted_first_frame); |
| 391 RunTasksAndAdvanceClock(); | 394 RunTasksAndAdvanceClock(); |
| 392 } while (!accepted_first_frame); | 395 } while (!accepted_first_frame); |
| 393 ++frame_id; | 396 ++frame_id; |
| 394 for (int i = 1; i < 10; ++i, ++frame_id) { | 397 for (int i = 1; i < 10; ++i, ++frame_id) { |
| 395 EXPECT_TRUE(EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), | 398 EXPECT_TRUE(EncodeAndCheckDelivery(CreateTestVideoFrame(frame_size), |
| 396 frame_id, | 399 frame_id, |
| 397 frame_id - 1)); | 400 frame_id - 1)); |
| 398 RunTasksAndAdvanceClock(); | 401 RunTasksAndAdvanceClock(); |
| 399 } | 402 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 #endif | 448 #endif |
| 446 return values; | 449 return values; |
| 447 } | 450 } |
| 448 } // namespace | 451 } // namespace |
| 449 | 452 |
| 450 INSTANTIATE_TEST_CASE_P( | 453 INSTANTIATE_TEST_CASE_P( |
| 451 , VideoEncoderTest, ::testing::ValuesIn(DetermineEncodersToTest())); | 454 , VideoEncoderTest, ::testing::ValuesIn(DetermineEncodersToTest())); |
| 452 | 455 |
| 453 } // namespace cast | 456 } // namespace cast |
| 454 } // namespace media | 457 } // namespace media |
| OLD | NEW |