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

Commit 047b6307 authored by Eric Laurent's avatar Eric Laurent Committed by Android Git Automerger
Browse files

am 7b6aff23: Merge "audioflinger: fix audio skipping over A2DP" into ics-mr1

* commit '7b6aff23735a9ef8759c5ecb4427784413e9b85b':
  audioflinger: fix audio skipping over A2DP
parents 369c3a57 9e603e05
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -1893,6 +1893,18 @@ audio_stream_t* AudioFlinger::PlaybackThread::stream()
    return &mOutput->stream->common;
}

uint32_t AudioFlinger::PlaybackThread::activeSleepTimeUs()
{
    // A2DP output latency is not due only to buffering capacity. It also reflects encoding,
    // decoding and transfer time. So sleeping for half of the latency would likely cause
    // underruns
    if (audio_is_a2dp_device((audio_devices_t)mDevice)) {
        return (uint32_t)((uint32_t)((mFrameCount * 1000) / mSampleRate) * 1000);
    } else {
        return (uint32_t)(mOutput->stream->get_latency(mOutput->stream) * 1000) / 2;
    }
}

// ----------------------------------------------------------------------------

AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device)
@@ -2516,11 +2528,6 @@ status_t AudioFlinger::MixerThread::dumpInternals(int fd, const Vector<String16>
    return NO_ERROR;
}

uint32_t AudioFlinger::MixerThread::activeSleepTimeUs()
{
    return (uint32_t)(mOutput->stream->get_latency(mOutput->stream) * 1000) / 2;
}

uint32_t AudioFlinger::MixerThread::idleSleepTimeUs()
{
    return (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000) / 2;
@@ -2988,7 +2995,7 @@ uint32_t AudioFlinger::DirectOutputThread::activeSleepTimeUs()
{
    uint32_t time;
    if (audio_is_linear_pcm(mFormat)) {
        time = (uint32_t)(mOutput->stream->get_latency(mOutput->stream) * 1000) / 2;
        time = PlaybackThread::activeSleepTimeUs();
    } else {
        time = 10000;
    }
+1 −2
Original line number Diff line number Diff line
@@ -865,7 +865,7 @@ private:

        virtual int             getTrackName_l() = 0;
        virtual void            deleteTrackName_l(int name) = 0;
        virtual uint32_t        activeSleepTimeUs() = 0;
        virtual uint32_t        activeSleepTimeUs();
        virtual uint32_t        idleSleepTimeUs() = 0;
        virtual uint32_t        suspendSleepTimeUs() = 0;

@@ -922,7 +922,6 @@ private:
                                                Vector< sp<Track> > *tracksToRemove);
        virtual     int         getTrackName_l();
        virtual     void        deleteTrackName_l(int name);
        virtual     uint32_t    activeSleepTimeUs();
        virtual     uint32_t    idleSleepTimeUs();
        virtual     uint32_t    suspendSleepTimeUs();