15 return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
22 AHardwareBuffer_Desc ahb_desc = {};
28 ahb_desc.usage |= (AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER |
29 AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT);
32 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY;
35 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
38 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_CPU_READ_RARELY;
41 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN;
44 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY;
47 ahb_desc.usage |= AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN;
54 return GetProcTable().AHardwareBuffer_isSupported(&desc) != 0u;
58 : descriptor_(descriptor),
61 VALIDATION_LOG <<
"The hardware buffer descriptor is not allocatable.";
66 AHardwareBuffer* buffer =
nullptr;
68 proc_table.AHardwareBuffer_allocate(&android_descriptor_, &buffer);
69 result != 0 || buffer ==
nullptr) {
70 VALIDATION_LOG <<
"Could not allocate hardware buffer. Error: " << result;
73 buffer_.reset(buffer);
104 return android_descriptor_;
116 AHardwareBuffer* buffer) {
120 uint64_t out_id = 0u;
121 if (
GetProcTable().AHardwareBuffer_getId(buffer, &out_id) != 0) {
128 AHardwareBuffer* buffer) {
129 if (!buffer || !
GetProcTable().AHardwareBuffer_describe) {
132 AHardwareBuffer_Desc desc = {};
138 if (!is_valid_ || !
GetProcTable().AHardwareBuffer_lock) {
144 usage |= AHARDWAREBUFFER_USAGE_CPU_READ_MASK;
147 usage |= AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK;
150 void* buffer =
nullptr;
151 const auto result =
GetProcTable().AHardwareBuffer_lock(
158 return result == 0 ? buffer :
nullptr;
162 if (!is_valid_ || !
GetProcTable().AHardwareBuffer_unlock) {
166 GetProcTable().AHardwareBuffer_unlock(buffer_.get(),
nullptr);