OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/at_exit.h" | 5 #include "base/at_exit.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/files/memory_mapped_file.h" | 9 #include "base/files/memory_mapped_file.h" |
10 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 namespace { | 45 namespace { |
46 | 46 |
47 const media::VideoFrame::Format kInputFormat = media::VideoFrame::I420; | 47 const media::VideoFrame::Format kInputFormat = media::VideoFrame::I420; |
48 | 48 |
49 // Arbitrarily chosen to add some depth to the pipeline. | 49 // Arbitrarily chosen to add some depth to the pipeline. |
50 const unsigned int kNumOutputBuffers = 4; | 50 const unsigned int kNumOutputBuffers = 4; |
51 const unsigned int kNumExtraInputFrames = 4; | 51 const unsigned int kNumExtraInputFrames = 4; |
52 // Maximum delay between requesting a keyframe and receiving one, in frames. | 52 // Maximum delay between requesting a keyframe and receiving one, in frames. |
53 // Arbitrarily chosen as a reasonable requirement. | 53 // Arbitrarily chosen as a reasonable requirement. |
54 const unsigned int kMaxKeyframeDelay = 4; | 54 const unsigned int kMaxKeyframeDelay = 4; |
55 // Value to use as max frame number for keyframe detection. | |
56 const unsigned int kMaxFrameNum = | |
57 std::numeric_limits<unsigned int>::max() - kMaxKeyframeDelay; | |
58 // Default initial bitrate. | 55 // Default initial bitrate. |
59 const uint32 kDefaultBitrate = 2000000; | 56 const uint32 kDefaultBitrate = 2000000; |
60 // Default ratio of requested_subsequent_bitrate to initial_bitrate | 57 // Default ratio of requested_subsequent_bitrate to initial_bitrate |
61 // (see test parameters below) if one is not provided. | 58 // (see test parameters below) if one is not provided. |
62 const double kDefaultSubsequentBitrateRatio = 2.0; | 59 const double kDefaultSubsequentBitrateRatio = 2.0; |
63 // Default initial framerate. | 60 // Default initial framerate. |
64 const uint32 kDefaultFramerate = 30; | 61 const uint32 kDefaultFramerate = 30; |
65 // Default ratio of requested_subsequent_framerate to initial_framerate | 62 // Default ratio of requested_subsequent_framerate to initial_framerate |
66 // (see test parameters below) if one is not provided. | 63 // (see test parameters below) if one is not provided. |
67 const double kDefaultSubsequentFramerateRatio = 0.1; | 64 const double kDefaultSubsequentFramerateRatio = 0.1; |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 ASSERT_EQ( | 291 ASSERT_EQ( |
295 reinterpret_cast<off_t>(test_stream->mapped_aligned_in_file.data()) & 63, | 292 reinterpret_cast<off_t>(test_stream->mapped_aligned_in_file.data()) & 63, |
296 0) | 293 0) |
297 << "File should be mapped at a 64 byte boundary"; | 294 << "File should be mapped at a 64 byte boundary"; |
298 | 295 |
299 CHECK_EQ(test_stream->mapped_aligned_in_file.length() % | 296 CHECK_EQ(test_stream->mapped_aligned_in_file.length() % |
300 test_stream->aligned_buffer_size, | 297 test_stream->aligned_buffer_size, |
301 0U) | 298 0U) |
302 << "Stream byte size is not a product of calculated frame byte size"; | 299 << "Stream byte size is not a product of calculated frame byte size"; |
303 CHECK_GT(test_stream->num_frames, 0UL); | 300 CHECK_GT(test_stream->num_frames, 0UL); |
304 CHECK_LE(test_stream->num_frames, kMaxFrameNum); | |
305 } | 301 } |
306 | 302 |
307 // Parse |data| into its constituent parts, set the various output fields | 303 // Parse |data| into its constituent parts, set the various output fields |
308 // accordingly, read in video stream, and store them to |test_streams|. | 304 // accordingly, read in video stream, and store them to |test_streams|. |
309 static void ParseAndReadTestStreamData(const base::FilePath::StringType& data, | 305 static void ParseAndReadTestStreamData(const base::FilePath::StringType& data, |
310 ScopedVector<TestStream>* test_streams) { | 306 ScopedVector<TestStream>* test_streams) { |
311 // Split the string to individual test stream data. | 307 // Split the string to individual test stream data. |
312 std::vector<base::FilePath::StringType> test_streams_data; | 308 std::vector<base::FilePath::StringType> test_streams_data; |
313 base::SplitString(data, ';', &test_streams_data); | 309 base::SplitString(data, ';', &test_streams_data); |
314 CHECK_GE(test_streams_data.size(), 1U) << data; | 310 CHECK_GE(test_streams_data.size(), 1U) << data; |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 pos_in_input_stream_(0), | 698 pos_in_input_stream_(0), |
703 num_required_input_buffers_(0), | 699 num_required_input_buffers_(0), |
704 output_buffer_size_(0), | 700 output_buffer_size_(0), |
705 num_frames_to_encode_(0), | 701 num_frames_to_encode_(0), |
706 num_encoded_frames_(0), | 702 num_encoded_frames_(0), |
707 num_frames_since_last_check_(0), | 703 num_frames_since_last_check_(0), |
708 seen_keyframe_in_this_buffer_(false), | 704 seen_keyframe_in_this_buffer_(false), |
709 save_to_file_(save_to_file), | 705 save_to_file_(save_to_file), |
710 keyframe_period_(keyframe_period), | 706 keyframe_period_(keyframe_period), |
711 num_keyframes_requested_(0), | 707 num_keyframes_requested_(0), |
712 next_keyframe_at_(kMaxFrameNum), | 708 next_keyframe_at_(0), |
713 force_bitrate_(force_bitrate), | 709 force_bitrate_(force_bitrate), |
714 current_requested_bitrate_(0), | 710 current_requested_bitrate_(0), |
715 current_framerate_(0), | 711 current_framerate_(0), |
716 encoded_stream_size_since_last_check_(0), | 712 encoded_stream_size_since_last_check_(0), |
717 test_perf_(test_perf), | 713 test_perf_(test_perf), |
718 requested_bitrate_(0), | 714 requested_bitrate_(0), |
719 requested_framerate_(0), | 715 requested_framerate_(0), |
720 requested_subsequent_bitrate_(0), | 716 requested_subsequent_bitrate_(0), |
721 requested_subsequent_framerate_(0), | 717 requested_subsequent_framerate_(0), |
722 run_at_fps_(run_at_fps) { | 718 run_at_fps_(run_at_fps) { |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1094 // Because the keyframe behavior requirements are loose, we give | 1090 // Because the keyframe behavior requirements are loose, we give |
1095 // the encoder more freedom here. It could either deliver a keyframe | 1091 // the encoder more freedom here. It could either deliver a keyframe |
1096 // immediately after we requested it, which could be for a frame number | 1092 // immediately after we requested it, which could be for a frame number |
1097 // before the one we requested it for (if the keyframe request | 1093 // before the one we requested it for (if the keyframe request |
1098 // is asynchronous, i.e. not bound to any concrete frame, and because | 1094 // is asynchronous, i.e. not bound to any concrete frame, and because |
1099 // the pipeline can be deeper than one frame), at that frame, or after. | 1095 // the pipeline can be deeper than one frame), at that frame, or after. |
1100 // So the only constraints we put here is that we get a keyframe not | 1096 // So the only constraints we put here is that we get a keyframe not |
1101 // earlier than we requested one (in time), and not later than | 1097 // earlier than we requested one (in time), and not later than |
1102 // kMaxKeyframeDelay frames after the frame, for which we requested | 1098 // kMaxKeyframeDelay frames after the frame, for which we requested |
1103 // it, comes back encoded. | 1099 // it, comes back encoded. |
1104 EXPECT_LE(num_encoded_frames_, next_keyframe_at_ + kMaxKeyframeDelay); | |
1105 | |
1106 if (keyframe) { | 1100 if (keyframe) { |
1107 if (num_keyframes_requested_ > 0) | 1101 if (num_keyframes_requested_ > 0 && |
| 1102 num_encoded_frames_ > next_keyframe_at_) { |
1108 --num_keyframes_requested_; | 1103 --num_keyframes_requested_; |
1109 next_keyframe_at_ += keyframe_period_; | 1104 next_keyframe_at_ += keyframe_period_; |
| 1105 } |
1110 seen_keyframe_in_this_buffer_ = true; | 1106 seen_keyframe_in_this_buffer_ = true; |
1111 } | 1107 } |
1112 | 1108 |
| 1109 if (num_keyframes_requested_ > 0) |
| 1110 EXPECT_LE(num_encoded_frames_, next_keyframe_at_ + kMaxKeyframeDelay); |
| 1111 |
1113 if (num_encoded_frames_ == num_frames_to_encode_ / 2) { | 1112 if (num_encoded_frames_ == num_frames_to_encode_ / 2) { |
1114 VerifyStreamProperties(); | 1113 VerifyStreamProperties(); |
1115 if (requested_subsequent_bitrate_ != current_requested_bitrate_ || | 1114 if (requested_subsequent_bitrate_ != current_requested_bitrate_ || |
1116 requested_subsequent_framerate_ != current_framerate_) { | 1115 requested_subsequent_framerate_ != current_framerate_) { |
1117 SetStreamParameters(requested_subsequent_bitrate_, | 1116 SetStreamParameters(requested_subsequent_bitrate_, |
1118 requested_subsequent_framerate_); | 1117 requested_subsequent_framerate_); |
1119 if (run_at_fps_ && input_timer_) | 1118 if (run_at_fps_ && input_timer_) |
1120 input_timer_->Start( | 1119 input_timer_->Start( |
1121 FROM_HERE, base::TimeDelta::FromSeconds(1) / current_framerate_, | 1120 FROM_HERE, base::TimeDelta::FromSeconds(1) / current_framerate_, |
1122 base::Bind(&VEAClient::OnInputTimer, base::Unretained(this))); | 1121 base::Bind(&VEAClient::OnInputTimer, base::Unretained(this))); |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 } | 1407 } |
1409 | 1408 |
1410 content::g_env = | 1409 content::g_env = |
1411 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>( | 1410 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>( |
1412 testing::AddGlobalTestEnvironment( | 1411 testing::AddGlobalTestEnvironment( |
1413 new content::VideoEncodeAcceleratorTestEnvironment( | 1412 new content::VideoEncodeAcceleratorTestEnvironment( |
1414 test_stream_data.Pass(), run_at_fps))); | 1413 test_stream_data.Pass(), run_at_fps))); |
1415 | 1414 |
1416 return RUN_ALL_TESTS(); | 1415 return RUN_ALL_TESTS(); |
1417 } | 1416 } |
OLD | NEW |