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

Commit 81979623 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Reland: Register C2 HAL Service v1.0 for Q and v1.1 for R." into rvc-dev

parents e5867f41 2d91d3fa
Loading
Loading
Loading
Loading
+61 −24
Original line number Diff line number Diff line
@@ -17,11 +17,13 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "CodecServiceRegistrant"

#include <android-base/properties.h>
#include <android-base/logging.h>
#include <android-base/properties.h>

#include <C2Component.h>
#include <C2PlatformSupport.h>
#include <codec2/hidl/1.0/ComponentStore.h>
#include <codec2/hidl/1.1/ComponentStore.h>
#include <codec2/hidl/1.1/Configurable.h>
#include <codec2/hidl/1.1/types.h>
@@ -43,6 +45,10 @@ constexpr c2_status_t C2_TRANSACTION_FAILED = C2_CORRUPTED;
// Converter from IComponentStore to C2ComponentStore.
class H2C2ComponentStore : public C2ComponentStore {
protected:
    using IComponentStore =
        ::android::hardware::media::c2::V1_0::IComponentStore;
    using IConfigurable =
        ::android::hardware::media::c2::V1_0::IConfigurable;
    sp<IComponentStore> mStore;
    sp<IConfigurable> mConfigurable;
public:
@@ -399,16 +405,54 @@ bool ionPropertiesDefined() {
} // unnamed namespace

extern "C" void RegisterCodecServices() {
    using namespace ::android::hardware::media::c2::V1_1;
    LOG(INFO) << "Creating software Codec2 service...";
    sp<ComponentStore> store =
        new ComponentStore(::android::GetCodec2PlatformComponentStore());
    if (store == nullptr) {
        LOG(ERROR) <<
                "Cannot create software Codec2 service.";
    } else {
    std::shared_ptr<C2ComponentStore> store =
        android::GetCodec2PlatformComponentStore();
    if (!store) {
        LOG(ERROR) << "Failed to create Codec2 service.";
        return;
    }

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

    int platformVersion =
        android::base::GetIntProperty("ro.build.version.sdk", int32_t(29));
    // STOPSHIP: Remove code name checking once platform version bumps up to 30.
    std::string codeName =
        android::base::GetProperty("ro.build.version.codename", "");
    if (codeName == "R") {
        platformVersion = 30;
    }

    switch (platformVersion) {
        case 30: {
            android::sp<V1_1::IComponentStore> storeV1_1 =
                new V1_1::utils::ComponentStore(store);
            if (storeV1_1->registerAsService("software") != android::OK) {
                LOG(ERROR) << "Cannot register software Codec2 v1.1 service.";
                return;
            }
            break;
        }
        case 29: {
            android::sp<V1_0::IComponentStore> storeV1_0 =
                new V1_0::utils::ComponentStore(store);
            if (storeV1_0->registerAsService("software") != android::OK) {
                LOG(ERROR) << "Cannot register software Codec2 v1.0 service.";
                return;
            }
            break;
        }
        default: {
            LOG(ERROR) << "The platform version " << platformVersion <<
                          " is not supported.";
            return;
        }
    }
    if (!ionPropertiesDefined()) {
            std::string preferredStoreName = "default";
        using IComponentStore =
            ::android::hardware::media::c2::V1_0::IComponentStore;
        std::string const preferredStoreName = "default";
        sp<IComponentStore> preferredStore =
            IComponentStore::getService(preferredStoreName.c_str());
        if (preferredStore) {
@@ -422,13 +466,6 @@ extern "C" void RegisterCodecServices() {
                    "Preferred Codec2 store is defaulted to \"software\".";
        }
    }
        if (store->registerAsService("software") != android::OK) {
            LOG(ERROR) <<
                    "Cannot register software Codec2 service.";
        } else {
            LOG(INFO) <<
                    "Software Codec2 service created.";
        }
    }
    LOG(INFO) << "Software Codec2 service created and registered.";
}