Loading services/audioparameterparser/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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: [ Loading services/audioparameterparser/ParameterParser.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading services/audioparameterparser/main.cpp +51 −10 Original line number Original line Diff line number Diff line Loading @@ -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 } } Loading
services/audioparameterparser/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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: [ Loading
services/audioparameterparser/ParameterParser.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading
services/audioparameterparser/main.cpp +51 −10 Original line number Original line Diff line number Diff line Loading @@ -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 } }