summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnkit Goyal <layog@google.com>2023-08-10 22:13:04 -0700
committerAnkit Goyal <layog@google.com>2023-08-31 18:57:14 -0700
commitdf7da80f6dc3e47772a68b71fd84d99a1183ddca (patch)
tree0fc53a1e61dc272fd0e7dda1b0d7062f62e5965b
parent47b9d743df3c5e6d2fdb3950b744918183bfbdb6 (diff)
downloadgchips-df7da80f6dc3e47772a68b71fd84d99a1183ddca.tar.gz
gralloc4: Add support for custom video metadata
Bug: 289448426 Test: ag/24398869 Merged-In: I5a9e7b8a336f26705660c9e5986957c4fa6e8e0e Change-Id: I5a9e7b8a336f26705660c9e5986957c4fa6e8e0e
-rw-r--r--gralloc4/Android.bp1
-rw-r--r--gralloc4/src/hidl_common/MapperMetadata.cpp104
-rw-r--r--gralloc4/src/hidl_common/SharedMetadata.cpp12
-rw-r--r--gralloc4/src/hidl_common/SharedMetadata.h4
4 files changed, 43 insertions, 78 deletions
diff --git a/gralloc4/Android.bp b/gralloc4/Android.bp
index d97cbdb..7cdc78f 100644
--- a/gralloc4/Android.bp
+++ b/gralloc4/Android.bp
@@ -93,6 +93,7 @@ arm_gralloc_cc_defaults {
},
header_libs: [
"libgralloc_headers",
+ "pixel-gralloc-headers",
],
target: {
android: {
diff --git a/gralloc4/src/hidl_common/MapperMetadata.cpp b/gralloc4/src/hidl_common/MapperMetadata.cpp
index fb79930..81835a3 100644
--- a/gralloc4/src/hidl_common/MapperMetadata.cpp
+++ b/gralloc4/src/hidl_common/MapperMetadata.cpp
@@ -28,9 +28,8 @@
#include "exynos_format.h"
#include "mali_gralloc_formats.h"
-#if 0
-#include "aidl/arm/graphics/ArmMetadataType.h"
-#endif
+#include <pixel-gralloc/metadata.h>
+
#include <vector>
namespace arm
@@ -387,67 +386,22 @@ static android::status_t get_plane_layouts(const private_handle_t *handle, std::
return android::OK;
}
-#if 0
-static android::status_t get_plane_fds(const private_handle_t *hnd, std::vector<int64_t> *fds)
-{
- const int num_planes = get_num_planes(hnd);
-
- fds->resize(num_planes, static_cast<int64_t>(hnd->share_fd));
-
- return android::OK;
-}
-
-/* Encode the number of fds as an int64_t followed by the int64_t fds themselves */
-static android::status_t encodeArmPlaneFds(const std::vector<int64_t>& fds, hidl_vec<uint8_t>* output)
-{
- int64_t n_fds = fds.size();
-
- output->resize((n_fds + 1) * sizeof(int64_t));
-
- memcpy(output->data(), &n_fds, sizeof(n_fds));
- memcpy(output->data() + sizeof(n_fds), fds.data(), sizeof(int64_t) * n_fds);
-
- return android::OK;
-}
-
-/* TODO GPUCORE-22819 Move to test code */
-android::status_t decodeArmPlaneFds(hidl_vec<uint8_t>& input, std::vector<int64_t>* fds)
-{
- int64_t size = 0;
-
- memcpy(input.data(), &size, sizeof(int64_t));
- if (size < 0)
- {
- return android::BAD_VALUE;
- }
-
- fds->resize(size);
-
- uint8_t *tmp = input.data() + sizeof(int64_t);
- memcpy(fds->data(), tmp, sizeof(int64_t) * size);
-
- return android::OK;
-}
+static hidl_vec<uint8_t> encodePointer(void* ptr) {
+ constexpr uint8_t kPtrSize = sizeof(void*);
-static bool isArmMetadataType(const MetadataType& metadataType)
-{
- return metadataType.name == GRALLOC_ARM_METADATA_TYPE_NAME;
-}
+ hidl_vec<uint8_t> output(kPtrSize);
+ std::memcpy(output.data(), &ptr, kPtrSize);
-static ArmMetadataType getArmMetadataTypeValue(const MetadataType& metadataType) {
- return static_cast<ArmMetadataType>(metadataType.value);
+ return output;
}
-#endif
void get_metadata(const private_handle_t *handle, const IMapper::MetadataType &metadataType, IMapper::get_cb hidl_cb)
{
- /* This will hold the metadata that is returned. */
+ android::status_t err = android::OK;
hidl_vec<uint8_t> vec;
if (android::gralloc4::isStandardMetadataType(metadataType))
{
- android::status_t err = android::OK;
-
switch (android::gralloc4::getStandardMetadataTypeValue(metadataType))
{
case StandardMetadataType::BUFFER_ID:
@@ -614,38 +568,32 @@ void get_metadata(const private_handle_t *handle, const IMapper::MetadataType &m
default:
err = android::BAD_VALUE;
}
- hidl_cb((err) ? Error::UNSUPPORTED : Error::NONE, vec);
}
- /* TODO: either remove or add support for get_plane_fds */
-#if 0
- else if (isArmMetadataType(metadataType))
- {
- android::status_t err = android::OK;
-
- switch (getArmMetadataTypeValue(metadataType))
- {
- case ArmMetadataType::PLANE_FDS:
- {
- std::vector<int64_t> fds;
-
- err = get_plane_fds(handle, &fds);
- if (!err)
+ else if (metadataType.name == ::pixel::graphics::kPixelMetadataTypeName) {
+ switch (static_cast<::pixel::graphics::MetadataType>(metadataType.value)) {
+ case ::pixel::graphics::MetadataType::VIDEO_HDR:
+ vec = encodePointer(get_video_hdr(handle));
+ break;
+ case ::pixel::graphics::MetadataType::VIDEO_ROI:
{
- err = encodeArmPlaneFds(fds, &vec);
+ auto roi = get_video_roiinfo(handle);
+ if (roi == nullptr) {
+ err = android::BAD_VALUE;
+ } else {
+ vec = encodePointer(roi);
+ }
+ break;
}
- break;
- }
- default:
- err = android::BAD_VALUE;
+ default:
+ err = android::BAD_VALUE;
}
- hidl_cb((err) ? Error::UNSUPPORTED : Error::NONE, vec);
}
-#endif
else
{
- /* If known vendor type, return it */
- hidl_cb(Error::UNSUPPORTED, vec);
+ err = android::BAD_VALUE;
}
+
+ hidl_cb((err) ? Error::UNSUPPORTED : Error::NONE, vec);
}
Error set_metadata(const private_handle_t *handle, const IMapper::MetadataType &metadataType,
diff --git a/gralloc4/src/hidl_common/SharedMetadata.cpp b/gralloc4/src/hidl_common/SharedMetadata.cpp
index b5964f7..27ed972 100644
--- a/gralloc4/src/hidl_common/SharedMetadata.cpp
+++ b/gralloc4/src/hidl_common/SharedMetadata.cpp
@@ -18,6 +18,7 @@
#include "SharedMetadata.h"
#include "mali_gralloc_log.h"
+#include "mali_gralloc_usages.h"
//#include <VendorVideoAPI.h>
namespace arm
@@ -160,6 +161,17 @@ android::status_t set_smpte2094_40(const private_handle_t *hnd, const std::optio
return android::OK;
}
+void* get_video_hdr(const private_handle_t *hnd) {
+ auto *metadata = reinterpret_cast<shared_metadata *>(hnd->attr_base);
+ return &(metadata->video_private_data);
+}
+
+void* get_video_roiinfo(const private_handle_t *hnd) {
+ if (!(hnd->get_usage() & GRALLOC_USAGE_ROIINFO))
+ return nullptr;
+
+ return static_cast<char*>(hnd->attr_base) + sizeof(shared_metadata) + hnd->reserved_region_size;
+}
} // namespace common
} // namespace mapper
} // namespace arm
diff --git a/gralloc4/src/hidl_common/SharedMetadata.h b/gralloc4/src/hidl_common/SharedMetadata.h
index e1f6d0b..9961733 100644
--- a/gralloc4/src/hidl_common/SharedMetadata.h
+++ b/gralloc4/src/hidl_common/SharedMetadata.h
@@ -68,6 +68,10 @@ android::status_t set_cta861_3(const private_handle_t *hnd, const std::optional<
void get_smpte2094_40(const private_handle_t *hnd, std::optional<std::vector<uint8_t>> *smpte2094_40);
android::status_t set_smpte2094_40(const private_handle_t *hnd, const std::optional<std::vector<uint8_t>> &smpte2094_40);
+void* get_video_hdr(const private_handle_t *hnd);
+
+void* get_video_roiinfo(const private_handle_t *hnd);
+
} // namespace common
} // namespace mapper
} // namespace arm