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

Commit f6e304f9 authored by Haofan Wang's avatar Haofan Wang
Browse files

Send the Audio Usage down from AudioPolicyManager

Store audioUsgae in AudioAttributes and send it down to
AudioFlinger::openOutput_l. Then extract audioUsage and store in
SourceMetadata to pass it down to the HAL layer.

Bug: 297875432
Test: Add a fake audio usage in attribute in AudioFlinger::openoutput(), then test by checking the log message. The fake usage does get pass down to the DeviceHalAidl::openOutputStream().
Flag: EXEMPT bugfix
Change-Id: Ic9a739f1de50485304187be5c4b603955afabbf8
parent bdf526de
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.media;
import android.media.AudioPortFw;
import android.media.audio.common.AudioConfig;
import android.media.audio.common.AudioConfigBase;
import android.media.audio.common.AudioAttributes;

/**
 * {@hide}
@@ -32,4 +33,5 @@ parcelable OpenOutputRequest {
    AudioPortFw device;
    /** Bitmask, indexed by AudioOutputFlag. */
    int flags;
    AudioAttributes attributes;
}
+11 −3
Original line number Diff line number Diff line
@@ -3023,7 +3023,8 @@ sp<IAfThreadBase> AudioFlinger::openOutput_l(audio_module_handle_t module,
                                                        audio_config_base_t *mixerConfig,
                                                        audio_devices_t deviceType,
                                                        const String8& address,
                                                        audio_output_flags_t flags)
                                                        audio_output_flags_t flags,
                                                        const audio_attributes_t attributes)
{
    AudioHwDevice *outHwDev = findSuitableHwDev_l(module, deviceType);
    if (outHwDev == NULL) {
@@ -3041,13 +3042,18 @@ sp<IAfThreadBase> AudioFlinger::openOutput_l(audio_module_handle_t module,

    mHardwareStatus = AUDIO_HW_OUTPUT_OPEN;
    AudioStreamOut *outputStream = NULL;

    playback_track_metadata_v7_t trackMetadata;
    trackMetadata.base.usage = attributes.usage;

    status_t status = outHwDev->openOutputStream(
            &outputStream,
            *output,
            deviceType,
            flags,
            halConfig,
            address.c_str());
            address.c_str(),
            {trackMetadata});

    mHardwareStatus = AUDIO_HW_IDLE;

@@ -3116,6 +3122,8 @@ status_t AudioFlinger::openOutput(const media::OpenOutputRequest& request,
            aidl2legacy_DeviceDescriptorBase(request.device));
    audio_output_flags_t flags = VALUE_OR_RETURN_STATUS(
            aidl2legacy_int32_t_audio_output_flags_t_mask(request.flags));
    audio_attributes_t attributes = VALUE_OR_RETURN_STATUS(
            aidl2legacy_AudioAttributes_audio_attributes_t(request.attributes));

    audio_io_handle_t output;

@@ -3138,7 +3146,7 @@ status_t AudioFlinger::openOutput(const media::OpenOutputRequest& request,
    audio_utils::lock_guard _l(mutex());

    const sp<IAfThreadBase> thread = openOutput_l(module, &output, &halConfig,
            &mixerConfig, deviceType, address, flags);
            &mixerConfig, deviceType, address, flags, attributes);
    if (thread != 0) {
        uint32_t latencyMs = 0;
        if ((flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) == 0) {
+2 −1
Original line number Diff line number Diff line
@@ -337,7 +337,8 @@ private:
            audio_config_base_t* mixerConfig,
            audio_devices_t deviceType,
            const String8& address,
            audio_output_flags_t flags) final REQUIRES(mutex());
            audio_output_flags_t flags,
            audio_attributes_t attributes) final REQUIRES(mutex());
    const DefaultKeyedVector<audio_module_handle_t, AudioHwDevice*>&
            getAudioHwDevs_l() const final REQUIRES(mutex()) { return mAudioHwDevs; }
    void updateDownStreamPatches_l(const struct audio_patch* patch,
+2 −1
Original line number Diff line number Diff line
@@ -82,7 +82,8 @@ public:
            audio_config_base_t* mixerConfig,
            audio_devices_t deviceType,
            const String8& address,
            audio_output_flags_t flags) REQUIRES(mutex()) = 0;
            audio_output_flags_t flags,
            audio_attributes_t attributes) REQUIRES(mutex()) = 0;
    virtual audio_utils::mutex& mutex() const
            RETURN_CAPABILITY(audio_utils::AudioFlinger_Mutex) = 0;
    virtual const DefaultKeyedVector<audio_module_handle_t, AudioHwDevice*>&
+3 −1
Original line number Diff line number Diff line
@@ -260,6 +260,7 @@ status_t PatchPanel::createAudioPatch_l(const struct audio_patch* patch,
                    if (patch->sinks[0].config_mask & AUDIO_PORT_CONFIG_FLAGS) {
                        flags = patch->sinks[0].flags.output;
                    }
                    audio_attributes_t attributes = AUDIO_ATTRIBUTES_INITIALIZER;
                    const sp<IAfThreadBase> thread = mAfPatchPanelCallback->openOutput_l(
                                                            patch->sinks[0].ext.device.hw_module,
                                                            &output,
@@ -267,7 +268,8 @@ status_t PatchPanel::createAudioPatch_l(const struct audio_patch* patch,
                                                            &mixerConfig,
                                                            outputDevice,
                                                            outputDeviceAddress,
                                                            flags);
                                                            flags,
                                                            attributes);
                    ALOGV("mAfPatchPanelCallback->openOutput_l() returned %p", thread.get());
                    if (thread == 0) {
                        status = NO_MEMORY;
Loading