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

Commit 6313e57e authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Update AudioPort <-> configs mapping

It is considered that in general there is a 1:N relationship
between an AudioPort and AudioPortConfigs.
The 'AudioPort.activeConfig' field could only support a 1:1
relationship, but this is true for device ports.
Thus, 'AudioPort.activeConfig' has been moved to 'AudioPortSys'.

The new field 'AudioPortConfig.portId' in the types shared with
HAL is initialized using the ID of the port this config applies
to.

Bug: 205884982
Test: atest audiofoundation_parcelable_test
Change-Id: I8db679213ad582ce106753d254f82ec0318b35bb
parent 074fbbdd
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -2957,11 +2957,8 @@ aidl2legacy_AudioPort_audio_port_v7(const media::AudioPort& aidl) {
                                 }));
    legacy.num_gains = aidl.hal.gains.size();

    media::AudioPortConfig aidlPortConfig;
    aidlPortConfig.hal = aidl.hal.activeConfig;
    aidlPortConfig.sys = aidl.sys.activeConfig;
    legacy.active_config = VALUE_OR_RETURN(
            aidl2legacy_AudioPortConfig_audio_port_config(aidlPortConfig));
            aidl2legacy_AudioPortConfig_audio_port_config(aidl.sys.activeConfig));
    legacy.ext = VALUE_OR_RETURN(
            aidl2legacy_AudioPortExt_audio_port_v7_ext(aidl.hal.ext, aidl.sys.type, aidl.sys.ext));
    return legacy;
@@ -3007,10 +3004,9 @@ legacy2aidl_audio_port_v7_AudioPort(const audio_port_v7& legacy) {
                         }));
    aidl.sys.gains.resize(legacy.num_gains);

    media::AudioPortConfig aidlPortConfig = VALUE_OR_RETURN(
    aidl.sys.activeConfig = VALUE_OR_RETURN(
            legacy2aidl_audio_port_config_AudioPortConfig(legacy.active_config));
    aidl.hal.activeConfig = aidlPortConfig.hal;
    aidl.sys.activeConfig = aidlPortConfig.sys;
    aidl.sys.activeConfig.hal.portId = aidl.hal.id;
    RETURN_IF_ERROR(
            legacy2aidl_AudioPortExt(legacy.ext, legacy.type, &aidl.hal.ext, &aidl.sys.ext));
    return aidl;
+3 −3
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.media;

import android.media.AudioGainSys;
import android.media.AudioPortConfigSys;
import android.media.AudioPortConfig;
import android.media.AudioPortExtSys;
import android.media.AudioPortRole;
import android.media.AudioPortType;
@@ -35,8 +35,8 @@ parcelable AudioPortSys {
    AudioProfileSys[] profiles;
    /** System-only parameters for each AudioGain from 'port.gains'. */
    AudioGainSys[] gains;
    /** System-only parameters for 'port.activeConfig'. */
    AudioPortConfigSys activeConfig;
    /** Current audio port configuration. */
    AudioPortConfig activeConfig;
    /** System-only extra parameters for 'port.ext'. */
    AudioPortExtSys ext;
}
+3 −2
Original line number Diff line number Diff line
@@ -176,8 +176,9 @@ bool DeviceDescriptorBase::supportsFormat(audio_format_t format)

status_t DeviceDescriptorBase::writeToParcelable(media::AudioPort* parcelable) const {
    AudioPort::writeToParcelable(parcelable);
    AudioPortConfig::writeToParcelable(&parcelable->hal.activeConfig, useInputChannelMask());
    AudioPortConfig::writeToParcelable(&parcelable->sys.activeConfig.hal, useInputChannelMask());
    parcelable->hal.id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));
    parcelable->sys.activeConfig.hal.portId = parcelable->hal.id;

    media::audio::common::AudioPortDeviceExt deviceExt;
    deviceExt.device = VALUE_OR_RETURN_STATUS(
@@ -201,7 +202,7 @@ status_t DeviceDescriptorBase::readFromParcelable(const media::AudioPort& parcel
    }
    status_t status = AudioPort::readFromParcelable(parcelable)
            ?: AudioPortConfig::readFromParcelable(
                    parcelable.hal.activeConfig, useInputChannelMask());
                    parcelable.sys.activeConfig.hal, useInputChannelMask());
    if (status != OK) {
        return status;
    }