#include <ui/Gralloc1On0Adapter.h>
+#include <algorithm>
+#include <array>
+
#include <grallocusage/GrallocUsageConversion.h>
#include <hardware/gralloc.h>
void Gralloc1On0Adapter::doGetCapabilities(uint32_t* outCount,
int32_t* outCapabilities)
{
+ constexpr std::array<int32_t, 2> supportedCapabilities = {{
+ GRALLOC1_CAPABILITY_ON_ADAPTER,
+ GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE,
+ }};
+
if (outCapabilities == nullptr) {
- *outCount = 1;
- return;
- }
- if (*outCount >= 1) {
- *outCapabilities = GRALLOC1_CAPABILITY_ON_ADAPTER;
- *outCount = 1;
+ *outCount = supportedCapabilities.size();
+ } else {
+ *outCount = std::min(*outCount, static_cast<uint32_t>(
+ supportedCapabilities.size()));
+ std::copy_n(supportedCapabilities.begin(),
+ *outCount, outCapabilities);
}
}
if (result != 0) {
ALOGE("gralloc0 unregister failed: %d", result);
}
+
+ native_handle_close(handle);
+ native_handle_delete(const_cast<native_handle_t*>(handle));
}
mBuffers.erase(handle);
error = GRALLOC1_ERROR_NONE;
} else {
error = mDevice->release(handle);
- native_handle_close(handle);
- native_handle_delete(const_cast<native_handle_t*>(handle));
+ if (!mDevice->hasCapability(GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE)) {
+ native_handle_close(handle);
+ native_handle_delete(const_cast<native_handle_t*>(handle));
+ }
}
ALOGW_IF(error != GRALLOC1_ERROR_NONE, "freeBuffer(%p): failed %d",