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

Commit cde05dd2 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 am: 8dcf9094 am: f5dbe811 am: ba4b850b

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



Change-Id: Ie4edc900be0e48bb00e3913ec75456347a58f81a
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 4b930798 ba4b850b
Loading
Loading
Loading
Loading
+7 −6
Original line number 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");

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

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

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