libaudioHAL: reduce version specific code

Bug: 134940862
Test: Plays audio
Change-Id: Ia8c99c0600425321b4b30ac341168101960eed59
Merged-In: Ia8c99c0600425321b4b30ac341168101960eed59
Signed-off-by: Kevin Rocard <krocard@google.com>
gugelfrei
Kevin Rocard 5 years ago committed by Mikhail Naganov
parent a8f139322e
commit 00538f18b8

@ -13,12 +13,6 @@ cc_library_shared {
],
shared_libs: [
"android.hardware.audio.effect@2.0",
"android.hardware.audio.effect@4.0",
"android.hardware.audio.effect@5.0",
"android.hardware.audio@2.0",
"android.hardware.audio@4.0",
"android.hardware.audio@5.0",
"libaudiohal@2.0",
"libaudiohal@4.0",
"libaudiohal@5.0",
@ -26,7 +20,8 @@ cc_library_shared {
],
header_libs: [
"libaudiohal_headers"
"libaudiohal_headers",
"libbase_headers",
]
}

@ -22,10 +22,8 @@ namespace android {
// static
sp<DevicesFactoryHalInterface> DevicesFactoryHalInterface::create() {
return V5_0::createDevicesFactoryHal() ?:
V4_0::createDevicesFactoryHal() ?:
V2_0::createDevicesFactoryHal() ?:
nullptr;
return createPreferedImpl<DevicesFactoryHalInterface>();
}
} // namespace android

@ -1,5 +1,5 @@
/*
* Copyright (C) 2016 The Android Open Source Project
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,20 +14,15 @@
* limitations under the License.
*/
#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 <libaudiohal/FactoryHalHidl.h>
#include <media/audiohal/EffectsFactoryHalInterface.h>
namespace android {
// static
sp<EffectsFactoryHalInterface> EffectsFactoryHalInterface::create() {
return effect::V5_0::createEffectsFactoryHal() ?:
effect::V4_0::createEffectsFactoryHal() ?:
effect::V2_0::createEffectsFactoryHal() ?:
nullptr;
return createPreferedImpl<EffectsFactoryHalInterface>();
}
// static

@ -17,9 +17,10 @@
#define LOG_TAG "DevicesFactoryHalHybrid"
//#define LOG_NDEBUG 0
#include "DevicesFactoryHalHidl.h"
#include "DevicesFactoryHalHybrid.h"
#include "DevicesFactoryHalLocal.h"
#include "DevicesFactoryHalHidl.h"
#include <libaudiohal/FactoryHalHidl.h>
namespace android {
namespace CPP_VERSION {
@ -36,6 +37,12 @@ status_t DevicesFactoryHalHybrid::openDevice(const char *name, sp<DeviceHalInter
}
return mLocalFactory->openDevice(name, device);
}
} // namespace CPP_VERSION
template <>
sp<DevicesFactoryHalInterface> createFactoryHal<AudioHALVersion::CPP_VERSION>() {
auto service = hardware::audio::CPP_VERSION::IDevicesFactory::getService();
return service ? new CPP_VERSION::DevicesFactoryHalHybrid(service) : nullptr;
}
} // namespace android

@ -41,11 +41,6 @@ class DevicesFactoryHalHybrid : public DevicesFactoryHalInterface
sp<DevicesFactoryHalInterface> mHidlFactory;
};
sp<DevicesFactoryHalInterface> createDevicesFactoryHal() {
auto service = IDevicesFactory::getService();
return service ? new DevicesFactoryHalHybrid(service) : nullptr;
}
} // namespace CPP_VERSION
} // namespace android

@ -19,11 +19,12 @@
#include <cutils/native_handle.h>
#include "EffectsFactoryHalHidl.h"
#include "ConversionHelperHidl.h"
#include "EffectBufferHalHidl.h"
#include "EffectHalHidl.h"
#include "EffectsFactoryHalHidl.h"
#include "HidlUtils.h"
#include <libaudiohal/FactoryHalHidl.h>
using ::android::hardware::audio::common::CPP_VERSION::implementation::HidlUtils;
using ::android::hardware::Return;
@ -145,4 +146,11 @@ status_t EffectsFactoryHalHidl::mirrorBuffer(void* external, size_t size,
} // namespace CPP_VERSION
} // namespace effect
template<>
sp<EffectsFactoryHalInterface> createFactoryHal<AudioHALVersion::CPP_VERSION>() {
auto service = hardware::audio::effect::CPP_VERSION::IEffectsFactory::getService();
return service ? new effect::CPP_VERSION::EffectsFactoryHalHidl(service) : nullptr;
}
} // namespace android

@ -65,11 +65,6 @@ class EffectsFactoryHalHidl : public EffectsFactoryHalInterface, public Conversi
status_t queryAllDescriptors();
};
sp<EffectsFactoryHalInterface> createEffectsFactoryHal() {
auto service = IEffectsFactory::getService();
return service ? new EffectsFactoryHalHidl(service) : nullptr;
}
} // namespace CPP_VERSION
} // namespace effect
} // namespace android

@ -23,33 +23,42 @@
#include <media/audiohal/EffectsFactoryHalInterface.h>
#include <utils/StrongPointer.h>
namespace android {
#include <array>
#include <utility>
namespace effect {
namespace V2_0 {
sp<EffectsFactoryHalInterface> createEffectsFactoryHal();
} // namespace V2_0
namespace android {
namespace V4_0 {
sp<EffectsFactoryHalInterface> createEffectsFactoryHal();
} // namespace V4_0
/** Supported HAL versions, in order of preference.
* Implementation should use specialize the `create*FactoryHal` for their version.
* Client should use `createPreferedImpl<*FactoryHal>()` to instantiate
* the preferred available impl.
*/
enum class AudioHALVersion {
V5_0,
V4_0,
V2_0,
end, // used for iterating over supported versions
};
namespace V5_0 {
sp<EffectsFactoryHalInterface> createEffectsFactoryHal();
} // namespace V5_0
} // namespace effect
/** Template function to fully specialized for each version and each Interface. */
template <AudioHALVersion, class Interface>
sp<Interface> createFactoryHal();
namespace V2_0 {
sp<DevicesFactoryHalInterface> createDevicesFactoryHal();
} // namespace V2_0
/** @Return the preferred available implementation or nullptr if none are available. */
template <class Interface, AudioHALVersion version = AudioHALVersion{}>
static sp<Interface> createPreferedImpl() {
if constexpr (version == AudioHALVersion::end) {
return nullptr; // tried all version, all returned nullptr
} else {
if (auto created = createFactoryHal<version, Interface>(); created != nullptr) {
return created;
}
namespace V4_0 {
sp<DevicesFactoryHalInterface> createDevicesFactoryHal();
} // namespace V4_0
using Raw = std::underlying_type_t<AudioHALVersion>; // cast as enum class do not support ++
return createPreferedImpl<Interface, AudioHALVersion(Raw(version) + 1)>();
}
}
namespace V5_0 {
sp<DevicesFactoryHalInterface> createDevicesFactoryHal();
} // namespace V5_0
} // namespace android

Loading…
Cancel
Save