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

Commit 89818ba4 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Split AudioProfile between fwk and android.media.audio.common

a.m.a.c adds a version of AudioProfile struct which
is similar to Audio HIDL HAL V7. It lacks some bits used only
by the framework. These are carried in AudioProfileSys.
AudioProfileSys does not contain AudioProfile. This is done
to simplify further splitting of other types like AudioPort.

Updated to/from AIDL conversions in libaudiofondation.
They encapsulate the fact that there are two AIDL structures
per AudioProfile class instance.

Bug: 198812639
Test: atest audiofoundation_parcelable_test
Change-Id: I6834650f9406c552b6dfa42b120769eb38d6f588
parent 53b5ae34
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ using media::audio::common::AudioFormatDescription;
using media::audio::common::AudioFormatType;
using media::audio::common::AudioMode;
using media::audio::common::AudioOffloadInfo;
using media::audio::common::AudioProfile;
using media::audio::common::AudioSource;
using media::audio::common::AudioStreamType;
using media::audio::common::AudioUsage;
@@ -2743,17 +2744,17 @@ ConversionResult<media::AudioPortExt> legacy2aidl_AudioPortExt(
}

ConversionResult<audio_profile>
aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl, bool isInput) {
aidl2legacy_AudioProfile_audio_profile(const AudioProfile& aidl, bool isInput) {
    audio_profile legacy;
    legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormatDescription_audio_format_t(aidl.format));

    if (aidl.samplingRates.size() > std::size(legacy.sample_rates)) {
    if (aidl.sampleRates.size() > std::size(legacy.sample_rates)) {
        return unexpected(BAD_VALUE);
    }
    RETURN_IF_ERROR(
            convertRange(aidl.samplingRates.begin(), aidl.samplingRates.end(), legacy.sample_rates,
            convertRange(aidl.sampleRates.begin(), aidl.sampleRates.end(), legacy.sample_rates,
                         convertIntegral<int32_t, unsigned int>));
    legacy.num_sample_rates = aidl.samplingRates.size();
    legacy.num_sample_rates = aidl.sampleRates.size();

    if (aidl.channelMasks.size() > std::size(legacy.channel_masks)) {
        return unexpected(BAD_VALUE);
@@ -2770,9 +2771,9 @@ aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl, bool isI
    return legacy;
}

ConversionResult<media::AudioProfile>
ConversionResult<AudioProfile>
legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy, bool isInput) {
    media::AudioProfile aidl;
    AudioProfile aidl;
    aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormatDescription(legacy.format));

    if (legacy.num_sample_rates > std::size(legacy.sample_rates)) {
@@ -2780,7 +2781,7 @@ legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy, bool isInput
    }
    RETURN_IF_ERROR(
            convertRange(legacy.sample_rates, legacy.sample_rates + legacy.num_sample_rates,
                         std::back_inserter(aidl.samplingRates),
                         std::back_inserter(aidl.sampleRates),
                         convertIntegral<unsigned int, int32_t>));

    if (legacy.num_channel_masks > std::size(legacy.channel_masks)) {
@@ -2843,7 +2844,7 @@ aidl2legacy_AudioPort_audio_port_v7(const media::AudioPort& aidl) {
    }
    const bool isInput = VALUE_OR_RETURN(direction(aidl.role, aidl.type)) == Direction::INPUT;
    RETURN_IF_ERROR(convertRange(aidl.profiles.begin(), aidl.profiles.end(), legacy.audio_profiles,
                                 [isInput](const media::AudioProfile& p) {
                                 [isInput](const AudioProfile& p) {
                                     return aidl2legacy_AudioProfile_audio_profile(p, isInput);
                                 }));
    legacy.num_audio_profiles = aidl.profiles.size();
@@ -2892,6 +2893,7 @@ legacy2aidl_audio_port_v7_AudioPort(const audio_port_v7& legacy) {
    if (legacy.num_extra_audio_descriptors > std::size(legacy.extra_audio_descriptors)) {
        return unexpected(BAD_VALUE);
    }
    aidl.profilesSys.resize(legacy.num_audio_profiles);
    RETURN_IF_ERROR(
            convertRange(legacy.extra_audio_descriptors,
                    legacy.extra_audio_descriptors + legacy.num_extra_audio_descriptors,
+1 −1
Original line number Diff line number Diff line
@@ -339,7 +339,7 @@ aidl_interface {
        "aidl/android/media/AudioPortRole.aidl",
        "aidl/android/media/AudioPortSessionExt.aidl",
        "aidl/android/media/AudioPortType.aidl",
        "aidl/android/media/AudioProfile.aidl",
        "aidl/android/media/AudioProfileSys.aidl",
        "aidl/android/media/AudioStandard.aidl",
        "aidl/android/media/AudioTimestampInternal.aidl",
        "aidl/android/media/AudioUniqueIdUse.aidl",
+4 −1
Original line number Diff line number Diff line
@@ -21,8 +21,9 @@ import android.media.AudioPortConfig;
import android.media.AudioPortExt;
import android.media.AudioPortRole;
import android.media.AudioPortType;
import android.media.AudioProfile;
import android.media.AudioProfileSys;
import android.media.ExtraAudioDescriptor;
import android.media.audio.common.AudioProfile;

/**
 * {@hide}
@@ -37,6 +38,8 @@ parcelable AudioPort {
    @utf8InCpp String name;
    /** AudioProfiles supported by this port (format, Rates, Channels). */
    AudioProfile[] profiles;
    /** System-only parameters for each AudioProfile. */
    AudioProfileSys[] profilesSys;
    /**
     * ExtraAudioDescriptors supported by this port. The format is not unrecognized to the
     * platform. The audio capability is described by a hardware descriptor.
+5 −11
Original line number Diff line number Diff line
@@ -16,21 +16,15 @@

package android.media;

import android.media.audio.common.AudioEncapsulationType;
import android.media.audio.common.AudioFormatDescription;
import android.media.audio.common.AudioChannelLayout;

/**
 * Provides indication whether the parameters of the AudioProfiles in the
 * AudioPort are dynamic. Each instance of AudioProfileSys corresponds
 * to an instance of AudioProfile.
 *
 * {@hide}
 */
parcelable AudioProfile {
    @utf8InCpp String name;
    /** The format for an audio profile should only be set when initialized. */
    AudioFormatDescription format;
    AudioChannelLayout[] channelMasks;
    int[] samplingRates;
parcelable AudioProfileSys {
    boolean isDynamicFormat;
    boolean isDynamicChannels;
    boolean isDynamicRate;
    AudioEncapsulationType encapsulationType;
}
+4 −3
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@
#include <android/media/AudioPortExt.h>
#include <android/media/AudioPortMixExt.h>
#include <android/media/AudioPortSessionExt.h>
#include <android/media/AudioProfile.h>
#include <android/media/AudioTimestampInternal.h>
#include <android/media/AudioUniqueIdUse.h>
#include <android/media/EffectDescriptor.h>
@@ -56,6 +55,7 @@
#include <android/media/audio/common/AudioFormatDescription.h>
#include <android/media/audio/common/AudioMode.h>
#include <android/media/audio/common/AudioOffloadInfo.h>
#include <android/media/audio/common/AudioProfile.h>
#include <android/media/audio/common/AudioSource.h>
#include <android/media/audio/common/AudioUsage.h>
#include <android/media/audio/common/AudioUuid.h>
@@ -372,8 +372,9 @@ ConversionResult<media::AudioPortSessionExt>
legacy2aidl_audio_port_session_ext_AudioPortSessionExt(const audio_port_session_ext& legacy);

ConversionResult<audio_profile>
aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl, bool isInput);
ConversionResult<media::AudioProfile>
aidl2legacy_AudioProfile_audio_profile(
        const media::audio::common::AudioProfile& aidl, bool isInput);
ConversionResult<media::audio::common::AudioProfile>
legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy, bool isInput);

ConversionResult<audio_gain>
Loading