diff options
author | Ankit Goyal <layog@google.com> | 2023-08-10 22:13:04 -0700 |
---|---|---|
committer | Ankit Goyal <layog@google.com> | 2023-08-31 18:57:14 -0700 |
commit | df7da80f6dc3e47772a68b71fd84d99a1183ddca (patch) | |
tree | 0fc53a1e61dc272fd0e7dda1b0d7062f62e5965b | |
parent | 47b9d743df3c5e6d2fdb3950b744918183bfbdb6 (diff) | |
download | gchips-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.bp | 1 | ||||
-rw-r--r-- | gralloc4/src/hidl_common/MapperMetadata.cpp | 104 | ||||
-rw-r--r-- | gralloc4/src/hidl_common/SharedMetadata.cpp | 12 | ||||
-rw-r--r-- | gralloc4/src/hidl_common/SharedMetadata.h | 4 |
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 |