#pragma once #include #include #include "metadata.h" #include "utils-internal.h" namespace pixel::graphics::mapper { namespace { using android::hardware::graphics::mapper::V4_0::Error; using android::hardware::graphics::mapper::V4_0::IMapper; using namespace ::pixel::graphics; static inline android::sp get_mapper() { static android::sp mapper = []() { auto mapper = IMapper::getService(); if (!mapper) { ALOGE("Failed to get mapper service"); } return mapper; }(); return mapper; } } // namespace template std::optional::type> get(buffer_handle_t handle) { auto mapper = get_mapper(); IMapper::MetadataType type = { .name = kPixelMetadataTypeName, .value = static_cast(meta), }; android::hardware::hidl_vec vec; Error error; auto ret = mapper->get(const_cast(handle), type, [&](const auto& tmpError, const android::hardware::hidl_vec& tmpVec) { error = tmpError; vec = tmpVec; }); if (!ret.isOk()) { return {}; } return utils::decode::type>(vec); } template int32_t set(buffer_handle_t handle, typename metadata::ReturnType::type data) { android::sp mapper = get_mapper(); auto encoded_data = utils::encode::type>(data); IMapper::MetadataType type = { .name = kPixelMetadataTypeName, .value = static_cast(meta), }; Error err = mapper->set(const_cast(handle), type, encoded_data); return static_cast(err); } } // namespace pixel::graphics::mapper