Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Unified Diff: media/gpu/ipc/service/gpu_video_encode_accelerator.cc

Issue 2858193002: Refactor: Extract gpu_video_encode_accelerator_factory. (Closed)
Patch Set: Try Again. Fix compiling errors on Windows. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/gpu/gpu_video_encode_accelerator_factory.cc ('k') | media/gpu/video_encode_accelerator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/gpu/ipc/service/gpu_video_encode_accelerator.cc
diff --git a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
index 7d31fcf60a36af77599672fba163c89093789816..80b02130ef434eb177257fdcb6f9a19fa9e74b35 100644
--- a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
+++ b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
@@ -22,25 +22,10 @@
#include "media/base/limits.h"
#include "media/base/video_frame.h"
#include "media/gpu/gpu_video_accelerator_util.h"
+#include "media/gpu/gpu_video_encode_accelerator_factory.h"
#include "media/gpu/ipc/common/media_messages.h"
#include "media/media_features.h"
-#if defined(OS_CHROMEOS)
-#if defined(USE_V4L2_CODEC)
-#include "media/gpu/v4l2_video_encode_accelerator.h"
-#endif
-#if defined(ARCH_CPU_X86_FAMILY)
-#include "media/gpu/vaapi_video_encode_accelerator.h"
-#endif
-#elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_WEBRTC)
-#include "media/gpu/android_video_encode_accelerator.h"
-#elif defined(OS_MACOSX)
-#include "media/gpu/vt_video_encode_accelerator_mac.h"
-#elif defined(OS_WIN)
-#include "base/feature_list.h"
-#include "media/base/media_switches.h"
-#include "media/gpu/media_foundation_video_encode_accelerator_win.h"
-#endif
namespace media {
@@ -65,44 +50,6 @@ void DropSharedMemory(std::unique_ptr<base::SharedMemory> shm) {
// Just let |shm| fall out of scope.
}
-#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC)
-std::unique_ptr<VideoEncodeAccelerator> CreateV4L2VEA() {
- scoped_refptr<V4L2Device> device = V4L2Device::Create();
- if (!device)
- return nullptr;
- return base::WrapUnique<VideoEncodeAccelerator>(
- new V4L2VideoEncodeAccelerator(device));
-}
-#endif
-
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY)
-std::unique_ptr<VideoEncodeAccelerator> CreateVaapiVEA() {
- return base::WrapUnique<VideoEncodeAccelerator>(
- new VaapiVideoEncodeAccelerator());
-}
-#endif
-
-#if defined(OS_ANDROID) && BUILDFLAG(ENABLE_WEBRTC)
-std::unique_ptr<VideoEncodeAccelerator> CreateAndroidVEA() {
- return base::WrapUnique<VideoEncodeAccelerator>(
- new AndroidVideoEncodeAccelerator());
-}
-#endif
-
-#if defined(OS_MACOSX)
-std::unique_ptr<VideoEncodeAccelerator> CreateVTVEA() {
- return base::WrapUnique<VideoEncodeAccelerator>(
- new VTVideoEncodeAccelerator());
-}
-#endif
-
-#if defined(OS_WIN)
-std::unique_ptr<VideoEncodeAccelerator> CreateMediaFoundationVEA() {
- return base::WrapUnique<media::VideoEncodeAccelerator>(
- new MediaFoundationVideoEncodeAccelerator());
-}
-#endif
-
} // anonymous namespace
class GpuVideoEncodeAccelerator::MessageFilter : public IPC::MessageFilter {
@@ -216,35 +163,29 @@ bool GpuVideoEncodeAccelerator::Initialize(VideoPixelFormat input_format,
const gpu::GpuPreferences& gpu_preferences =
stub_->channel()->gpu_channel_manager()->gpu_preferences();
- // Try all possible encoders and use the first successful encoder.
- for (const auto& factory_function : GetVEAFactoryFunctions(gpu_preferences)) {
- encoder_ = factory_function.Run();
- if (encoder_ &&
- encoder_->Initialize(input_format, input_visible_size, output_profile,
- initial_bitrate, this)) {
- input_format_ = input_format;
- input_visible_size_ = input_visible_size;
- // Attempt to set up performing encoding tasks on IO thread, if supported
- // by the VEA.
- if (encoder_->TryToSetupEncodeOnSeparateThread(weak_this_,
- io_task_runner_)) {
- filter_ = new MessageFilter(this, host_route_id_);
- stub_->channel()->AddFilter(filter_.get());
- encode_task_runner_ = io_task_runner_;
- }
-
- if (!encoder_worker_thread_.Start()) {
- DLOG(ERROR) << "Failed spawning encoder worker thread.";
- return false;
- }
- encoder_worker_task_runner_ = encoder_worker_thread_.task_runner();
-
- return true;
- }
+ encoder_ = GpuVideoEncodeAcceleratorFactory::CreateVEA(
+ input_format, input_visible_size, output_profile, initial_bitrate, this,
+ gpu_preferences);
+ if (!encoder_) {
+ DLOG(ERROR) << __func__ << " Could not create VEA";
+ return false;
}
- encoder_.reset();
- DLOG(ERROR) << __func__ << " VEA initialization failed";
- return false;
+ input_format_ = input_format;
+ input_visible_size_ = input_visible_size;
+ // Attempt to set up performing encoding tasks on IO thread, if supported
+ // by the VEA.
+ if (encoder_->TryToSetupEncodeOnSeparateThread(weak_this_, io_task_runner_)) {
+ filter_ = new MessageFilter(this, host_route_id_);
+ stub_->channel()->AddFilter(filter_.get());
+ encode_task_runner_ = io_task_runner_;
+ }
+
+ if (!encoder_worker_thread_.Start()) {
+ DLOG(ERROR) << "Failed spawning encoder worker thread.";
+ return false;
+ }
+ encoder_worker_task_runner_ = encoder_worker_thread_.task_runner();
+ return true;
}
bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) {
@@ -342,44 +283,8 @@ void GpuVideoEncodeAccelerator::OnWillDestroyStub() {
gpu::VideoEncodeAcceleratorSupportedProfiles
GpuVideoEncodeAccelerator::GetSupportedProfiles(
const gpu::GpuPreferences& gpu_preferences) {
- VideoEncodeAccelerator::SupportedProfiles profiles;
-
- for (const auto& factory_function : GetVEAFactoryFunctions(gpu_preferences)) {
- std::unique_ptr<VideoEncodeAccelerator> encoder = factory_function.Run();
- if (!encoder)
- continue;
- VideoEncodeAccelerator::SupportedProfiles vea_profiles =
- encoder->GetSupportedProfiles();
- GpuVideoAcceleratorUtil::InsertUniqueEncodeProfiles(vea_profiles,
- &profiles);
- }
- return GpuVideoAcceleratorUtil::ConvertMediaToGpuEncodeProfiles(profiles);
-}
-
-// static
-std::vector<GpuVideoEncodeAccelerator::VEAFactoryFunction>
-GpuVideoEncodeAccelerator::GetVEAFactoryFunctions(
- const gpu::GpuPreferences& gpu_preferences) {
- std::vector<VEAFactoryFunction> vea_factory_functions;
-#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC)
- vea_factory_functions.push_back(base::Bind(&CreateV4L2VEA));
-#endif
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY)
- if (!gpu_preferences.disable_vaapi_accelerated_video_encode)
- vea_factory_functions.push_back(base::Bind(&CreateVaapiVEA));
-#endif
-#if defined(OS_ANDROID) && BUILDFLAG(ENABLE_WEBRTC)
- if (!gpu_preferences.disable_web_rtc_hw_encoding)
- vea_factory_functions.push_back(base::Bind(&CreateAndroidVEA));
-#endif
-#if defined(OS_MACOSX)
- vea_factory_functions.push_back(base::Bind(&CreateVTVEA));
-#endif
-#if defined(OS_WIN)
- if (base::FeatureList::IsEnabled(kMediaFoundationH264Encoding))
- vea_factory_functions.push_back(base::Bind(&CreateMediaFoundationVEA));
-#endif
- return vea_factory_functions;
+ return GpuVideoAcceleratorUtil::ConvertMediaToGpuEncodeProfiles(
+ GpuVideoEncodeAcceleratorFactory::GetSupportedProfiles(gpu_preferences));
}
void GpuVideoEncodeAccelerator::OnFilterRemoved() {
« no previous file with comments | « media/gpu/gpu_video_encode_accelerator_factory.cc ('k') | media/gpu/video_encode_accelerator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698