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

Commit fa7fe4d5 authored by Eric Laurent's avatar Eric Laurent
Browse files

AAudio: set audio attributes performance flags

Make sure performance flags in audio attributes are reflecting
the output flags passed to the AudioTrack by AAudioStreamTrack and
ToneGenerator.

Bug: 278412306
Test: make
Change-Id: I70c4f22972cbbb35a183ef362f571481d4dd89ec
parent ee9f3ae4
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -132,10 +132,11 @@ aaudio_result_t AudioStreamTrack::open(const AudioStreamBuilder& builder)
            AAudioConvert_contentTypeToInternal(builder.getContentType());
    const audio_usage_t usage =
            AAudioConvert_usageToInternal(builder.getUsage());
    const audio_flags_mask_t attributesFlags =
        AAudioConvert_allowCapturePolicyToAudioFlagsMask(builder.getAllowedCapturePolicy(),
    const audio_flags_mask_t attributesFlags = AAudio_computeAudioFlagsMask(
                                                            builder.getAllowedCapturePolicy(),
                                                            builder.getSpatializationBehavior(),
                                                         builder.isContentSpatialized());
                                                            builder.isContentSpatialized(),
                                                            flags);

    const audio_attributes_t attributes = {
            .content_type = contentType,
+12 −2
Original line number Diff line number Diff line
@@ -255,10 +255,11 @@ audio_source_t AAudioConvert_inputPresetToAudioSource(aaudio_input_preset_t pres
    return (audio_source_t) preset; // same value
}

audio_flags_mask_t AAudioConvert_allowCapturePolicyToAudioFlagsMask(
audio_flags_mask_t AAudio_computeAudioFlagsMask(
        aaudio_allowed_capture_policy_t policy,
        aaudio_spatialization_behavior_t spatializationBehavior,
        bool isContentSpatialized) {
        bool isContentSpatialized,
        audio_output_flags_t outputFlags) {
    audio_flags_mask_t flagsMask = AUDIO_FLAG_NONE;
    switch (policy) {
        case AAUDIO_UNSPECIFIED:
@@ -295,6 +296,15 @@ audio_flags_mask_t AAudioConvert_allowCapturePolicyToAudioFlagsMask(
        flagsMask = static_cast<audio_flags_mask_t>(flagsMask | AUDIO_FLAG_CONTENT_SPATIALIZED);
    }

    if ((outputFlags & AUDIO_OUTPUT_FLAG_HW_AV_SYNC) != 0) {
        flagsMask = static_cast<audio_flags_mask_t>(flagsMask | AUDIO_FLAG_HW_AV_SYNC);
    }
    if ((outputFlags & AUDIO_OUTPUT_FLAG_FAST) != 0) {
        flagsMask = static_cast<audio_flags_mask_t>(flagsMask | AUDIO_FLAG_LOW_LATENCY);
    } else if ((outputFlags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER) != 0) {
        flagsMask = static_cast<audio_flags_mask_t>(flagsMask | AUDIO_FLAG_DEEP_BUFFER);
    }

    return flagsMask;
}

+3 −2
Original line number Diff line number Diff line
@@ -94,10 +94,11 @@ audio_source_t AAudioConvert_inputPresetToAudioSource(aaudio_input_preset_t pres
 * That is done somewhere else.
 * @return internal audio flags mask
 */
audio_flags_mask_t AAudioConvert_allowCapturePolicyToAudioFlagsMask(
audio_flags_mask_t AAudio_computeAudioFlagsMask(
        aaudio_allowed_capture_policy_t policy,
        aaudio_spatialization_behavior_t spatializationBehavior,
        bool isContentSpatialized);
        bool isContentSpatialized,
        audio_output_flags_t outputFlags);

audio_flags_mask_t AAudioConvert_privacySensitiveToAudioFlagsMask(
        bool privacySensitive);
+2 −1
Original line number Diff line number Diff line
@@ -1306,6 +1306,7 @@ bool ToneGenerator::initAudioTrack() {
        streamType = AUDIO_STREAM_DTMF;
    }
    attr = AudioSystem::streamTypeToAttributes(streamType);
    attr.flags = AUDIO_FLAG_LOW_LATENCY;

    const size_t frameCount = mProcessSize;
    status_t status = mpAudioTrack->set(
@@ -1314,7 +1315,7 @@ bool ToneGenerator::initAudioTrack() {
            AUDIO_FORMAT_PCM_16_BIT,
            AUDIO_CHANNEL_OUT_MONO,
            frameCount,
            AUDIO_OUTPUT_FLAG_FAST,
            AUDIO_OUTPUT_FLAG_NONE,
            wp<AudioTrack::IAudioTrackCallback>::fromExisting(this),
            0,    // notificationFrames
            0,    // sharedBuffer
+3 −3
Original line number Diff line number Diff line
@@ -196,11 +196,11 @@ audio_attributes_t AAudioServiceEndpoint::getAudioAttributesFrom(
            : AUDIO_SOURCE_DEFAULT;
    audio_flags_mask_t flags;
    if (direction == AAUDIO_DIRECTION_OUTPUT) {
        flags = static_cast<audio_flags_mask_t>(AUDIO_FLAG_LOW_LATENCY
                | AAudioConvert_allowCapturePolicyToAudioFlagsMask(
        flags = AAudio_computeAudioFlagsMask(
                        params->getAllowedCapturePolicy(),
                        params->getSpatializationBehavior(),
                        params->isContentSpatialized()));
                        params->isContentSpatialized(),
                        AUDIO_OUTPUT_FLAG_FAST);
    } else {
        flags = static_cast<audio_flags_mask_t>(AUDIO_FLAG_LOW_LATENCY
                | AAudioConvert_privacySensitiveToAudioFlagsMask(params->isPrivacySensitive()));