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

Commit a1c3516a authored by Andy Hung's avatar Andy Hung
Browse files

Fix SoundPool playback of multichannel files.

Bug: 17188507
Change-Id: Ia4e43c7f8889181b998673b75b1f3bbf8c43f429
parent ef7aa4fc
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -638,7 +638,7 @@ status_t Sample::doLoad()
       goto error;
    }

    if ((numChannels < 1) || (numChannels > 2)) {
    if ((numChannels < 1) || (numChannels > 8)) {
        ALOGE("Sample channel count (%d) out of range", numChannels);
        status = BAD_VALUE;
        goto error;
@@ -702,8 +702,10 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV
        size_t frameCount = 0;

        if (loop) {
            frameCount = sample->size()/numChannels/
                ((sample->format() == AUDIO_FORMAT_PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t));
            const audio_format_t format = sample->format();
            const size_t frameSize = audio_is_linear_pcm(format)
                    ? numChannels * audio_bytes_per_sample(format) : 1;
            frameCount = sample->size() / frameSize;
        }

#ifndef USE_SHARED_MEM_BUFFER
+2 −2
Original line number Diff line number Diff line
@@ -72,8 +72,8 @@ private:
    volatile int32_t    mRefCount;
    uint16_t            mSampleID;
    uint16_t            mSampleRate;
    uint8_t             mState : 3;
    uint8_t             mNumChannels : 2;
    uint8_t             mState;
    uint8_t             mNumChannels;
    audio_format_t      mFormat;
    int                 mFd;
    int64_t             mOffset;