|  | // 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_SERVICE_H_ | 
|  | #define CHROME_GPU_GPU_ARC_VIDEO_SERVICE_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/files/scoped_file.h" | 
|  | #include "base/macros.h" | 
|  | #include "chrome/gpu/arc_video_accelerator.h" | 
|  | #include "components/arc/common/video_accelerator.mojom.h" | 
|  | #include "components/arc/video_accelerator/video_accelerator.h" | 
|  | #include "gpu/command_buffer/service/gpu_preferences.h" | 
|  |  | 
|  | namespace chromeos { | 
|  | namespace arc { | 
|  |  | 
|  | // GpuArcVideoService manages life-cycle and IPC message translation for | 
|  | // ArcVideoAccelerator. | 
|  | // | 
|  | // For each creation request from GpuArcVideoServiceHost, GpuArcVideoService | 
|  | // will create a new IPC channel. | 
|  | class GpuArcVideoService : public ::arc::mojom::VideoAcceleratorService, | 
|  | public ArcVideoAccelerator::Client { | 
|  | public: | 
|  | explicit GpuArcVideoService(const gpu::GpuPreferences& gpu_preferences); | 
|  | ~GpuArcVideoService() override; | 
|  |  | 
|  | private: | 
|  | // ArcVideoAccelerator::Client implementation. | 
|  | void OnError(ArcVideoAccelerator::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::VideoAcceleratorService implementation. | 
|  | void Initialize(::arc::mojom::ArcVideoAcceleratorConfigPtr config, | 
|  | ::arc::mojom::VideoAcceleratorServiceClientPtr client, | 
|  | const InitializeCallback& 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::ArcVideoAcceleratorDmabufPlane> | 
|  | dmabuf_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); | 
|  |  | 
|  | base::ThreadChecker thread_checker_; | 
|  |  | 
|  | gpu::GpuPreferences gpu_preferences_; | 
|  | std::unique_ptr<ArcVideoAccelerator> accelerator_; | 
|  | ::arc::mojom::VideoAcceleratorServiceClientPtr client_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(GpuArcVideoService); | 
|  | }; | 
|  |  | 
|  | }  // namespace arc | 
|  | }  // namespace chromeos | 
|  |  | 
|  | #endif  // CHROME_GPU_GPU_ARC_VIDEO_SERVICE_H_ |