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

Unified Diff: content/common/gpu/media/video_decode_accelerator_unittest.cc

Issue 1832123002: Revert of Introduce GpuVideoDecodeAcceleratorFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
Index: content/common/gpu/media/video_decode_accelerator_unittest.cc
diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc
index a04e7c896283cc0f577ef21bf2af3430f7209b7c..c7ca0d2342d5c0b57b9a25dd1c67de3aa969f72e 100644
--- a/content/common/gpu/media/video_decode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc
@@ -47,10 +47,8 @@
#include "base/threading/thread.h"
#include "build/build_config.h"
#include "content/common/gpu/media/fake_video_decode_accelerator.h"
-#include "content/common/gpu/media/gpu_video_decode_accelerator_factory_impl.h"
#include "content/common/gpu/media/rendering_helper.h"
#include "content/common/gpu/media/video_accelerator_unittest_helpers.h"
-#include "gpu/command_buffer/service/gpu_preferences.h"
#include "media/filters/h264_parser.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/codec/png_codec.h"
@@ -360,6 +358,17 @@
private:
typedef std::map<int32_t, scoped_refptr<TextureRef>> TextureRefMap;
+ scoped_ptr<media::VideoDecodeAccelerator> CreateFakeVDA();
+ scoped_ptr<media::VideoDecodeAccelerator> CreateDXVAVDA();
+ scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2VDA();
+ scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2SliceVDA();
+ scoped_ptr<media::VideoDecodeAccelerator> CreateVaapiVDA();
+
+ void BindImage(uint32_t client_texture_id,
+ uint32_t texture_target,
+ scoped_refptr<gl::GLImage> image,
+ bool can_bind_as_sampler);
+
void SetState(ClientState new_state);
void FinishInitialization();
void ReturnPicture(int32_t picture_buffer_id);
@@ -392,10 +401,8 @@
int next_bitstream_buffer_id_;
ClientStateNotification<ClientState>* note_;
scoped_ptr<VideoDecodeAccelerator> decoder_;
- base::WeakPtr<VideoDecodeAccelerator> weak_vda_;
- scoped_ptr<base::WeakPtrFactory<VideoDecodeAccelerator>>
- weak_vda_ptr_factory_;
- scoped_ptr<GpuVideoDecodeAcceleratorFactoryImpl> vda_factory_;
+ scoped_ptr<base::WeakPtrFactory<VideoDecodeAccelerator> >
+ weak_decoder_factory_;
int remaining_play_throughs_;
int reset_after_frame_num_;
int delete_decoder_state_;
@@ -433,22 +440,8 @@
int32_t next_picture_buffer_id_;
- base::WeakPtr<GLRenderingVDAClient> weak_this_;
- base::WeakPtrFactory<GLRenderingVDAClient> weak_this_factory_;
-
DISALLOW_IMPLICIT_CONSTRUCTORS(GLRenderingVDAClient);
};
-
-static bool DoNothingReturnTrue() {
- return true;
-}
-
-static bool DummyBindImage(uint32_t client_texture_id,
- uint32_t texture_target,
- const scoped_refptr<gl::GLImage>& image,
- bool can_bind_to_sampler) {
- return true;
-}
GLRenderingVDAClient::GLRenderingVDAClient(
size_t window_id,
@@ -490,8 +483,7 @@
delay_reuse_after_frame_num_(delay_reuse_after_frame_num),
decode_calls_per_second_(decode_calls_per_second),
render_as_thumbnails_(render_as_thumbnails),
- next_picture_buffer_id_(1),
- weak_this_factory_(this) {
+ next_picture_buffer_id_(1) {
LOG_ASSERT(num_in_flight_decodes > 0);
LOG_ASSERT(num_play_throughs > 0);
// |num_in_flight_decodes_| is unsupported if |decode_calls_per_second_| > 0.
@@ -502,8 +494,6 @@
profile_ = (profile != media::VIDEO_CODEC_PROFILE_UNKNOWN
? profile
: media::H264PROFILE_BASELINE);
-
- weak_this_ = weak_this_factory_.GetWeakPtr();
}
GLRenderingVDAClient::~GLRenderingVDAClient() {
@@ -512,35 +502,114 @@
SetState(CS_DESTROYED);
}
+static bool DoNothingReturnTrue() { return true; }
+
+scoped_ptr<media::VideoDecodeAccelerator>
+GLRenderingVDAClient::CreateFakeVDA() {
+ scoped_ptr<media::VideoDecodeAccelerator> decoder;
+ if (fake_decoder_) {
+ decoder.reset(new FakeVideoDecodeAccelerator(
+ static_cast<gfx::GLContext*> (rendering_helper_->GetGLContextHandle()),
+ frame_size_,
+ base::Bind(&DoNothingReturnTrue)));
+ }
+ return decoder;
+}
+
+scoped_ptr<media::VideoDecodeAccelerator>
+GLRenderingVDAClient::CreateDXVAVDA() {
+ scoped_ptr<media::VideoDecodeAccelerator> decoder;
+#if defined(OS_WIN)
+ if (base::win::GetVersion() >= base::win::VERSION_WIN7) {
+ const bool enable_accelerated_vpx_decode = false;
+ decoder.reset(new DXVAVideoDecodeAccelerator(
+ base::Bind(&DoNothingReturnTrue),
+ rendering_helper_->GetGLContext().get(),
+ enable_accelerated_vpx_decode));
+ }
+#endif
+ return decoder;
+}
+
+scoped_ptr<media::VideoDecodeAccelerator>
+GLRenderingVDAClient::CreateV4L2VDA() {
+ scoped_ptr<media::VideoDecodeAccelerator> decoder;
+#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC)
+ scoped_refptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kDecoder);
+ if (device.get()) {
+ base::WeakPtr<VideoDecodeAccelerator::Client> weak_client = AsWeakPtr();
+ decoder.reset(new V4L2VideoDecodeAccelerator(
+ static_cast<EGLDisplay>(rendering_helper_->GetGLDisplay()),
+ static_cast<EGLContext>(rendering_helper_->GetGLContextHandle()),
+ weak_client, base::Bind(&DoNothingReturnTrue), device,
+ base::ThreadTaskRunnerHandle::Get()));
+ }
+#endif
+ return decoder;
+}
+
+scoped_ptr<media::VideoDecodeAccelerator>
+GLRenderingVDAClient::CreateV4L2SliceVDA() {
+ scoped_ptr<media::VideoDecodeAccelerator> decoder;
+#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC)
+ scoped_refptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kDecoder);
+ if (device.get()) {
+ base::WeakPtr<VideoDecodeAccelerator::Client> weak_client = AsWeakPtr();
+ decoder.reset(new V4L2SliceVideoDecodeAccelerator(
+ device, static_cast<EGLDisplay>(rendering_helper_->GetGLDisplay()),
+ static_cast<EGLContext>(rendering_helper_->GetGLContextHandle()),
+ weak_client, base::Bind(&DoNothingReturnTrue),
+ base::ThreadTaskRunnerHandle::Get()));
+ }
+#endif
+ return decoder;
+}
+
+scoped_ptr<media::VideoDecodeAccelerator>
+GLRenderingVDAClient::CreateVaapiVDA() {
+ scoped_ptr<media::VideoDecodeAccelerator> decoder;
+#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY)
+ decoder.reset(new VaapiVideoDecodeAccelerator(
+ base::Bind(&DoNothingReturnTrue),
+ base::Bind(&GLRenderingVDAClient::BindImage, base::Unretained(this))));
+#endif
+ return decoder;
+}
+
+void GLRenderingVDAClient::BindImage(uint32_t client_texture_id,
+ uint32_t texture_target,
+ scoped_refptr<gl::GLImage> image,
+ bool can_bind_to_sampler) {}
+
void GLRenderingVDAClient::CreateAndStartDecoder() {
LOG_ASSERT(decoder_deleted());
LOG_ASSERT(!decoder_.get());
- if (fake_decoder_) {
- decoder_.reset(new FakeVideoDecodeAccelerator(
- frame_size_, base::Bind(&DoNothingReturnTrue)));
- LOG_ASSERT(decoder_->Initialize(profile_, this));
- } else {
- if (!vda_factory_) {
- vda_factory_ = GpuVideoDecodeAcceleratorFactoryImpl::Create(
- base::Bind(&RenderingHelper::GetGLContext,
- base::Unretained(rendering_helper_)),
- base::Bind(&DoNothingReturnTrue), base::Bind(&DummyBindImage));
- LOG_ASSERT(vda_factory_);
- }
-
- VideoDecodeAccelerator::Config config(profile_);
- gpu::GpuPreferences gpu_preferences;
- decoder_ = vda_factory_->CreateVDA(this, config, gpu_preferences);
- }
-
- LOG_ASSERT(decoder_) << "Failed creating a VDA";
-
- decoder_->TryToSetupDecodeOnSeparateThread(
- weak_this_, base::ThreadTaskRunnerHandle::Get());
-
- SetState(CS_DECODER_SET);
- FinishInitialization();
+ VideoDecodeAccelerator::Client* client = this;
+
+ scoped_ptr<media::VideoDecodeAccelerator> decoders[] = {
+ CreateFakeVDA(),
+ CreateDXVAVDA(),
+ CreateV4L2VDA(),
+ CreateV4L2SliceVDA(),
+ CreateVaapiVDA(),
+ };
+
+ for (size_t i = 0; i < arraysize(decoders); ++i) {
+ if (!decoders[i])
+ continue;
+ decoder_ = std::move(decoders[i]);
+ weak_decoder_factory_.reset(
+ new base::WeakPtrFactory<VideoDecodeAccelerator>(decoder_.get()));
+ if (decoder_->Initialize(profile_, client)) {
+ SetState(CS_DECODER_SET);
+ FinishInitialization();
+ return;
+ }
+ }
+ // Decoders are all initialize failed.
+ LOG(ERROR) << "VideoDecodeAccelerator::Initialize() failed";
+ LOG_ASSERT(false);
}
void GLRenderingVDAClient::ProvidePictureBuffers(
@@ -644,8 +713,10 @@
if (num_decoded_frames_ > delay_reuse_after_frame_num_) {
base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE, base::Bind(&VideoDecodeAccelerator::ReusePictureBuffer,
- weak_vda_, picture_buffer_id),
+ FROM_HERE,
+ base::Bind(&VideoDecodeAccelerator::ReusePictureBuffer,
+ weak_decoder_factory_->GetWeakPtr(),
+ picture_buffer_id),
kReuseDelay);
} else {
decoder_->ReusePictureBuffer(picture_buffer_id);
@@ -767,7 +838,7 @@
void GLRenderingVDAClient::DeleteDecoder() {
if (decoder_deleted())
return;
- weak_vda_ptr_factory_.reset();
+ weak_decoder_factory_.reset();
decoder_.reset();
STLClearObject(&encoded_data_);
active_textures_.clear();
« no previous file with comments | « content/common/gpu/media/vaapi_video_decode_accelerator.cc ('k') | content/common/gpu/media/vt_video_decode_accelerator_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698