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

Commit f3aae1b8 authored by Devin Moore's avatar Devin Moore Committed by Gerrit Code Review
Browse files

Merge "swcodec check for any installed HIDL version" into main

parents d9dc7d27 b215e169
Loading
Loading
Loading
Loading
+48 −42
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@ using ::android::hardware::hidl_string;
using ::android::hardware::Return;
using ::android::hardware::Return;
using ::android::sp;
using ::android::sp;
using ::ndk::ScopedAStatus;
using ::ndk::ScopedAStatus;
namespace c2_hidl_V1_0 = ::android::hardware::media::c2::V1_0;
namespace c2_hidl = ::android::hardware::media::c2::V1_2;
namespace c2_hidl = ::android::hardware::media::c2::V1_2;
namespace c2_aidl = ::aidl::android::hardware::media::c2;
namespace c2_aidl = ::aidl::android::hardware::media::c2;


@@ -734,6 +735,46 @@ bool ionPropertiesDefined() {


} // unnamed namespace
} // unnamed namespace


static android::sp<c2_hidl_V1_0::IComponentStore> getDeclaredHidlSwcodec(
        const std::shared_ptr<C2ComponentStore>& store) {
    using ::android::hidl::manager::V1_2::IServiceManager;
    using namespace ::android::hardware::media::c2;

    int platformVersion = android_get_device_api_level();
    // STOPSHIP: Remove code name checking once platform version bumps up to 35.
    std::string codeName = android::base::GetProperty("ro.build.version.codename", "");

    if (codeName == "VanillaIceCream") {
        platformVersion = __ANDROID_API_V__;
    }
    IServiceManager::Transport transport =
            android::hardware::defaultServiceManager1_2()->getTransport(
                    V1_2::IComponentStore::descriptor, "software");
    if (transport == IServiceManager::Transport::HWBINDER) {
        if (platformVersion < __ANDROID_API_S__) {
            LOG(ERROR) << "We don't expect V1.2::IComponentStore to be declared on this device";
        }
        return ::android::sp<V1_2::utils::ComponentStore>::make(store);
    }
    transport = android::hardware::defaultServiceManager1_2()->getTransport(
            V1_1::IComponentStore::descriptor, "software");
    if (transport == IServiceManager::Transport::HWBINDER) {
        if (platformVersion != __ANDROID_API_R__) {
            LOG(ERROR) << "We don't expect V1.1::IComponentStore to be declared on this device";
        }
        return ::android::sp<V1_1::utils::ComponentStore>::make(store);
    }
    transport = android::hardware::defaultServiceManager1_2()->getTransport(
            V1_0::IComponentStore::descriptor, "software");
    if (transport == IServiceManager::Transport::HWBINDER) {
        if (platformVersion != __ANDROID_API_Q__) {
            LOG(ERROR) << "We don't expect V1.0::IComponentStore to be declared on this device";
        }
        return ::android::sp<V1_0::utils::ComponentStore>::make(store);
    }
    return nullptr;
}

extern "C" void RegisterCodecServices() {
extern "C" void RegisterCodecServices() {
    const bool aidlSelected = c2_aidl::utils::IsSelected();
    const bool aidlSelected = c2_aidl::utils::IsSelected();
    constexpr int kThreadCount = 64;
    constexpr int kThreadCount = 64;
@@ -751,33 +792,6 @@ extern "C" void RegisterCodecServices() {


    using namespace ::android::hardware::media::c2;
    using namespace ::android::hardware::media::c2;


    int platformVersion = android_get_device_api_level();
    // STOPSHIP: Remove code name checking once platform version bumps up to 35.
    std::string codeName =
        android::base::GetProperty("ro.build.version.codename", "");
    if (codeName == "VanillaIceCream") {
        platformVersion = __ANDROID_API_V__;
    }

    android::sp<V1_0::IComponentStore> hidlStore;
    std::shared_ptr<c2_aidl::IComponentStore> aidlStore;
    const char *hidlVer = "(unknown)";
    if (aidlSelected) {
        aidlStore = ::ndk::SharedRefBase::make<c2_aidl::utils::ComponentStore>(store);
    } else if (platformVersion >= __ANDROID_API_S__) {
        hidlStore = ::android::sp<V1_2::utils::ComponentStore>::make(store);
        hidlVer = "1.2";
    } else if (platformVersion == __ANDROID_API_R__) {
        hidlStore = ::android::sp<V1_1::utils::ComponentStore>::make(store);
        hidlVer = "1.1";
    } else if (platformVersion == __ANDROID_API_Q__) {
        hidlStore = ::android::sp<V1_0::utils::ComponentStore>::make(store);
        hidlVer = "1.0";
    } else {  // platformVersion < __ANDROID_API_Q__
        LOG(ERROR) << "The platform version " << platformVersion <<
                      " is not supported.";
        return;
    }
    if (!ionPropertiesDefined()) {
    if (!ionPropertiesDefined()) {
        using IComponentStore =
        using IComponentStore =
            ::android::hardware::media::c2::V1_0::IComponentStore;
            ::android::hardware::media::c2::V1_0::IComponentStore;
@@ -823,10 +837,9 @@ extern "C" void RegisterCodecServices() {
        std::string(c2_aidl::IComponentStore::descriptor) + "/software";
        std::string(c2_aidl::IComponentStore::descriptor) + "/software";
    if (__builtin_available(android __ANDROID_API_S__, *)) {
    if (__builtin_available(android __ANDROID_API_S__, *)) {
        if (AServiceManager_isDeclared(aidlServiceName.c_str())) {
        if (AServiceManager_isDeclared(aidlServiceName.c_str())) {
            if (!aidlStore) {
            std::shared_ptr<c2_aidl::IComponentStore> aidlStore =
                aidlStore = ::ndk::SharedRefBase::make<c2_aidl::utils::ComponentStore>(
                    ::ndk::SharedRefBase::make<c2_aidl::utils::ComponentStore>(
                            std::make_shared<H2C2ComponentStore>(nullptr));
                            std::make_shared<H2C2ComponentStore>(nullptr));
            }
            binder_exception_t ex = AServiceManager_addService(
            binder_exception_t ex = AServiceManager_addService(
                    aidlStore->asBinder().get(), aidlServiceName.c_str());
                    aidlStore->asBinder().get(), aidlServiceName.c_str());
            if (ex == EX_NONE) {
            if (ex == EX_NONE) {
@@ -837,22 +850,15 @@ extern "C" void RegisterCodecServices() {
        }
        }
    }
    }


    android::sp<V1_0::IComponentStore> hidlStore = getDeclaredHidlSwcodec(store);
    // If the software component store isn't declared in the manifest, we don't
    // If the software component store isn't declared in the manifest, we don't
    // need to create the service and register it.
    // need to create the service and register it.
    using ::android::hidl::manager::V1_2::IServiceManager;
    if (hidlStore) {
    IServiceManager::Transport transport =
            android::hardware::defaultServiceManager1_2()->getTransport(
                    V1_2::utils::ComponentStore::descriptor, "software");
    if (transport == IServiceManager::Transport::HWBINDER) {
        if (!hidlStore) {
            hidlStore = ::android::sp<V1_2::utils::ComponentStore>::make(
                    std::make_shared<H2C2ComponentStore>(nullptr));
            hidlVer = "1.2";
        }
        if (hidlStore->registerAsService("software") == android::OK) {
        if (hidlStore->registerAsService("software") == android::OK) {
            registered = true;
            registered = true;
        } else {
        } else {
            LOG(ERROR) << "Cannot register software Codec2 v" << hidlVer << " service.";
            LOG(ERROR) << "Cannot register software Codec2 " << hidlStore->descriptor
                       << " service.";
        }
        }
    } else {
    } else {
        LOG(INFO) << "The HIDL software Codec2 service is deprecated"
        LOG(INFO) << "The HIDL software Codec2 service is deprecated"