Index: media/gpu/video_encode_accelerator_unittest.cc |
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc |
index aa6566314292a155fbaec0249af6445a7e2fab8c..6b76c8da7d459168da5e4c167cc2797eb3f60288 100644 |
--- a/media/gpu/video_encode_accelerator_unittest.cc |
+++ b/media/gpu/video_encode_accelerator_unittest.cc |
@@ -48,28 +48,16 @@ |
#include "media/filters/ffmpeg_video_decoder.h" |
#include "media/filters/h264_parser.h" |
#include "media/filters/ivf_parser.h" |
+#include "media/gpu/gpu_video_encode_accelerator_factory.h" |
#include "media/gpu/video_accelerator_unittest_helpers.h" |
#include "media/video/fake_video_encode_accelerator.h" |
#include "media/video/video_encode_accelerator.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-#if defined(OS_CHROMEOS) |
-#if defined(USE_V4L2_CODEC) |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "media/gpu/v4l2_video_encode_accelerator.h" |
-#endif |
-#if defined(ARCH_CPU_X86_FAMILY) |
-#include "media/gpu/vaapi_video_encode_accelerator.h" |
+#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
#include "media/gpu/vaapi_wrapper.h" |
-// Status has been defined as int in Xlib.h. |
-#undef Status |
-#endif // defined(ARCH_CPU_X86_FAMILY) |
-#elif defined(OS_MACOSX) |
-#include "media/gpu/vt_video_encode_accelerator_mac.h" |
#elif defined(OS_WIN) |
#include "media/gpu/media_foundation_video_encode_accelerator_win.h" |
-#else |
-#error The VideoEncodeAcceleratorUnittest is not supported on this platform. |
#endif |
namespace media { |
@@ -442,51 +430,6 @@ static void ParseAndReadTestStreamData(const base::FilePath::StringType& data, |
} |
} |
-static std::unique_ptr<VideoEncodeAccelerator> CreateFakeVEA() { |
- std::unique_ptr<VideoEncodeAccelerator> encoder; |
- if (g_fake_encoder) { |
- encoder.reset(new FakeVideoEncodeAccelerator( |
- scoped_refptr<base::SingleThreadTaskRunner>( |
- base::ThreadTaskRunnerHandle::Get()))); |
- } |
- return encoder; |
-} |
- |
-static std::unique_ptr<VideoEncodeAccelerator> CreateV4L2VEA() { |
- std::unique_ptr<VideoEncodeAccelerator> encoder; |
-#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) |
- scoped_refptr<V4L2Device> device = V4L2Device::Create(); |
- if (device) |
- encoder.reset(new V4L2VideoEncodeAccelerator(device)); |
-#endif |
- return encoder; |
-} |
- |
-static std::unique_ptr<VideoEncodeAccelerator> CreateVaapiVEA() { |
- std::unique_ptr<VideoEncodeAccelerator> encoder; |
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
- encoder.reset(new VaapiVideoEncodeAccelerator()); |
-#endif |
- return encoder; |
-} |
- |
-static std::unique_ptr<VideoEncodeAccelerator> CreateVTVEA() { |
- std::unique_ptr<VideoEncodeAccelerator> encoder; |
-#if defined(OS_MACOSX) |
- encoder.reset(new VTVideoEncodeAccelerator()); |
-#endif |
- return encoder; |
-} |
- |
-static std::unique_ptr<VideoEncodeAccelerator> CreateMFVEA() { |
- std::unique_ptr<VideoEncodeAccelerator> encoder; |
-#if defined(OS_WIN) |
- MediaFoundationVideoEncodeAccelerator::PreSandboxInitialization(); |
- encoder.reset(new MediaFoundationVideoEncodeAccelerator()); |
-#endif |
- return encoder; |
-} |
- |
// Basic test environment shared across multiple test cases. We only need to |
// setup it once for all test cases. |
// It helps |
@@ -1227,6 +1170,30 @@ VEAClient::VEAClient(TestStream* test_stream, |
thread_checker_.DetachFromThread(); |
} |
+// Helper function to create VEA. |
+static std::unique_ptr<VideoEncodeAccelerator> CreateVideoEncodeAccelerator( |
+ VideoPixelFormat input_format, |
+ const gfx::Size& input_visible_size, |
+ VideoCodecProfile output_profile, |
+ uint32_t initial_bitrate, |
+ VideoEncodeAccelerator::Client* client, |
+ const gpu::GpuPreferences& gpu_preferences) { |
+ if (g_fake_encoder) { |
+ std::unique_ptr<VideoEncodeAccelerator> encoder( |
+ new FakeVideoEncodeAccelerator( |
+ scoped_refptr<base::SingleThreadTaskRunner>( |
+ base::ThreadTaskRunnerHandle::Get()))); |
+ if (encoder->Initialize(input_format, input_visible_size, output_profile, |
+ initial_bitrate, client)) |
+ return encoder; |
+ return nullptr; |
+ } else { |
+ return GpuVideoEncodeAcceleratorFactory::CreateVEA( |
+ input_format, input_visible_size, output_profile, initial_bitrate, |
+ client, gpu_preferences); |
+ } |
+} |
+ |
void VEAClient::CreateEncoder() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
LOG_ASSERT(!has_encoder()); |
@@ -1234,31 +1201,22 @@ void VEAClient::CreateEncoder() { |
vea_client_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
encode_task_runner_ = vea_client_task_runner_; |
- std::unique_ptr<VideoEncodeAccelerator> encoders[] = { |
- CreateFakeVEA(), CreateV4L2VEA(), CreateVaapiVEA(), CreateVTVEA(), |
- CreateMFVEA()}; |
- |
DVLOG(1) << "Profile: " << test_stream_->requested_profile |
<< ", initial bitrate: " << requested_bitrate_; |
- for (size_t i = 0; i < arraysize(encoders); ++i) { |
- if (!encoders[i]) |
- continue; |
- encoder_ = std::move(encoders[i]); |
- if (encoder_->Initialize(kInputFormat, test_stream_->visible_size, |
- test_stream_->requested_profile, |
- requested_bitrate_, this)) { |
- encoder_weak_factory_.reset( |
- new base::WeakPtrFactory<VideoEncodeAccelerator>(encoder_.get())); |
- TryToSetupEncodeOnSeparateThread(); |
- SetStreamParameters(requested_bitrate_, requested_framerate_); |
- SetState(CS_INITIALIZED); |
- return; |
- } |
+ encoder_ = CreateVideoEncodeAccelerator( |
+ kInputFormat, test_stream_->visible_size, test_stream_->requested_profile, |
+ requested_bitrate_, this, gpu::GpuPreferences()); |
+ if (!encoder_) { |
+ LOG(ERROR) << "Failed creating a VideoEncodeAccelerator."; |
+ SetState(CS_ERROR); |
+ return; |
} |
- encoder_.reset(); |
- LOG(ERROR) << "VideoEncodeAccelerator::Initialize() failed"; |
- SetState(CS_ERROR); |
+ encoder_weak_factory_.reset( |
+ new base::WeakPtrFactory<VideoEncodeAccelerator>(encoder_.get())); |
+ TryToSetupEncodeOnSeparateThread(); |
+ SetStreamParameters(requested_bitrate_, requested_framerate_); |
+ SetState(CS_INITIALIZED); |
} |
void VEAClient::DecodeCompleted() { |
@@ -1857,26 +1815,17 @@ void SimpleVEAClientBase::CreateEncoder() { |
LOG_ASSERT(!has_encoder()); |
LOG_ASSERT(g_env->test_streams_.size()); |
- std::unique_ptr<VideoEncodeAccelerator> encoders[] = { |
- CreateFakeVEA(), CreateV4L2VEA(), CreateVaapiVEA(), CreateVTVEA(), |
- CreateMFVEA()}; |
- |
gfx::Size visible_size(width_, height_); |
- for (auto& encoder : encoders) { |
- if (!encoder) |
- continue; |
- encoder_ = std::move(encoder); |
- if (encoder_->Initialize(kInputFormat, visible_size, |
- g_env->test_streams_[0]->requested_profile, |
- bitrate_, this)) { |
- encoder_->RequestEncodingParametersChange(bitrate_, fps_); |
- SetState(CS_INITIALIZED); |
- return; |
- } |
+ encoder_ = CreateVideoEncodeAccelerator( |
+ kInputFormat, visible_size, g_env->test_streams_[0]->requested_profile, |
+ bitrate_, this, gpu::GpuPreferences()); |
+ if (!encoder_) { |
+ LOG(ERROR) << "Failed creating a VideoEncodeAccelerator."; |
+ SetState(CS_ERROR); |
+ return; |
} |
- encoder_.reset(); |
- LOG(ERROR) << "VideoEncodeAccelerator::Initialize() failed"; |
- SetState(CS_ERROR); |
+ encoder_->RequestEncodingParametersChange(bitrate_, fps_); |
+ SetState(CS_INITIALIZED); |
} |
void SimpleVEAClientBase::DestroyEncoder() { |
@@ -2375,6 +2324,8 @@ int main(int argc, char** argv) { |
#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
media::VaapiWrapper::PreSandboxInitialization(); |
+#elif defined(OS_WIN) |
+ media::MediaFoundationVideoEncodeAccelerator::PreSandboxInitialization(); |
#endif |
media::g_env = |