summaryrefslogtreecommitdiff
path: root/gralloc4/src/libGralloc4Wrapper/wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gralloc4/src/libGralloc4Wrapper/wrapper.cpp')
-rw-r--r--gralloc4/src/libGralloc4Wrapper/wrapper.cpp43
1 files changed, 12 insertions, 31 deletions
diff --git a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp
index c9d3381..f9b1b9c 100644
--- a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp
+++ b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp
@@ -5,7 +5,6 @@
#include "core/format_info.h"
#include "core/mali_gralloc_bufferdescriptor.h"
#include "core/mali_gralloc_bufferallocation.h"
-#include "core/mali_gralloc_reference.h"
#include "allocator/mali_gralloc_ion.h"
#include "hidl_common/SharedMetadata.h"
#include "gralloc_priv.h"
@@ -158,27 +157,32 @@ buffer_handle_t createNativeHandle(const Descriptor &descriptor) {
}
{
- hnd->attr_base = mmap(nullptr, hnd->attr_size, PROT_READ | PROT_WRITE,
+ auto metadata_vaddr = mmap(nullptr, hnd->attr_size, PROT_READ | PROT_WRITE,
MAP_SHARED, hnd->get_share_attr_fd(), 0);
- if (hnd->attr_base == MAP_FAILED) {
+ if (metadata_vaddr == MAP_FAILED) {
ALOGE("mmap hnd->get_share_attr_fd() failed");
mali_gralloc_buffer_free(tmp_buffer);
return nullptr;
}
- memset(hnd->attr_base, 0, hnd->attr_size);
+ memset(metadata_vaddr, 0, hnd->attr_size);
- arm::mapper::common::shared_metadata_init(hnd->attr_base, buffer_descriptor.name);
+ arm::mapper::common::shared_metadata_init(metadata_vaddr, buffer_descriptor.name);
const uint32_t base_format = buffer_descriptor.alloc_format & MALI_GRALLOC_INTFMT_FMT_MASK;
const uint64_t usage = buffer_descriptor.consumer_usage | buffer_descriptor.producer_usage;
android_dataspace_t dataspace;
get_format_dataspace(base_format, usage, hnd->width, hnd->height, &dataspace);
- arm::mapper::common::set_dataspace(hnd, static_cast<arm::mapper::common::Dataspace>(dataspace));
+ {
+ using arm::mapper::common::aligned_optional;
+ using arm::mapper::common::Dataspace;
+ using arm::mapper::common::shared_metadata;
+ (static_cast<shared_metadata *>(metadata_vaddr))->dataspace =
+ aligned_optional(static_cast<Dataspace>(dataspace));
+ }
- munmap(hnd->attr_base, hnd->attr_size);
- hnd->attr_base = 0;
+ munmap(metadata_vaddr, hnd->attr_size);
}
// TODO(modan@, handle all plane offsets)
@@ -195,15 +199,6 @@ int freeImportedHandle(void *handle)
const private_handle_t *hnd = static_cast<private_handle_t *>(handle);
- struct UnmapWork { void *base; size_t alloc_size; };
- std::vector<UnmapWork> work(hnd->fd_count);
-
- for (size_t i = 0; i < hnd->fd_count; ++i)
- {
- work[i].base = reinterpret_cast<void*>(hnd->bases[i]);
- work[i].alloc_size = hnd->alloc_sizes[i];
- }
-
static android::sp<IMapper> mapper = IMapper::getService();
if (!mapper)
{
@@ -217,20 +212,6 @@ int freeImportedHandle(void *handle)
return -1;
}
- {
- bool unmapFailed = false;
- for (const UnmapWork &w : work)
- {
- if (!w.base) { continue; }
- if (int ret = munmap(w.base, w.alloc_size); ret)
- {
- ALOGE("libGralloc4Wrapper: %s couldn't unmap address %p (size %zu): %s", __func__, w.base, w.alloc_size, strerror(ret));
- unmapFailed = true;
- }
- }
- if (unmapFailed) { return -1; }
- }
-
return 0;
}