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

Commit 4f782d9f authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

libaudiohal: Align use of get_audio_port_v7 with default wrapper

Use the same logic when calling get_audio_port_v7
as the default wrapper, with separation for pre-V7
and V7 versions of the code.

Bug: 160352965
Test: check audio on device
      also, use a modified APM config with USB Audio on 'usb' module
Change-Id: I5a6e2164b43d086aec6ffad5300edbade04cca1f
Merged-In: I5a6e2164b43d086aec6ffad5300edbade04cca1f
parent c31f1502
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -354,7 +354,8 @@ status_t DeviceHalHidl::releaseAudioPatch(audio_patch_handle_t patch) {
    return processReturn("releaseAudioPatch", mDevice->releaseAudioPatch(patch));
}

status_t DeviceHalHidl::getAudioPort(struct audio_port *port) {
template <typename HalPort>
status_t DeviceHalHidl::getAudioPortImpl(HalPort *port) {
    if (mDevice == 0) return NO_INIT;
    AudioPort hidlPort;
    HidlUtils::audioPortFromHal(*port, &hidlPort);
@@ -370,6 +371,30 @@ status_t DeviceHalHidl::getAudioPort(struct audio_port *port) {
    return processReturn("getAudioPort", ret, retval);
}

status_t DeviceHalHidl::getAudioPort(struct audio_port *port) {
    return getAudioPortImpl(port);
}

status_t DeviceHalHidl::getAudioPort(struct audio_port_v7 *port) {
#if MAJOR_VERSION >= 7
    return getAudioPortImpl(port);
#else
    struct audio_port audioPort = {};
    status_t result = NO_ERROR;
    if (!audio_populate_audio_port(port, &audioPort)) {
        ALOGE("Failed to populate legacy audio port from audio_port_v7");
        result = BAD_VALUE;
    }
    status_t status = getAudioPort(&audioPort);
    if (status == NO_ERROR) {
        audio_populate_audio_port_v7(&audioPort, port);
    } else {
        result = status;
    }
    return result;
#endif
}

status_t DeviceHalHidl::setAudioPortConfig(const struct audio_port_config *config) {
    if (mDevice == 0) return NO_INIT;
    AudioPortConfig hidlConfig;
+5 −0
Original line number Diff line number Diff line
@@ -107,6 +107,9 @@ class DeviceHalHidl : public DeviceHalInterface, public ConversionHelperHidl
    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port *port);

    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port_v7 *port);

    // Set audio port configuration.
    virtual status_t setAudioPortConfig(const struct audio_port_config *config);

@@ -128,6 +131,8 @@ class DeviceHalHidl : public DeviceHalInterface, public ConversionHelperHidl

    // The destructor automatically closes the device.
    virtual ~DeviceHalHidl();

    template <typename HalPort> status_t getAudioPortImpl(HalPort *port);
};

} // namespace CPP_VERSION
+16 −0
Original line number Diff line number Diff line
@@ -180,6 +180,22 @@ status_t DeviceHalLocal::getAudioPort(struct audio_port *port) {
    return mDev->get_audio_port(mDev, port);
}

status_t DeviceHalLocal::getAudioPort(struct audio_port_v7 *port) {
#if MAJOR_VERSION >= 7
    if (version() >= AUDIO_DEVICE_API_VERSION_3_2) {
        // get_audio_port_v7 is mandatory if legacy HAL support this API version.
        return mDev->get_audio_port_v7(mDev, port);
    }
#endif
    struct audio_port audioPort = {};
    audio_populate_audio_port(port, &audioPort);
    status_t status = getAudioPort(&audioPort);
    if (status == NO_ERROR) {
        audio_populate_audio_port_v7(&audioPort, port);
    }
    return status;
}

status_t DeviceHalLocal::setAudioPortConfig(const struct audio_port_config *config) {
    if (version() >= AUDIO_DEVICE_API_VERSION_3_0)
        return mDev->set_audio_port_config(mDev, config);
+3 −0
Original line number Diff line number Diff line
@@ -100,6 +100,9 @@ class DeviceHalLocal : public DeviceHalInterface
    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port *port);

    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port_v7 *port);

    // Set audio port configuration.
    virtual status_t setAudioPortConfig(const struct audio_port_config *config);

+3 −0
Original line number Diff line number Diff line
@@ -106,6 +106,9 @@ class DeviceHalInterface : public RefBase
    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port *port) = 0;

    // Fills the list of supported attributes for a given audio port.
    virtual status_t getAudioPort(struct audio_port_v7 *port) = 0;

    // Set audio port configuration.
    virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0;