Merge "audio: Remove dynamic dependency on HIDL interface libs from service"
This commit is contained in:
commit
138c2bba56
2 changed files with 59 additions and 58 deletions
|
@ -24,23 +24,6 @@ cc_binary {
|
|||
"liblog",
|
||||
"libutils",
|
||||
"libhardware",
|
||||
"android.hardware.audio@2.0",
|
||||
"android.hardware.audio@4.0",
|
||||
"android.hardware.audio@5.0",
|
||||
"android.hardware.audio@6.0",
|
||||
"android.hardware.audio.common@2.0",
|
||||
"android.hardware.audio.common@4.0",
|
||||
"android.hardware.audio.common@5.0",
|
||||
"android.hardware.audio.common@6.0",
|
||||
"android.hardware.audio.effect@2.0",
|
||||
"android.hardware.audio.effect@4.0",
|
||||
"android.hardware.audio.effect@5.0",
|
||||
"android.hardware.audio.effect@6.0",
|
||||
"android.hardware.bluetooth.a2dp@1.0",
|
||||
"android.hardware.bluetooth.audio@2.0",
|
||||
"android.hardware.soundtrigger@2.0",
|
||||
"android.hardware.soundtrigger@2.1",
|
||||
"android.hardware.soundtrigger@2.2",
|
||||
],
|
||||
}
|
||||
|
||||
|
|
|
@ -16,19 +16,9 @@
|
|||
|
||||
#define LOG_TAG "audiohalservice"
|
||||
|
||||
#include <android/hardware/audio/2.0/IDevicesFactory.h>
|
||||
#include <android/hardware/audio/4.0/IDevicesFactory.h>
|
||||
#include <android/hardware/audio/5.0/IDevicesFactory.h>
|
||||
#include <android/hardware/audio/6.0/IDevicesFactory.h>
|
||||
#include <android/hardware/audio/effect/2.0/IEffectsFactory.h>
|
||||
#include <android/hardware/audio/effect/4.0/IEffectsFactory.h>
|
||||
#include <android/hardware/audio/effect/5.0/IEffectsFactory.h>
|
||||
#include <android/hardware/audio/effect/6.0/IEffectsFactory.h>
|
||||
#include <android/hardware/bluetooth/a2dp/1.0/IBluetoothAudioOffload.h>
|
||||
#include <android/hardware/bluetooth/audio/2.0/IBluetoothAudioProvidersFactory.h>
|
||||
#include <android/hardware/soundtrigger/2.0/ISoundTriggerHw.h>
|
||||
#include <android/hardware/soundtrigger/2.1/ISoundTriggerHw.h>
|
||||
#include <android/hardware/soundtrigger/2.2/ISoundTriggerHw.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <binder/ProcessState.h>
|
||||
#include <cutils/properties.h>
|
||||
#include <hidl/HidlTransportSupport.h>
|
||||
|
@ -38,13 +28,20 @@
|
|||
using namespace android::hardware;
|
||||
using android::OK;
|
||||
|
||||
using InterfacesList = std::vector<std::string>;
|
||||
|
||||
/** Try to register the provided factories in the provided order.
|
||||
* If any registers successfully, do not register any other and return true.
|
||||
* If all fail, return false.
|
||||
*/
|
||||
template <class... Factories>
|
||||
bool registerPassthroughServiceImplementations() {
|
||||
return ((registerPassthroughServiceImplementation<Factories>() != OK) && ...);
|
||||
template <class Iter>
|
||||
static bool registerPassthroughServiceImplementations(Iter first, Iter last) {
|
||||
for (; first != last; ++first) {
|
||||
if (registerPassthroughServiceImplementation(*first) == OK) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int main(int /* argc */, char* /* argv */ []) {
|
||||
|
@ -61,36 +58,57 @@ int main(int /* argc */, char* /* argv */ []) {
|
|||
}
|
||||
configureRpcThreadpool(16, true /*callerWillJoin*/);
|
||||
|
||||
// Keep versions on a separate line for easier parsing
|
||||
// Automatic formatting tries to compact the lines, making them less readable
|
||||
// clang-format off
|
||||
LOG_ALWAYS_FATAL_IF((registerPassthroughServiceImplementations<
|
||||
audio::V6_0::IDevicesFactory,
|
||||
audio::V5_0::IDevicesFactory,
|
||||
audio::V4_0::IDevicesFactory,
|
||||
audio::V2_0::IDevicesFactory>()),
|
||||
"Could not register audio core API");
|
||||
const std::vector<InterfacesList> mandatoryInterfaces = {
|
||||
{
|
||||
"Audio Core API",
|
||||
"android.hardware.audio@6.0::IDevicesFactory",
|
||||
"android.hardware.audio@5.0::IDevicesFactory",
|
||||
"android.hardware.audio@4.0::IDevicesFactory",
|
||||
"android.hardware.audio@2.0::IDevicesFactory"
|
||||
},
|
||||
{
|
||||
"Audio Effect API",
|
||||
"android.hardware.audio.effect@6.0::IEffectsFactory",
|
||||
"android.hardware.audio.effect@5.0::IEffectsFactory",
|
||||
"android.hardware.audio.effect@4.0::IEffectsFactory",
|
||||
"android.hardware.audio.effect@2.0::IEffectsFactory",
|
||||
}
|
||||
};
|
||||
|
||||
LOG_ALWAYS_FATAL_IF((registerPassthroughServiceImplementations<
|
||||
audio::effect::V6_0::IEffectsFactory,
|
||||
audio::effect::V5_0::IEffectsFactory,
|
||||
audio::effect::V4_0::IEffectsFactory,
|
||||
audio::effect::V2_0::IEffectsFactory>()),
|
||||
"Could not register audio effect API");
|
||||
const std::vector<InterfacesList> optionalInterfaces = {
|
||||
{
|
||||
"Soundtrigger API",
|
||||
"android.hardware.soundtrigger@2.2::ISoundTriggerHw",
|
||||
"android.hardware.soundtrigger@2.1::ISoundTriggerHw",
|
||||
"android.hardware.soundtrigger@2.0::ISoundTriggerHw",
|
||||
},
|
||||
{
|
||||
"Bluetooth Audio API",
|
||||
"android.hardware.bluetooth.audio@2.0::IBluetoothAudioProvidersFactory"
|
||||
},
|
||||
// remove the old HIDL when Bluetooth Audio Hal V2 has offloading supported
|
||||
{
|
||||
"Bluetooth Audio Offload API",
|
||||
"android.hardware.bluetooth.a2dp@1.0::IBluetoothAudioOffload"
|
||||
}
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
ALOGW_IF((registerPassthroughServiceImplementations<soundtrigger::V2_2::ISoundTriggerHw,
|
||||
soundtrigger::V2_1::ISoundTriggerHw,
|
||||
soundtrigger::V2_0::ISoundTriggerHw>()),
|
||||
"Could not register soundtrigger API");
|
||||
for (const auto& listIter : mandatoryInterfaces) {
|
||||
auto iter = listIter.begin();
|
||||
const std::string& interfaceFamilyName = *iter++;
|
||||
LOG_ALWAYS_FATAL_IF(!registerPassthroughServiceImplementations(iter, listIter.end()),
|
||||
"Could not register %s", interfaceFamilyName.c_str());
|
||||
}
|
||||
|
||||
ALOGW_IF(registerPassthroughServiceImplementations<
|
||||
bluetooth::audio::V2_0::IBluetoothAudioProvidersFactory>(),
|
||||
"Could not register Bluetooth audio API");
|
||||
|
||||
// remove the old HIDL when Bluetooth Audio Hal V2 has offloading supported
|
||||
ALOGW_IF(registerPassthroughServiceImplementations<
|
||||
bluetooth::a2dp::V1_0::IBluetoothAudioOffload>(),
|
||||
"Could not register Bluetooth audio offload API");
|
||||
for (const auto& listIter : optionalInterfaces) {
|
||||
auto iter = listIter.begin();
|
||||
const std::string& interfaceFamilyName = *iter++;
|
||||
ALOGW_IF(!registerPassthroughServiceImplementations(iter, listIter.end()),
|
||||
"Could not register %s", interfaceFamilyName.c_str());
|
||||
}
|
||||
|
||||
joinRpcThreadpool();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue