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

Commit 8e3c4541 authored by Sebastian Pickl's avatar Sebastian Pickl Committed by Gerrit Code Review
Browse files

Merge "Revert "Services : Load the IhalAdapterVendorExtension service i..."" into main

parents 646e8b7f bbe0d951
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ cc_defaults {
        "av-audio-types-aidl-ndk",
        "libbase",
        "libbinder_ndk",
        "libmediautils",
    ],

    cflags: [
+2 −2
Original line number Diff line number Diff line
@@ -14,11 +14,11 @@
 * limitations under the License.
 */

#include "ParameterParser.h"

#define LOG_TAG "Audio_ParameterParser"
#include <android-base/logging.h>

#include "ParameterParser.h"

namespace vendor::audio::parserservice {

using ::aidl::android::hardware::audio::core::VendorParameter;
+10 −51
Original line number Diff line number Diff line
@@ -16,67 +16,26 @@

#define LOG_TAG "Audio_ParameterParser"
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <mediautils/Library.h>

#include "ParameterParser.h"

using vendor::audio::parserservice::ParameterParser;

binder_status_t tryRegisteringVendorImpl() {
    /*
     * The property "ro.audio.ihaladaptervendorextension_libname" allows vendors
     * or OEMs to dynamically load a specific library
     * into this process space using dlopen.
     *
     * "createIHalAdapterVendorExtension" symbol needs to be defined in
     * the dynamically loaded library used to register the
     * "::aidl::android::hardware::audio::core::IHalAdapterVendorExtension/default"
     * with the ServiceManager.
     */
    static std::string kLibPropName =
            ::android::base::GetProperty("ro.audio.ihaladaptervendorextension_libname", "");
    if (kLibPropName == "") {
        LOG(DEBUG) << kLibPropName << "property is not found";
        return STATUS_BAD_VALUE;
    }
    static std::shared_ptr<void> libHandle =
            android::mediautils::loadLibrary(kLibPropName.c_str());
    if (libHandle == nullptr) {
        LOG(ERROR) << "Failed to load library:" << kLibPropName;
        return STATUS_BAD_VALUE;
    }
    const std::string kLibSymbol = "createIHalAdapterVendorExtension";
    std::shared_ptr<void> untypedObject = android::mediautils::getUntypedObjectFromLibrary(
            kLibSymbol.c_str(), libHandle);
    auto createIHalAdapterVendorExtension = reinterpret_cast<int (*)()>(untypedObject.get());
    if (createIHalAdapterVendorExtension == nullptr) {
        LOG(ERROR) << "Failed to find symbol \"" << kLibSymbol << "\"";
        return STATUS_BAD_VALUE;
    }
    return createIHalAdapterVendorExtension();
}

int main() {
    // This is a debug implementation, always enable debug logging.
    android::base::SetMinimumLogSeverity(::android::base::DEBUG);
    if (tryRegisteringVendorImpl() != STATUS_OK) {
        const std::string parserFqn =
                std::string()
                        .append(::aidl::android::media::audio::IHalAdapterVendorExtension::
                                        descriptor)
                        .append("/default");

    auto parser = ndk::SharedRefBase::make<ParameterParser>();
    const std::string parserFqn =
            std::string().append(ParameterParser::descriptor).append("/default");
    binder_status_t status =
            AServiceManager_addService(parser->asBinder().get(), parserFqn.c_str());
    if (status != STATUS_OK) {
        LOG(ERROR) << "failed to register service for \"" << parserFqn << "\"";
    }
    } else {
        LOG(INFO) << "IHalAdapterVendorExtension registered with vendor's implementation";
    }

    ABinderProcess_joinThreadPool();
    return EXIT_FAILURE;  // should not reach
}