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

Commit 86685f56 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Revert "audiohal: Get rid of multiple inheritance in IDevice implementation"

This reverts commit e4228e7a.

Further analysis of the bug has shown that the problem is not related
to the use of multiple inheritance.

Bug: 36225019
Change-Id: Icdcaf84061c0ecf29f891521bd961c3ee89f1cfc
parent e4228e7a
Loading
Loading
Loading
Loading
+10 −47
Original line number Original line Diff line number Diff line
@@ -26,7 +26,6 @@
#include "Conversions.h"
#include "Conversions.h"
#include "Device.h"
#include "Device.h"
#include "HidlUtils.h"
#include "HidlUtils.h"
#include "ParametersUtil.h"
#include "StreamIn.h"
#include "StreamIn.h"
#include "StreamOut.h"
#include "StreamOut.h"


@@ -36,28 +35,9 @@ namespace audio {
namespace V2_0 {
namespace V2_0 {
namespace implementation {
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)
Device::Device(audio_hw_device_t* device)
    : mDevice{device}, mParameters{new ParametersUtilImpl(mDevice)} {}
        : mDevice(device) {
}


Device::~Device() {
Device::~Device() {
    int status = audio_hw_device_close(mDevice);
    int status = audio_hw_device_close(mDevice);
@@ -87,28 +67,12 @@ void Device::closeOutputStream(audio_stream_out_t* stream) {
    mDevice->close_output_stream(mDevice, stream);
    mDevice->close_output_stream(mDevice, stream);
}
}


Result Device::getParam(const char* name, bool* value) {
char* Device::halGetParameters(const char* keys) {
    return mParameters->getParam(name, value);
    return mDevice->get_parameters(mDevice, keys);
}

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) {
int Device::halSetParameters(const char* keysAndValues) {
    return mParameters->setParam(name, value);
    return mDevice->set_parameters(mDevice, keysAndValues);
}
}


// Methods from ::android::hardware::audio::V2_0::IDevice follow.
// Methods from ::android::hardware::audio::V2_0::IDevice follow.
@@ -310,22 +274,21 @@ Return<Result> Device::setAudioPortConfig(const AudioPortConfig& config) {


Return<AudioHwSync> Device::getHwAvSync()  {
Return<AudioHwSync> Device::getHwAvSync()  {
    int halHwAvSync;
    int halHwAvSync;
    Result retval =
    Result retval = getParam(AudioParameter::keyHwAvSync, &halHwAvSync);
        mParameters->getParam(AudioParameter::keyHwAvSync, &halHwAvSync);
    return retval == Result::OK ? halHwAvSync : AUDIO_HW_SYNC_INVALID;
    return retval == Result::OK ? halHwAvSync : AUDIO_HW_SYNC_INVALID;
}
}


Return<Result> Device::setScreenState(bool turnedOn)  {
Return<Result> Device::setScreenState(bool turnedOn)  {
    return mParameters->setParam(AudioParameter::keyScreenState, turnedOn);
    return setParam(AudioParameter::keyScreenState, turnedOn);
}
}


Return<void> Device::getParameters(const hidl_vec<hidl_string>& keys, getParameters_cb _hidl_cb)  {
Return<void> Device::getParameters(const hidl_vec<hidl_string>& keys, getParameters_cb _hidl_cb)  {
    mParameters->getParametersImpl(keys, _hidl_cb);
    getParametersImpl(keys, _hidl_cb);
    return Void();
    return Void();
}
}


Return<Result> Device::setParameters(const hidl_vec<ParameterValue>& parameters)  {
Return<Result> Device::setParameters(const hidl_vec<ParameterValue>& parameters)  {
    return mParameters->setParametersImpl(parameters);
    return setParametersImpl(parameters);
}
}


Return<void> Device::debugDump(const hidl_handle& fd)  {
Return<void> Device::debugDump(const hidl_handle& fd)  {
+9 −12
Original line number Original line Diff line number Diff line
@@ -27,14 +27,14 @@


#include <hidl/MQDescriptor.h>
#include <hidl/MQDescriptor.h>


#include "ParametersUtil.h"

namespace android {
namespace android {
namespace hardware {
namespace hardware {
namespace audio {
namespace audio {
namespace V2_0 {
namespace V2_0 {
namespace implementation {
namespace implementation {


class ParametersUtil;

using ::android::hardware::audio::common::V2_0::AudioConfig;
using ::android::hardware::audio::common::V2_0::AudioConfig;
using ::android::hardware::audio::common::V2_0::AudioHwSync;
using ::android::hardware::audio::common::V2_0::AudioHwSync;
using ::android::hardware::audio::common::V2_0::AudioInputFlag;
using ::android::hardware::audio::common::V2_0::AudioInputFlag;
@@ -55,7 +55,7 @@ using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_string;
using ::android::sp;
using ::android::sp;


struct Device : public IDevice {
struct Device : public IDevice, public ParametersUtil {
    explicit Device(audio_hw_device_t* device);
    explicit Device(audio_hw_device_t* device);


    // Methods from ::android::hardware::audio::V2_0::IDevice follow.
    // Methods from ::android::hardware::audio::V2_0::IDevice follow.
@@ -101,19 +101,16 @@ struct Device : public IDevice {
    void closeInputStream(audio_stream_in_t* stream);
    void closeInputStream(audio_stream_in_t* stream);
    void closeOutputStream(audio_stream_out_t* stream);
    void closeOutputStream(audio_stream_out_t* stream);
    audio_hw_device_t* device() const { return mDevice; }
    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;
    audio_hw_device_t *mDevice;
    std::unique_ptr<ParametersUtil> mParameters;


    virtual ~Device();
    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; }
    uint32_t version() const { return mDevice->common.version; }
};
};


+14 −15
Original line number Original line Diff line number Diff line
@@ -37,15 +37,12 @@ using ::android::hardware::hidl_vec;


class ParametersUtil {
class ParametersUtil {
  public:
  public:
   virtual ~ParametersUtil() = default;
    Result getParam(const char* name, bool* value);
    Result getParam(const char* name, bool* value);
    Result getParam(const char* name, int* value);
    Result getParam(const char* name, int* value);
    Result getParam(const char* name, String8* value);
    Result getParam(const char* name, String8* value);
    void getParametersImpl(
    void getParametersImpl(
            const hidl_vec<hidl_string>& keys,
            const hidl_vec<hidl_string>& keys,
       std::function<void(Result retval,
            std::function<void(Result retval, const hidl_vec<ParameterValue>& parameters)> cb);
                          const hidl_vec<ParameterValue>& parameters)>
           cb);
    std::unique_ptr<AudioParameter> getParams(const AudioParameter& keys);
    std::unique_ptr<AudioParameter> getParams(const AudioParameter& keys);
    Result setParam(const char* name, bool value);
    Result setParam(const char* name, bool value);
    Result setParam(const char* name, int value);
    Result setParam(const char* name, int value);
@@ -54,6 +51,8 @@ class ParametersUtil {
    Result setParams(const AudioParameter& param);
    Result setParams(const AudioParameter& param);


  protected:
  protected:
    virtual ~ParametersUtil() {}

    virtual char* halGetParameters(const char* keys) = 0;
    virtual char* halGetParameters(const char* keys) = 0;
    virtual int halSetParameters(const char* keysAndValues) = 0;
    virtual int halSetParameters(const char* keysAndValues) = 0;
};
};