diff options
Diffstat (limited to 'chromium/base/android/android_hardware_buffer_compat.h')
-rw-r--r-- | chromium/base/android/android_hardware_buffer_compat.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/chromium/base/android/android_hardware_buffer_compat.h b/chromium/base/android/android_hardware_buffer_compat.h new file mode 100644 index 00000000000..99053ae7bad --- /dev/null +++ b/chromium/base/android/android_hardware_buffer_compat.h @@ -0,0 +1,77 @@ +// Copyright 2017 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_ANDROID_ANDROID_HARDWARE_BUFFER_COMPAT_H_ +#define BASE_ANDROID_ANDROID_HARDWARE_BUFFER_COMPAT_H_ + +#include <android/hardware_buffer.h> +#include <android/sensor.h> + +#include "base/base_export.h" +#include "base/no_destructor.h" + +extern "C" { +using PFAHardwareBuffer_allocate = void (*)(const AHardwareBuffer_Desc* desc, + AHardwareBuffer** outBuffer); +using PFAHardwareBuffer_acquire = void (*)(AHardwareBuffer* buffer); +using PFAHardwareBuffer_describe = void (*)(const AHardwareBuffer* buffer, + AHardwareBuffer_Desc* outDesc); +using PFAHardwareBuffer_lock = int (*)(AHardwareBuffer* buffer, + uint64_t usage, + int32_t fence, + const ARect* rect, + void** outVirtualAddress); +using PFAHardwareBuffer_recvHandleFromUnixSocket = + int (*)(int socketFd, AHardwareBuffer** outBuffer); +using PFAHardwareBuffer_release = void (*)(AHardwareBuffer* buffer); +using PFAHardwareBuffer_sendHandleToUnixSocket = + int (*)(const AHardwareBuffer* buffer, int socketFd); +using PFAHardwareBuffer_unlock = int (*)(AHardwareBuffer* buffer, + int32_t* fence); +} + +namespace base { + +// This class provides runtime support for working with AHardwareBuffer objects +// on Android O systems without requiring building for the Android O NDK level. +// Don't call GetInstance() unless IsSupportAvailable() returns true. +class BASE_EXPORT AndroidHardwareBufferCompat { + public: + static bool IsSupportAvailable(); + static AndroidHardwareBufferCompat& GetInstance(); + + AndroidHardwareBufferCompat(const AndroidHardwareBufferCompat&) = delete; + AndroidHardwareBufferCompat& operator=(const AndroidHardwareBufferCompat&) = + delete; + + void Allocate(const AHardwareBuffer_Desc* desc, AHardwareBuffer** outBuffer); + void Acquire(AHardwareBuffer* buffer); + void Describe(const AHardwareBuffer* buffer, AHardwareBuffer_Desc* outDesc); + int Lock(AHardwareBuffer* buffer, + uint64_t usage, + int32_t fence, + const ARect* rect, + void** out_virtual_address); + int RecvHandleFromUnixSocket(int socketFd, AHardwareBuffer** outBuffer); + void Release(AHardwareBuffer* buffer); + int SendHandleToUnixSocket(const AHardwareBuffer* buffer, int socketFd); + int Unlock(AHardwareBuffer* buffer, int32_t* fence); + + private: + friend class NoDestructor<AndroidHardwareBufferCompat>; + AndroidHardwareBufferCompat(); + + PFAHardwareBuffer_allocate allocate_; + PFAHardwareBuffer_acquire acquire_; + PFAHardwareBuffer_describe describe_; + PFAHardwareBuffer_lock lock_; + PFAHardwareBuffer_recvHandleFromUnixSocket recv_handle_; + PFAHardwareBuffer_release release_; + PFAHardwareBuffer_sendHandleToUnixSocket send_handle_; + PFAHardwareBuffer_unlock unlock_; +}; + +} // namespace base + +#endif // BASE_ANDROID_ANDROID_HARDWARE_BUFFER_COMPAT_H_ |