/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/** * AndroidHardwareBufferApi provides apis for managing AHardwareBuffer. * The apis are supported since Android O(APIVersion 26).
*/ class AndroidHardwareBufferApi final { public: staticvoid Init(); staticvoid Shutdown();
void Allocate(const AHardwareBuffer_Desc* aDesc,
AHardwareBuffer** aOutBuffer); void Acquire(AHardwareBuffer* aBuffer); void Release(AHardwareBuffer* aBuffer); void Describe(const AHardwareBuffer* aBuffer, AHardwareBuffer_Desc* aOutDesc); int Lock(AHardwareBuffer* aBuffer, uint64_t aUsage, int32_t aFence, const ARect* aRect, void** aOutVirtualAddress); int Unlock(AHardwareBuffer* aBuffer, int32_t* aFence); int SendHandleToUnixSocket(const AHardwareBuffer* aBuffer, int aSocketFd); int RecvHandleFromUnixSocket(int aSocketFd, AHardwareBuffer** aOutBuffer);
private:
AndroidHardwareBufferApi(); bool Load();
using _AHardwareBuffer_allocate = int (*)(const AHardwareBuffer_Desc* desc,
AHardwareBuffer** outBuffer); using _AHardwareBuffer_acquire = void (*)(AHardwareBuffer* buffer); using _AHardwareBuffer_release = void (*)(AHardwareBuffer* buffer); using _AHardwareBuffer_describe = void (*)(const AHardwareBuffer* buffer,
AHardwareBuffer_Desc* outDesc); using _AHardwareBuffer_lock = int (*)(AHardwareBuffer* buffer, uint64_t usage,
int32_t fence, const ARect* rect, void** outVirtualAddress); using _AHardwareBuffer_unlock = int (*)(AHardwareBuffer* buffer,
int32_t* fence); using _AHardwareBuffer_sendHandleToUnixSocket = int (*)(const AHardwareBuffer* buffer, int socketFd); using _AHardwareBuffer_recvHandleFromUnixSocket = int (*)(int socketFd, AHardwareBuffer** outBuffer);
/** * AndroidHardwareBuffer is a wrapper of AHardwareBuffer. AHardwareBuffer wraps * android GraphicBuffer. It is supported since Android O(APIVersion 26). * The manager is mainly used for release fences delivery from * host side to client side.
*/ class AndroidHardwareBuffer
: public SupportsThreadSafeWeakPtr<AndroidHardwareBuffer> { public:
MOZ_DECLARE_REFCOUNTED_TYPENAME(AndroidHardwareBuffer)
// When true, AndroidHardwareBuffer is registered to // AndroidHardwareBufferManager. bool mIsRegistered;
// protected by AndroidHardwareBufferManager::mMonitor
// FileDescriptor of release fence. // Release fence is a fence that is used for waiting until usage/composite of // AHardwareBuffer is ended. The fence is delivered via ImageBridge.
ipc::FileDescriptor mReleaseFenceFd;
// FileDescriptor of acquire fence. // Acquire fence is a fence that is used for waiting until rendering to // its AHardwareBuffer is completed.
ipc::FileDescriptor mAcquireFenceFd;
static uint64_t GetNextId();
friendclass AndroidHardwareBufferManager;
};
/** * AndroidHardwareBufferManager manages AndroidHardwareBuffers that is * allocated by client side. * Host side only uses mMonitor for thread safety of AndroidHardwareBuffer.
*/ class AndroidHardwareBufferManager { public: staticvoid Init(); staticvoid Shutdown();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.