Commit daa138be authored by posciak's avatar posciak Committed by Commit bot

GVDA, vdatest: Enable V4L2SliceVideoDecodeAccelerator.

Instantiate V4L2SVDA in GVDA and vdatest to be used if the hardware
cannot support the current frame-based API and try to use slice-based API
instead.

BUG=chrome-os-partner:33728
TEST=vdatest,veatest,apprtc,video playback

Review URL: https://codereview.chromium.org/808973004

Cr-Commit-Position: refs/heads/master@{#311465}
parent 3c09b9b2
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
#elif defined(OS_MACOSX) #elif defined(OS_MACOSX)
#include "content/common/gpu/media/vt_video_decode_accelerator.h" #include "content/common/gpu/media/vt_video_decode_accelerator.h"
#elif defined(OS_CHROMEOS) #elif defined(OS_CHROMEOS)
#if defined(ARCH_CPU_ARMEL)
#include "content/common/gpu/media/v4l2_slice_video_decode_accelerator.h"
#endif // defined(ARCH_CPU_ARMEL)
#if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) #if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC))
#include "content/common/gpu/media/v4l2_video_decode_accelerator.h" #include "content/common/gpu/media/v4l2_video_decode_accelerator.h"
#include "content/common/gpu/media/v4l2_video_device.h" #include "content/common/gpu/media/v4l2_video_device.h"
...@@ -275,6 +278,7 @@ GpuVideoDecodeAccelerator::CreateVDAFps() { ...@@ -275,6 +278,7 @@ GpuVideoDecodeAccelerator::CreateVDAFps() {
std::vector<GpuVideoDecodeAccelerator::CreateVDAFp> create_vda_fps; std::vector<GpuVideoDecodeAccelerator::CreateVDAFp> create_vda_fps;
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateDXVAVDA); create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateDXVAVDA);
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateV4L2VDA); create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateV4L2VDA);
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateV4L2SliceVDA);
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateVaapiVDA); create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateVaapiVDA);
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateVTVDA); create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateVTVDA);
create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateOzoneVDA); create_vda_fps.push_back(&GpuVideoDecodeAccelerator::CreateOzoneVDA);
...@@ -315,6 +319,24 @@ GpuVideoDecodeAccelerator::CreateV4L2VDA() { ...@@ -315,6 +319,24 @@ GpuVideoDecodeAccelerator::CreateV4L2VDA() {
return decoder.Pass(); return decoder.Pass();
} }
scoped_ptr<media::VideoDecodeAccelerator>
GpuVideoDecodeAccelerator::CreateV4L2SliceVDA() {
scoped_ptr<media::VideoDecodeAccelerator> decoder;
#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)
scoped_refptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kDecoder);
if (device.get()) {
decoder.reset(new V4L2SliceVideoDecodeAccelerator(
device,
gfx::GLSurfaceEGL::GetHardwareDisplay(),
stub_->decoder()->GetGLContext()->GetHandle(),
weak_factory_for_io_.GetWeakPtr(),
make_context_current_,
io_message_loop_));
}
#endif
return decoder.Pass();
}
scoped_ptr<media::VideoDecodeAccelerator> scoped_ptr<media::VideoDecodeAccelerator>
GpuVideoDecodeAccelerator::CreateVaapiVDA() { GpuVideoDecodeAccelerator::CreateVaapiVDA() {
scoped_ptr<media::VideoDecodeAccelerator> decoder; scoped_ptr<media::VideoDecodeAccelerator> decoder;
......
...@@ -77,6 +77,7 @@ class GpuVideoDecodeAccelerator ...@@ -77,6 +77,7 @@ class GpuVideoDecodeAccelerator
std::vector<CreateVDAFp> CreateVDAFps(); std::vector<CreateVDAFp> CreateVDAFps();
scoped_ptr<media::VideoDecodeAccelerator> CreateDXVAVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateDXVAVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2VDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2VDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2SliceVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateVaapiVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateVaapiVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateVTVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateVTVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateOzoneVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateOzoneVDA();
......
...@@ -57,6 +57,9 @@ ...@@ -57,6 +57,9 @@
#include "base/win/windows_version.h" #include "base/win/windows_version.h"
#include "content/common/gpu/media/dxva_video_decode_accelerator.h" #include "content/common/gpu/media/dxva_video_decode_accelerator.h"
#elif defined(OS_CHROMEOS) #elif defined(OS_CHROMEOS)
#if defined(ARCH_CPU_ARMEL)
#include "content/common/gpu/media/v4l2_slice_video_decode_accelerator.h"
#endif // defined(ARCH_CPU_ARMEL)
#if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) #if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC))
#include "content/common/gpu/media/v4l2_video_decode_accelerator.h" #include "content/common/gpu/media/v4l2_video_decode_accelerator.h"
#include "content/common/gpu/media/v4l2_video_device.h" #include "content/common/gpu/media/v4l2_video_device.h"
...@@ -292,6 +295,7 @@ class GLRenderingVDAClient ...@@ -292,6 +295,7 @@ class GLRenderingVDAClient
scoped_ptr<media::VideoDecodeAccelerator> CreateDXVAVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateDXVAVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2VDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2VDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateV4L2SliceVDA();
scoped_ptr<media::VideoDecodeAccelerator> CreateVaapiVDA(); scoped_ptr<media::VideoDecodeAccelerator> CreateVaapiVDA();
void SetState(ClientState new_state); void SetState(ClientState new_state);
...@@ -457,6 +461,24 @@ GLRenderingVDAClient::CreateV4L2VDA() { ...@@ -457,6 +461,24 @@ GLRenderingVDAClient::CreateV4L2VDA() {
return decoder.Pass(); return decoder.Pass();
} }
scoped_ptr<media::VideoDecodeAccelerator>
GLRenderingVDAClient::CreateV4L2SliceVDA() {
scoped_ptr<media::VideoDecodeAccelerator> decoder;
#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)
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::MessageLoopProxy::current()));
}
#endif
return decoder.Pass();
}
scoped_ptr<media::VideoDecodeAccelerator> scoped_ptr<media::VideoDecodeAccelerator>
GLRenderingVDAClient::CreateVaapiVDA() { GLRenderingVDAClient::CreateVaapiVDA() {
scoped_ptr<media::VideoDecodeAccelerator> decoder; scoped_ptr<media::VideoDecodeAccelerator> decoder;
...@@ -476,7 +498,8 @@ void GLRenderingVDAClient::CreateAndStartDecoder() { ...@@ -476,7 +498,8 @@ void GLRenderingVDAClient::CreateAndStartDecoder() {
scoped_ptr<media::VideoDecodeAccelerator> decoders[] = { scoped_ptr<media::VideoDecodeAccelerator> decoders[] = {
CreateDXVAVDA(), CreateDXVAVDA(),
CreateV4L2VDA(), CreateV4L2VDA(),
CreateVaapiVDA() CreateV4L2SliceVDA(),
CreateVaapiVDA(),
}; };
for (size_t i = 0; i < arraysize(decoders); ++i) { for (size_t i = 0; i < arraysize(decoders); ++i) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment