Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8dcf9094 authored by Jason Macnak's avatar Jason Macnak Committed by Automerger Merge Worker
Browse files

Merge "Ensure AIMapper and underlying IMPL outlive IMapperProvider" into main...

Merge "Ensure AIMapper and underlying IMPL outlive IMapperProvider" into main am: b8c23a8a am: 4c11b519

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2781709



Change-Id: Ie96a5db1377ca841d493b168ffa4c6b2a5c90d8a
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents bfd81c90 4c11b519
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -106,15 +106,15 @@ class IMapperProvider {
    static_assert(std::is_constructible_v<IMPL>, "Implementation must have a no-args constructor");
    static_assert(std::is_constructible_v<IMPL>, "Implementation must have a no-args constructor");


    std::once_flag mLoadOnceFlag;
    std::once_flag mLoadOnceFlag;
    std::optional<IMPL> mImpl;
    IMPL* _Nullable mImpl;
    AIMapper mMapper = {};
    AIMapper* _Nullable mMapper;


    static IMPL& impl() {
    static IMPL& impl() {
        return *reinterpret_cast<IMapperProvider<IMPL>*>(provider::sIMapperInstance)->mImpl;
        return *reinterpret_cast<IMapperProvider<IMPL>*>(provider::sIMapperInstance)->mImpl;
    }
    }


    void bindV5() {
    void bindV5() {
        mMapper.v5 = {
        mMapper->v5 = {
                .importBuffer = [](const native_handle_t* _Nonnull handle,
                .importBuffer = [](const native_handle_t* _Nonnull handle,
                                   buffer_handle_t _Nullable* _Nonnull outBufferHandle)
                                   buffer_handle_t _Nullable* _Nonnull outBufferHandle)
                        -> AIMapper_Error { return impl().importBuffer(handle, outBufferHandle); },
                        -> AIMapper_Error { return impl().importBuffer(handle, outBufferHandle); },
@@ -208,13 +208,14 @@ class IMapperProvider {
            LOG_ALWAYS_FATAL_IF(provider::sIMapperInstance != nullptr,
            LOG_ALWAYS_FATAL_IF(provider::sIMapperInstance != nullptr,
                                "AIMapper implementation already loaded!");
                                "AIMapper implementation already loaded!");
            provider::sIMapperInstance = this;
            provider::sIMapperInstance = this;
            mImpl.emplace();
            mImpl = new IMPL();
            mMapper.version = IMPL::version;
            mMapper = new AIMapper();
            mMapper->version = IMPL::version;
            if (IMPL::version >= AIMAPPER_VERSION_5) {
            if (IMPL::version >= AIMAPPER_VERSION_5) {
                bindV5();
                bindV5();
            }
            }
        });
        });
        *outImplementation = &mMapper;
        *outImplementation = mMapper;
        return AIMAPPER_ERROR_NONE;
        return AIMAPPER_ERROR_NONE;
    }
    }
};
};