blob: daf608884f566e4ee34fcd17720af9b66311ec2f [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_GPU_GPU_ARC_VIDEO_DECODE_ACCELERATOR_H_
#define CHROME_GPU_GPU_ARC_VIDEO_DECODE_ACCELERATOR_H_
#include <memory>
#include <vector>
#include "base/files/scoped_file.h"
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "chrome/gpu/arc_video_decode_accelerator.h"
#include "components/arc/common/video_decode_accelerator.mojom.h"
#include "components/arc/video_accelerator/video_accelerator.h"
#include "gpu/command_buffer/service/gpu_preferences.h"
namespace chromeos {
namespace arc {
class ProtectedBufferManager;
// GpuArcVideoDecodeAccelerator manages life-cycle and IPC message translation
// for ArcVideoDecodeAccelerator.
//
// For each creation request from GpuArcVideoDecodeAcceleratorHost,
// GpuArcVideoDecodeAccelerator will create a new IPC channel.
class GpuArcVideoDecodeAccelerator
: public ::arc::mojom::VideoDecodeAccelerator,
public ArcVideoDecodeAccelerator::Client {
public:
GpuArcVideoDecodeAccelerator(
const gpu::GpuPreferences& gpu_preferences,
ProtectedBufferManager* protected_buffer_manager);
~GpuArcVideoDecodeAccelerator() override;
private:
// ArcVideoDecodeAccelerator::Client implementation.
void OnError(ArcVideoDecodeAccelerator::Result error) override;
void OnBufferDone(PortType port,
uint32_t index,
const BufferMetadata& metadata) override;
void OnFlushDone() override;
void OnResetDone() override;
void OnOutputFormatChanged(const VideoFormat& format) override;
// ::arc::mojom::VideoDecodeAccelerator implementation.
void Initialize(::arc::mojom::VideoDecodeAcceleratorConfigPtr config,
::arc::mojom::VideoDecodeClientPtr client,
InitializeCallback callback) override;
void AllocateProtectedBuffer(
::arc::mojom::PortType port,
uint32_t index,
mojo::ScopedHandle handle,
uint64_t size,
AllocateProtectedBufferCallback callback) override;
void BindSharedMemory(::arc::mojom::PortType port,
uint32_t index,
mojo::ScopedHandle ashmem_handle,
uint32_t offset,
uint32_t length) override;
void BindDmabuf(::arc::mojom::PortType port,
uint32_t index,
mojo::ScopedHandle dmabuf_handle,
std::vector<::arc::VideoFramePlane> planes) override;
void UseBuffer(::arc::mojom::PortType port,
uint32_t index,
::arc::mojom::BufferMetadataPtr metadata) override;
void SetNumberOfOutputBuffers(uint32_t number) override;
void Flush() override;
void Reset() override;
base::ScopedFD UnwrapFdFromMojoHandle(mojo::ScopedHandle handle);
THREAD_CHECKER(thread_checker_);
gpu::GpuPreferences gpu_preferences_;
std::unique_ptr<ArcVideoDecodeAccelerator> accelerator_;
::arc::mojom::VideoDecodeClientPtr client_;
DISALLOW_COPY_AND_ASSIGN(GpuArcVideoDecodeAccelerator);
};
} // namespace arc
} // namespace chromeos
#endif // CHROME_GPU_GPU_ARC_VIDEO_DECODE_ACCELERATOR_H_