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

Commit b29ea5ba authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "audio policy: return input source updates to audio flinger" into main

parents 5cff1e6d 0064ac30
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1415,7 +1415,8 @@ status_t AudioSystem::getInputForAttr(const audio_attributes_t* attr,
                                      audio_config_base_t* config,
                                      audio_input_flags_t flags,
                                      audio_port_handle_t* selectedDeviceId,
                                      audio_port_handle_t* portId) {
                                      audio_port_handle_t* portId,
                                      audio_source_t* source) {
    if (attr == NULL) {
        ALOGE("getInputForAttr NULL attr - shouldn't happen");
        return BAD_VALUE;
@@ -1463,7 +1464,7 @@ status_t AudioSystem::getInputForAttr(const audio_attributes_t* attr,
    *selectedDeviceId = VALUE_OR_RETURN_STATUS(
            aidl2legacy_int32_t_audio_port_handle_t(response.selectedDeviceId));
    *portId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(response.portId));

    *source = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioSource_audio_source_t(response.source));
    return OK;
}

+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media;

import android.media.audio.common.AudioConfigBase;
import android.media.audio.common.AudioSource;

/**
 * {@hide}
@@ -32,4 +33,6 @@ parcelable GetInputForAttrResponse {
    int virtualDeviceId;
    /** The suggested config if fails to get an input. **/
    AudioConfigBase config;
    /** The audio source, possibly updated by audio policy manager */
    AudioSource source;
}
+3 −1
Original line number Diff line number Diff line
@@ -370,6 +370,7 @@ public:
     * @param[in|out] selectedDeviceId the requested device id for playback, the actual device id
     *                                 for playback will be returned
     * @param[out] portId the generated port id to identify the client
     * @param[out] source the audio source validated by audio policy manager
     * @return if the call is successful or not
     */
    static status_t getInputForAttr(const audio_attributes_t *attr,
@@ -380,7 +381,8 @@ public:
                                    audio_config_base_t *config,
                                    audio_input_flags_t flags,
                                    audio_port_handle_t *selectedDeviceId,
                                    audio_port_handle_t *portId);
                                    audio_port_handle_t *portId,
                                    audio_source_t *source);

    static status_t startInput(audio_port_handle_t portId);
    static status_t stopInput(audio_port_handle_t portId);
+7 −2
Original line number Diff line number Diff line
@@ -649,12 +649,15 @@ status_t AudioFlinger::openMmapStream(MmapStreamInterface::stream_direction_t di
                 "%s does not support secondary outputs, ignoring them", __func__);
    } else {
        audio_port_handle_t deviceId = getFirstDeviceId(*deviceIds);
        audio_source_t source = AUDIO_SOURCE_DEFAULT;
        ret = AudioSystem::getInputForAttr(&localAttr, &io,
                                              RECORD_RIID_INVALID,
                                              actualSessionId,
                                              adjAttributionSource,
                                              config,
                                              AUDIO_INPUT_FLAG_MMAP_NOIRQ, &deviceId, &portId);
                                              AUDIO_INPUT_FLAG_MMAP_NOIRQ,
                                              &deviceId, &portId, &source);
        localAttr.source = source;
        deviceIds->clear();
        if (deviceId != AUDIO_PORT_HANDLE_NONE) {
            deviceIds->push_back(deviceId);
@@ -2587,17 +2590,19 @@ status_t AudioFlinger::createRecord(const media::CreateRecordRequest& _input,
        output.selectedDeviceId = input.selectedDeviceId;
        portId = AUDIO_PORT_HANDLE_NONE;
    }
    audio_source_t source = AUDIO_SOURCE_DEFAULT;
    lStatus = AudioSystem::getInputForAttr(&input.attr, &output.inputId,
                                      input.riid,
                                      sessionId,
                                    // FIXME compare to AudioTrack
                                      adjAttributionSource,
                                      &input.config,
                                      output.flags, &output.selectedDeviceId, &portId);
                                      output.flags, &output.selectedDeviceId, &portId, &source);
    if (lStatus != NO_ERROR) {
        ALOGE("createRecord() getInputForAttr return error %d", lStatus);
        goto Exit;
    }
    input.attr.source = source;

    {
        audio_utils::lock_guard _l(mutex());
+4 −1
Original line number Diff line number Diff line
@@ -10597,6 +10597,7 @@ status_t MmapThread::start(const AudioClient& client,
        config.channel_mask = mChannelMask;
        config.format = mFormat;
        audio_port_handle_t deviceId = getFirstDeviceId(mDeviceIds);
        audio_source_t source = AUDIO_SOURCE_DEFAULT;
        mutex().unlock();
        ret = AudioSystem::getInputForAttr(&localAttr, &io,
                                              RECORD_RIID_INVALID,
@@ -10605,9 +10606,11 @@ status_t MmapThread::start(const AudioClient& client,
                                              &config,
                                              AUDIO_INPUT_FLAG_MMAP_NOIRQ,
                                              &deviceId,
                                              &portId);
                                              &portId,
                                              &source);
        mutex().lock();
        // localAttr is const for getInputForAttr.
        localAttr.source = source;
    }
    // APM should not chose a different input or output stream for the same set of attributes
    // and audo configuration
Loading