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

Commit 0bac5380 authored by Eric Laurent's avatar Eric Laurent
Browse files

Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate...

Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR

Store sample rate on 32 bits instead of 16 bits in audio_track_cblk_t.
Removed sampleRate() methods from AudioTrack and AudioRecord: replaced by getSampleRate().
AudioTrack::setSampleRate() no returns a status.
parent 0cf7312c
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -1281,7 +1281,7 @@ sp<AudioFlinger::MixerThread::Track> AudioFlinger::MixerThread::createTrack_l(
    status_t lStatus;
    
    // Resampler implementation limits input sampling rate to 2 x output sampling rate.
    if (sampleRate > MAX_SAMPLE_RATE || sampleRate > mSampleRate*2) {
    if (sampleRate > mSampleRate*2) {
        LOGE("Sample rate out of range: %d mSampleRate %d", sampleRate, mSampleRate);
        lStatus = BAD_VALUE;
        goto Exit;
@@ -1596,8 +1596,8 @@ AudioFlinger::MixerThread::TrackBase::TrackBase(
                new(mCblk) audio_track_cblk_t();
                // clear all buffers
                mCblk->frameCount = frameCount;
                mCblk->sampleRate = (uint16_t)sampleRate;
                mCblk->channels = (uint16_t)channelCount;
                mCblk->sampleRate = sampleRate;
                mCblk->channels = (uint8_t)channelCount;
                if (sharedBuffer == 0) {
                    mBuffer = (char*)mCblk + sizeof(audio_track_cblk_t);
                    memset(mBuffer, 0, frameCount*channelCount*sizeof(int16_t));
@@ -1620,8 +1620,8 @@ AudioFlinger::MixerThread::TrackBase::TrackBase(
           new(mCblk) audio_track_cblk_t();
           // clear all buffers
           mCblk->frameCount = frameCount;
           mCblk->sampleRate = (uint16_t)sampleRate;
           mCblk->channels = (uint16_t)channelCount;
           mCblk->sampleRate = sampleRate;
           mCblk->channels = (uint8_t)channelCount;
           mBuffer = (char*)mCblk + sizeof(audio_track_cblk_t);
           memset(mBuffer, 0, frameCount*channelCount*sizeof(int16_t));
           // Force underrun condition to avoid false underrun callback until first data is
@@ -1682,7 +1682,7 @@ int AudioFlinger::MixerThread::TrackBase::sampleRate() const {
}

int AudioFlinger::MixerThread::TrackBase::channelCount() const {
    return mCblk->channels;
    return (int)mCblk->channels;
}

void* AudioFlinger::MixerThread::TrackBase::getBuffer(uint32_t offset, uint32_t frames) const {
@@ -2267,12 +2267,6 @@ sp<IAudioRecord> AudioFlinger::openRecord(
        goto Exit;
    }

    if (sampleRate > MAX_SAMPLE_RATE) {
        LOGE("Sample rate out of range");
        lStatus = BAD_VALUE;
        goto Exit;
    }

    if (mAudioRecordThread == 0) {
        LOGE("Audio record thread not started");
        lStatus = NO_INIT;