You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
4.2 KiB
102 lines
4.2 KiB
// Copyright 2017 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 ANDROID_C2_VDA_ADAPTOR_PROXY_H |
|
#define ANDROID_C2_VDA_ADAPTOR_PROXY_H |
|
|
|
#include <memory> |
|
|
|
#include <VideoDecodeAcceleratorAdaptor.h> |
|
|
|
#include <video_decode_accelerator.h> |
|
|
|
#include <arc/Future.h> |
|
#include <mojo/public/cpp/bindings/binding.h> |
|
|
|
#include <components/arc/common/video.mojom.h> |
|
#include <components/arc/common/video_decode_accelerator.mojom.h> |
|
|
|
namespace arc { |
|
class MojoProcessSupport; |
|
} // namespace arc |
|
|
|
namespace android { |
|
namespace arc { |
|
class C2VDAAdaptorProxy : public VideoDecodeAcceleratorAdaptor, |
|
public ::arc::mojom::VideoDecodeClient { |
|
public: |
|
C2VDAAdaptorProxy(); |
|
explicit C2VDAAdaptorProxy(::arc::MojoProcessSupport* MojomProcessSupport); |
|
~C2VDAAdaptorProxy() override; |
|
|
|
// Establishes ipc channel for video acceleration. Returns true if channel |
|
// connected successfully. |
|
// This must be called before all other methods. |
|
bool establishChannel(); |
|
|
|
// Implementation of the VideoDecodeAcceleratorAdaptor interface. |
|
Result initialize(media::VideoCodecProfile profile, bool secureMode, |
|
VideoDecodeAcceleratorAdaptor::Client* client) override; |
|
void decode(int32_t bitstreamId, int handleFd, off_t offset, uint32_t size) override; |
|
void assignPictureBuffers(uint32_t numOutputBuffers) override; |
|
void importBufferForPicture(int32_t pictureBufferId, HalPixelFormat format, int handleFd, |
|
const std::vector<VideoFramePlane>& planes) override; |
|
void reusePictureBuffer(int32_t pictureBufferId) override; |
|
void flush() override; |
|
void reset() override; |
|
void destroy() override; |
|
|
|
// ::arc::mojom::VideoDecodeClient implementations. |
|
void ProvidePictureBuffers(::arc::mojom::PictureBufferFormatPtr format) override; |
|
void PictureReady(::arc::mojom::PicturePtr picture) override; |
|
void NotifyEndOfBitstreamBuffer(int32_t bitstream_id) override; |
|
void NotifyError(::arc::mojom::VideoDecodeAccelerator::Result error) override; |
|
|
|
// The following functions are called as callbacks. |
|
void NotifyResetDone(::arc::mojom::VideoDecodeAccelerator::Result result); |
|
void NotifyFlushDone(::arc::mojom::VideoDecodeAccelerator::Result result); |
|
|
|
static media::VideoDecodeAccelerator::SupportedProfiles GetSupportedProfiles( |
|
InputCodec inputCodec); |
|
|
|
private: |
|
void onConnectionError(const std::string& pipeName); |
|
void establishChannelOnMojoThread(std::shared_ptr<::arc::Future<bool>> future); |
|
void onVersionReady(std::shared_ptr<::arc::Future<bool>> future, uint32_t version); |
|
|
|
// Closes ipc channel for video acceleration. |
|
// This must be called before deleting this object. |
|
void closeChannelOnMojoThread(); |
|
|
|
// mojo thread corresponding part of C2VDAAdaptorProxy implementations. |
|
void initializeOnMojoThread(const media::VideoCodecProfile profile, const bool mSecureMode, |
|
const ::arc::mojom::VideoDecodeAccelerator::InitializeCallback& cb); |
|
void decodeOnMojoThread(int32_t bitstreamId, int ashmemFd, off_t offset, uint32_t bytesUsed); |
|
void assignPictureBuffersOnMojoThread(uint32_t numOutputBuffers); |
|
|
|
void importBufferForPictureOnMojoThread(int32_t pictureBufferId, HalPixelFormat format, |
|
int handleFd, |
|
const std::vector<VideoFramePlane>& planes); |
|
void reusePictureBufferOnMojoThread(int32_t pictureBufferId); |
|
void flushOnMojoThread(); |
|
void resetOnMojoThread(); |
|
|
|
VideoDecodeAcceleratorAdaptor::Client* mClient; |
|
|
|
// Task runner for mojom functions. |
|
const scoped_refptr<::base::SingleThreadTaskRunner> mMojoTaskRunner; |
|
|
|
// |mVDAPtr| and |mBinding| should only be called on |mMojoTaskRunner| after bound. |
|
::arc::mojom::VideoDecodeAcceleratorPtr mVDAPtr; |
|
mojo::Binding<::arc::mojom::VideoDecodeClient> mBinding; |
|
|
|
// Used to cancel the wait on arc::Future. |
|
sp<::arc::CancellationRelay> mRelay; |
|
|
|
DISALLOW_COPY_AND_ASSIGN(C2VDAAdaptorProxy); |
|
}; |
|
} // namespace arc |
|
} // namespace android |
|
|
|
#endif // ANDROID_C2_VDA_ADAPTOR_PROXY_H
|
|
|