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

Commit e21aa3b1 authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am 286a6355: am b076e6f3: am 227e443a: am d6ad7c85: Merge "Better seek...

am 286a6355: am b076e6f3: am 227e443a: am d6ad7c85: Merge "Better seek handling and proper reset of the vorbis decoder after a discontinuity (seek)" into froyo
parents 3a17fbb7 286a6355
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -94,6 +94,8 @@ private:
    size_t mCurrentPageSize;
    size_t mNextLaceIndex;

    off_t mFirstDataOffset;

    vorbis_info mVi;
    vorbis_comment mVc;

@@ -183,7 +185,8 @@ MyVorbisExtractor::MyVorbisExtractor(const sp<DataSource> &source)
    : mSource(source),
      mOffset(0),
      mCurrentPageSize(0),
      mNextLaceIndex(0) {
      mNextLaceIndex(0),
      mFirstDataOffset(-1) {
    mCurrentPage.mNumSegments = 0;
}

@@ -222,6 +225,12 @@ status_t MyVorbisExtractor::findNextPage(
}

status_t MyVorbisExtractor::seekToOffset(off_t offset) {
    if (mFirstDataOffset >= 0 && offset < mFirstDataOffset) {
        // Once we know where the actual audio data starts (past the headers)
        // don't ever seek to anywhere before that.
        offset = mFirstDataOffset;
    }

    off_t pageOffset;
    status_t err = findNextPage(offset, &pageOffset);

@@ -438,6 +447,8 @@ void MyVorbisExtractor::init() {
    verifyHeader(packet, 5);
    packet->release();
    packet = NULL;

    mFirstDataOffset = mOffset + mCurrentPageSize;
}

void MyVorbisExtractor::verifyHeader(
+10 −8
Original line number Diff line number Diff line
@@ -173,18 +173,19 @@ int VorbisDecoder::decodePacket(MediaBuffer *packet, MediaBuffer *out) {
    pack.granulepos = 0;
    pack.packetno = 0;

    int numFrames = 0;

    int err = vorbis_dsp_synthesis(mState, &pack, 1);
    if (err != 0) {
        LOGW("vorbis_dsp_synthesis returned %d", err);
        return 0;
    }

    int numFrames = vorbis_dsp_pcmout(
    } else {
        numFrames = vorbis_dsp_pcmout(
                mState, (int16_t *)out->data(), kMaxNumSamplesPerBuffer);

        if (numFrames < 0) {
            LOGE("vorbis_dsp_pcmout returned %d", numFrames);
        return 0;
            numFrames = 0;
        }
    }

    out->set_range(0, numFrames * sizeof(int16_t) * mNumChannels);
@@ -203,6 +204,7 @@ status_t VorbisDecoder::read(
        CHECK(seekTimeUs >= 0);

        mNumFramesOutput = 0;
        vorbis_dsp_restart(mState);
    } else {
        seekTimeUs = -1;
    }