Index: content/common/gpu/media/video_encode_accelerator_unittest.cc |
diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc |
index e56b03b666b9ef84b73644185ab12e81e81e48e0..63f10c1f8436c77a0587b25ec76547b81dab94ac 100644 |
--- a/content/common/gpu/media/video_encode_accelerator_unittest.cc |
+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc |
@@ -20,6 +20,7 @@ |
#include "media/base/bitstream_buffer.h" |
#include "media/base/test_data_util.h" |
#include "media/filters/h264_parser.h" |
+#include "media/video/fake_video_encode_accelerator.h" |
#include "media/video/video_encode_accelerator.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -101,6 +102,11 @@ const unsigned int kMinFramesForBitrateTests = 300; |
// Bitrate is only forced for tests that test bitrate. |
const char* g_default_in_filename = "bear_320x192_40frames.yuv"; |
const char* g_default_in_parameters = ":320:192:1:out.h264:200000"; |
+ |
+// Enabled by including a --fake_encoder flag to the command line invoking the |
+// test. |
+bool g_fake_encoder = false; |
+ |
// Environment to store test stream data for all test cases. |
class VideoEncodeAcceleratorTestEnvironment; |
VideoEncodeAcceleratorTestEnvironment* g_env; |
@@ -488,7 +494,9 @@ scoped_ptr<StreamValidator> StreamValidator::Create( |
const FrameFoundCallback& frame_cb) { |
scoped_ptr<StreamValidator> validator; |
- if (IsH264(profile)) { |
+ if (g_fake_encoder) { |
+ validator.reset(NULL); |
+ } else if (IsH264(profile)) { |
validator.reset(new H264Validator(frame_cb)); |
} else if (IsVP8(profile)) { |
validator.reset(new VP8Validator(frame_cb)); |
@@ -529,6 +537,7 @@ class VEAClient : public VideoEncodeAccelerator::Client { |
private: |
bool has_encoder() { return encoder_.get(); } |
+ scoped_ptr<media::VideoEncodeAccelerator> CreateFakeVEA(); |
scoped_ptr<media::VideoEncodeAccelerator> CreateV4L2VEA(); |
scoped_ptr<media::VideoEncodeAccelerator> CreateVaapiVEA(); |
@@ -716,7 +725,8 @@ VEAClient::VEAClient(TestStream* test_stream, |
test_stream_->requested_profile, |
base::Bind(&VEAClient::HandleEncodedFrame, base::Unretained(this))); |
- CHECK(validator_.get()); |
+ |
+ CHECK(g_fake_encoder || validator_.get()); |
if (save_to_file_) { |
CHECK(!test_stream_->out_filename.empty()); |
@@ -734,6 +744,17 @@ VEAClient::VEAClient(TestStream* test_stream, |
VEAClient::~VEAClient() { CHECK(!has_encoder()); } |
+scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateFakeVEA() { |
+ scoped_ptr<media::VideoEncodeAccelerator> encoder; |
+ if (g_fake_encoder) { |
+ encoder.reset( |
+ new media::FakeVideoEncodeAccelerator( |
+ scoped_refptr<base::SingleThreadTaskRunner>( |
+ base::MessageLoopProxy::current()))); |
+ } |
+ return encoder.Pass(); |
+} |
+ |
scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateV4L2VEA() { |
scoped_ptr<media::VideoEncodeAccelerator> encoder; |
#if defined(OS_CHROMEOS) && (defined(ARCH_CPU_ARMEL) || \ |
@@ -758,6 +779,7 @@ void VEAClient::CreateEncoder() { |
CHECK(!has_encoder()); |
scoped_ptr<media::VideoEncodeAccelerator> encoders[] = { |
+ CreateFakeVEA(), |
CreateV4L2VEA(), |
CreateVaapiVEA() |
}; |
@@ -911,7 +933,11 @@ void VEAClient::BitstreamBufferReady(int32 bitstream_buffer_id, |
const uint8* stream_ptr = static_cast<const uint8*>(shm->memory()); |
if (payload_size > 0) { |
- validator_->ProcessStreamBuffer(stream_ptr, payload_size); |
+ if (validator_) { |
+ validator_->ProcessStreamBuffer(stream_ptr, payload_size); |
+ } else { |
+ HandleEncodedFrame(key_frame); |
+ } |
if (save_to_file_) { |
if (IsVP8(test_stream_->requested_profile)) |
@@ -1352,6 +1378,9 @@ int main(int argc, char** argv) { |
if (it->first == "num_frames_to_encode") { |
std::string input(it->second.begin(), it->second.end()); |
CHECK(base::StringToInt(input, &content::g_num_frames_to_encode)); |
+ } |
+ if (it->first == "fake_encoder") { |
+ content::g_fake_encoder = true; |
continue; |
} |
if (it->first == "run_at_fps") { |