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

Commit c19d0a53 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Revert "Revert "Services : Load the IhalAdapterVendorExtension s..."" into main

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


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


#include "ParameterParser.h"

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


#include "ParameterParser.h"

namespace vendor::audio::parserservice {
namespace vendor::audio::parserservice {


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


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


#include "ParameterParser.h"
#include "ParameterParser.h"


using vendor::audio::parserservice::ParameterParser;
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() {
int main() {
    // This is a debug implementation, always enable debug logging.
    // This is a debug implementation, always enable debug logging.
    android::base::SetMinimumLogSeverity(::android::base::DEBUG);
    android::base::SetMinimumLogSeverity(::android::base::DEBUG);

    if (tryRegisteringVendorImpl() != STATUS_OK) {
    auto parser = ndk::SharedRefBase::make<ParameterParser>();
        const std::string parserFqn =
        const std::string parserFqn =
            std::string().append(ParameterParser::descriptor).append("/default");
                std::string()
                        .append(::aidl::android::media::audio::IHalAdapterVendorExtension::
                                        descriptor)
                        .append("/default");
        auto parser = ndk::SharedRefBase::make<ParameterParser>();
        binder_status_t status =
        binder_status_t status =
                AServiceManager_addService(parser->asBinder().get(), parserFqn.c_str());
                AServiceManager_addService(parser->asBinder().get(), parserFqn.c_str());
        if (status != STATUS_OK) {
        if (status != STATUS_OK) {
            LOG(ERROR) << "failed to register service for \"" << parserFqn << "\"";
            LOG(ERROR) << "failed to register service for \"" << parserFqn << "\"";
        }
        }

    } else {
        LOG(INFO) << "IHalAdapterVendorExtension registered with vendor's implementation";
    }
    ABinderProcess_joinThreadPool();
    ABinderProcess_joinThreadPool();
    return EXIT_FAILURE; // should not reach
    return EXIT_FAILURE; // should not reach
}
}