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

Commit a0fd4c72 authored by Francois Gaffie's avatar Francois Gaffie Committed by Eric Laurent
Browse files

AudioFlinger: PatchPanel: prioritize quality vs latency for FM Bridge



When a SwBridge is created, the default behavior is to start playback as
soon as possible, prioritizing the lowest strategy vs quality (potential
glitches).

This CL prevents this behavior for FM Tuner input devices if no fast mixer
and fast capture are used.

Signed-off-by: default avatarFrancois Gaffie <francois.gaffie@renault.com>
Change-Id: I24cfb97d09518be4ab15775d8575957a220c25dc
parent 5762c467
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -573,6 +573,12 @@ status_t AudioFlinger::PatchPanel::Patch::createConnections(PatchPanel *panel)

    // create a special playback track to render to playback thread.
    // this track is given the same buffer as the PatchRecord buffer

    // Default behaviour is to start as soon as possible to have the lowest possible latency even if
    // it might glitch.
    // Disable this behavior for FM Tuner source if no fast capture/mixer available.
    const bool isFmBridge = mAudioPatch.sources[0].ext.device.type == AUDIO_DEVICE_IN_FM_TUNER;
    const size_t frameCountToBeReady = isFmBridge && !usePassthruPatchRecord ? frameCount / 4 : 1;
    sp<PlaybackThread::PatchTrack> tempPatchTrack = new PlaybackThread::PatchTrack(
                                           mPlayback.thread().get(),
                                           streamType,
@@ -582,7 +588,9 @@ status_t AudioFlinger::PatchPanel::Patch::createConnections(PatchPanel *panel)
                                           frameCount,
                                           tempRecordTrack->buffer(),
                                           tempRecordTrack->bufferSize(),
                                           outputFlags);
                                           outputFlags,
                                           {} /*timeout*/,
                                           frameCountToBeReady);
    status = mPlayback.checkTrack(tempPatchTrack.get());
    if (status != NO_ERROR) {
        return status;