Merge "audiohal: Get rid of multiple inheritance in IDevice implementation" into oc-dev am: 5d3a3fd5a2
am: e27bec3249
Change-Id: Idedc87f29fce7f952a76185308c16e5e1b8958d7
diff --git a/audio/2.0/default/Device.cpp b/audio/2.0/default/Device.cpp
index b696d94..d12f8c0 100644
--- a/audio/2.0/default/Device.cpp
+++ b/audio/2.0/default/Device.cpp
@@ -26,6 +26,7 @@
#include "Conversions.h"
#include "Device.h"
#include "HidlUtils.h"
+#include "ParametersUtil.h"
#include "StreamIn.h"
#include "StreamOut.h"
@@ -35,9 +36,28 @@
namespace V2_0 {
namespace implementation {
+namespace {
+
+class ParametersUtilImpl : public ParametersUtil {
+ public:
+ ParametersUtilImpl(audio_hw_device_t* device) : mDevice{device} {}
+
+ char* halGetParameters(const char* keys) override {
+ return mDevice->get_parameters(mDevice, keys);
+ }
+
+ int halSetParameters(const char* keysAndValues) override {
+ return mDevice->set_parameters(mDevice, keysAndValues);
+ }
+
+ private:
+ audio_hw_device_t* mDevice;
+};
+
+} // namespace
+
Device::Device(audio_hw_device_t* device)
- : mDevice(device) {
-}
+ : mDevice{device}, mParameters{new ParametersUtilImpl(mDevice)} {}
Device::~Device() {
int status = audio_hw_device_close(mDevice);
@@ -67,12 +87,28 @@
mDevice->close_output_stream(mDevice, stream);
}
-char* Device::halGetParameters(const char* keys) {
- return mDevice->get_parameters(mDevice, keys);
+Result Device::getParam(const char* name, bool* value) {
+ return mParameters->getParam(name, value);
}
-int Device::halSetParameters(const char* keysAndValues) {
- return mDevice->set_parameters(mDevice, keysAndValues);
+Result Device::getParam(const char* name, int* value) {
+ return mParameters->getParam(name, value);
+}
+
+Result Device::getParam(const char* name, String8* value) {
+ return mParameters->getParam(name, value);
+}
+
+Result Device::setParam(const char* name, bool value) {
+ return mParameters->setParam(name, value);
+}
+
+Result Device::setParam(const char* name, int value) {
+ return mParameters->setParam(name, value);
+}
+
+Result Device::setParam(const char* name, const char* value) {
+ return mParameters->setParam(name, value);
}
// Methods from ::android::hardware::audio::V2_0::IDevice follow.
@@ -274,21 +310,22 @@
Return<AudioHwSync> Device::getHwAvSync() {
int halHwAvSync;
- Result retval = getParam(AudioParameter::keyHwAvSync, &halHwAvSync);
+ Result retval =
+ mParameters->getParam(AudioParameter::keyHwAvSync, &halHwAvSync);
return retval == Result::OK ? halHwAvSync : AUDIO_HW_SYNC_INVALID;
}
Return<Result> Device::setScreenState(bool turnedOn) {
- return setParam(AudioParameter::keyScreenState, turnedOn);
+ return mParameters->setParam(AudioParameter::keyScreenState, turnedOn);
}
Return<void> Device::getParameters(const hidl_vec<hidl_string>& keys, getParameters_cb _hidl_cb) {
- getParametersImpl(keys, _hidl_cb);
+ mParameters->getParametersImpl(keys, _hidl_cb);
return Void();
}
Return<Result> Device::setParameters(const hidl_vec<ParameterValue>& parameters) {
- return setParametersImpl(parameters);
+ return mParameters->setParametersImpl(parameters);
}
Return<void> Device::debugDump(const hidl_handle& fd) {
diff --git a/audio/2.0/default/Device.h b/audio/2.0/default/Device.h
index 7738361..748f96b 100644
--- a/audio/2.0/default/Device.h
+++ b/audio/2.0/default/Device.h
@@ -27,14 +27,14 @@
#include <hidl/MQDescriptor.h>
-#include "ParametersUtil.h"
-
namespace android {
namespace hardware {
namespace audio {
namespace V2_0 {
namespace implementation {
+class ParametersUtil;
+
using ::android::hardware::audio::common::V2_0::AudioConfig;
using ::android::hardware::audio::common::V2_0::AudioHwSync;
using ::android::hardware::audio::common::V2_0::AudioInputFlag;
@@ -55,7 +55,7 @@
using ::android::hardware::hidl_string;
using ::android::sp;
-struct Device : public IDevice, public ParametersUtil {
+struct Device : public IDevice {
explicit Device(audio_hw_device_t* device);
// Methods from ::android::hardware::audio::V2_0::IDevice follow.
@@ -101,16 +101,19 @@
void closeInputStream(audio_stream_in_t* stream);
void closeOutputStream(audio_stream_out_t* stream);
audio_hw_device_t* device() const { return mDevice; }
+ Result getParam(const char* name, bool* value);
+ Result getParam(const char* name, int* value);
+ Result getParam(const char* name, String8* value);
+ Result setParam(const char* name, bool value);
+ Result setParam(const char* name, int value);
+ Result setParam(const char* name, const char* value);
- private:
+ private:
audio_hw_device_t *mDevice;
+ std::unique_ptr<ParametersUtil> mParameters;
virtual ~Device();
- // Methods from ParametersUtil.
- char* halGetParameters(const char* keys) override;
- int halSetParameters(const char* keysAndValues) override;
-
uint32_t version() const { return mDevice->common.version; }
};
diff --git a/audio/2.0/default/ParametersUtil.h b/audio/2.0/default/ParametersUtil.h
index 49036dc..603e336 100644
--- a/audio/2.0/default/ParametersUtil.h
+++ b/audio/2.0/default/ParametersUtil.h
@@ -37,22 +37,23 @@
class ParametersUtil {
public:
- Result getParam(const char* name, bool* value);
- Result getParam(const char* name, int* value);
- Result getParam(const char* name, String8* value);
- void getParametersImpl(
- const hidl_vec<hidl_string>& keys,
- std::function<void(Result retval, const hidl_vec<ParameterValue>& parameters)> cb);
- std::unique_ptr<AudioParameter> getParams(const AudioParameter& keys);
- Result setParam(const char* name, bool value);
- Result setParam(const char* name, int value);
- Result setParam(const char* name, const char* value);
- Result setParametersImpl(const hidl_vec<ParameterValue>& parameters);
- Result setParams(const AudioParameter& param);
+ virtual ~ParametersUtil() = default;
+ Result getParam(const char* name, bool* value);
+ Result getParam(const char* name, int* value);
+ Result getParam(const char* name, String8* value);
+ void getParametersImpl(
+ const hidl_vec<hidl_string>& keys,
+ std::function<void(Result retval,
+ const hidl_vec<ParameterValue>& parameters)>
+ cb);
+ std::unique_ptr<AudioParameter> getParams(const AudioParameter& keys);
+ Result setParam(const char* name, bool value);
+ Result setParam(const char* name, int value);
+ Result setParam(const char* name, const char* value);
+ Result setParametersImpl(const hidl_vec<ParameterValue>& parameters);
+ Result setParams(const AudioParameter& param);
protected:
- virtual ~ParametersUtil() {}
-
virtual char* halGetParameters(const char* keys) = 0;
virtual int halSetParameters(const char* keysAndValues) = 0;
};