// 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 BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_ #define BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_ // Minimal binary interface definitions for AHardwareBuffer based on // include/android/hardware_buffer.h from the Android NDK for platform level // 26+. This is only intended for use from the AndroidHardwareBufferCompat // wrapper for building without NDK platform level support, it is not a // general-use header and is not complete. // // TODO(crbug.com/771171): Delete this file when third_party/android_ndk/ // is updated to a version that contains the android/hardware_buffer.h file. // // Please refer to the API documentation for details: // https://developer.android.com/ndk/reference/hardware__buffer_8h.html #include // Use "C" linkage to match the original header file. This isn't strictly // required since the file is not declaring global functions, but the types // should remain in the global namespace for compatibility, and it's a reminder // that forward declarations elsewhere should use "extern "C" to avoid // namespace issues. extern "C" { typedef struct AHardwareBuffer AHardwareBuffer; typedef struct ARect ARect; enum { AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1, AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2, AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3, AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4, AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = 0x16, AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = 0x2b, AHARDWAREBUFFER_FORMAT_BLOB = 0x21, }; enum { AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0UL, AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2UL, AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3UL, AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 0xFUL, AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0UL << 4, AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 2UL << 4, AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 3UL << 4, AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 0xFUL << 4, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8, AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 1UL << 9, AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14, AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 1UL << 16, AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 1UL << 23, AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 1UL << 24, }; typedef struct AHardwareBuffer_Desc { uint32_t width; uint32_t height; uint32_t layers; uint32_t format; uint64_t usage; uint32_t stride; uint32_t rfu0; uint64_t rfu1; } AHardwareBuffer_Desc; 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); } // extern "C" #endif // BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_