summaryrefslogtreecommitdiff
path: root/GrallocHAL/src/hidl_common/Allocator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'GrallocHAL/src/hidl_common/Allocator.cpp')
-rw-r--r--GrallocHAL/src/hidl_common/Allocator.cpp150
1 files changed, 0 insertions, 150 deletions
diff --git a/GrallocHAL/src/hidl_common/Allocator.cpp b/GrallocHAL/src/hidl_common/Allocator.cpp
deleted file mode 100644
index 8174f05..0000000
--- a/GrallocHAL/src/hidl_common/Allocator.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2020 ARM Limited. All rights reserved.
- *
- * Copyright 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SharedMetadata.h"
-#include "Allocator.h"
-#include "core/mali_gralloc_bufferallocation.h"
-#include "core/mali_gralloc_bufferdescriptor.h"
-#include "core/format_info.h"
-#include "allocator/mali_gralloc_ion.h"
-#include "allocator/mali_gralloc_shared_memory.h"
-#include "gralloc_priv.h"
-
-namespace arm
-{
-namespace allocator
-{
-namespace common
-{
-
-void allocate(const buffer_descriptor_t &bufferDescriptor, uint32_t count, IAllocator::allocate_cb hidl_cb,
- std::function<int(const buffer_descriptor_t *, buffer_handle_t *)> fb_allocator)
-{
-#if DISABLE_FRAMEBUFFER_HAL
- GRALLOC_UNUSED(fb_allocator);
-#endif
-
- Error error = Error::NONE;
- int stride = 0;
- std::vector<hidl_handle> grallocBuffers;
- gralloc_buffer_descriptor_t grallocBufferDescriptor[1];
-
- grallocBufferDescriptor[0] = (gralloc_buffer_descriptor_t)(&bufferDescriptor);
- grallocBuffers.reserve(count);
-
- for (uint32_t i = 0; i < count; i++)
- {
- buffer_handle_t tmpBuffer = nullptr;
-
- int allocResult;
-#if (DISABLE_FRAMEBUFFER_HAL != 1)
- if (((bufferDescriptor.producer_usage & GRALLOC_USAGE_HW_FB) ||
- (bufferDescriptor.consumer_usage & GRALLOC_USAGE_HW_FB)) &&
- fb_allocator)
- {
- allocResult = fb_allocator(&bufferDescriptor, &tmpBuffer);
- }
- else
-#endif
- {
- allocResult = mali_gralloc_buffer_allocate(grallocBufferDescriptor, 1, &tmpBuffer, nullptr);
- if (allocResult != 0)
- {
- MALI_GRALLOC_LOGE("%s, buffer allocation failed with %d", __func__, allocResult);
- error = Error::NO_RESOURCES;
- break;
- }
- auto hnd = const_cast<private_handle_t *>(reinterpret_cast<const private_handle_t *>(tmpBuffer));
- hnd->imapper_version = HIDL_MAPPER_VERSION_SCALED;
-
- hnd->reserved_region_size = bufferDescriptor.reserved_size;
- hnd->attr_size = mapper::common::shared_metadata_size() + hnd->reserved_region_size;
-
- if (hnd->get_usage() & GRALLOC_USAGE_ROIINFO)
- {
- hnd->attr_size += 32768;
- }
-
- /* TODO: must do error checking */
- mali_gralloc_ion_allocate_attr(hnd);
-
- /* TODO: error check for failure */
- hnd->attr_base = mmap(nullptr, hnd->attr_size, PROT_READ | PROT_WRITE,
- MAP_SHARED, hnd->get_share_attr_fd(), 0);
-
- memset(hnd->attr_base, 0, hnd->attr_size);
-
- mapper::common::shared_metadata_init(hnd->attr_base, bufferDescriptor.name);
-
- const uint32_t base_format = bufferDescriptor.alloc_format & MALI_GRALLOC_INTFMT_FMT_MASK;
- const uint64_t usage = bufferDescriptor.consumer_usage | bufferDescriptor.producer_usage;
- android_dataspace_t dataspace;
- get_format_dataspace(base_format, usage, hnd->width, hnd->height, &dataspace);
-
- mapper::common::set_dataspace(hnd, static_cast<mapper::common::Dataspace>(dataspace));
-
- /*
- * We need to set attr_base to MAP_FAILED before the HIDL callback
- * to avoid sending an invalid pointer to the client process.
- *
- * hnd->attr_base = mmap(...);
- * hidl_callback(hnd); // client receives hnd->attr_base = <dangling pointer>
- */
- munmap(hnd->attr_base, hnd->attr_size);
- hnd->attr_base = 0;
- }
-
- int tmpStride = 0;
- tmpStride = bufferDescriptor.pixel_stride;
-
- if (stride == 0)
- {
- stride = tmpStride;
- }
- else if (stride != tmpStride)
- {
- /* Stride must be the same for all allocations */
- mali_gralloc_buffer_free(tmpBuffer);
- stride = 0;
- error = Error::UNSUPPORTED;
- break;
- }
-
- grallocBuffers.emplace_back(hidl_handle(tmpBuffer));
- }
-
- /* Populate the array of buffers for application consumption */
- hidl_vec<hidl_handle> hidlBuffers;
- if (error == Error::NONE)
- {
- hidlBuffers.setToExternal(grallocBuffers.data(), grallocBuffers.size());
- }
- hidl_cb(error, stride, hidlBuffers);
-
- /* The application should import the Gralloc buffers using IMapper for
- * further usage. Free the allocated buffers in IAllocator context
- */
- for (const auto &buffer : grallocBuffers)
- {
- mali_gralloc_buffer_free(buffer.getNativeHandle());
- }
-}
-
-} // namespace common
-} // namespace allocator
-} // namespace arm