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

Commit 8f658214 authored by Andreas Huber's avatar Andreas Huber
Browse files

Minor tweaks to the mp3 and aac software decoders, propagate duration to output format.

parent 247003be
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ AACDecoder::AACDecoder(const sp<MediaSource> &source)
      mBufferGroup(NULL),
      mConfig(new tPVMP4AudioDecoderExternal),
      mDecoderBuf(NULL),
      mLastSeekTimeUs(0),
      mAnchorTimeUs(0),
      mNumSamplesOutput(0),
      mInputBuffer(NULL) {
}
@@ -79,7 +79,7 @@ status_t AACDecoder::start(MetaData *params) {

    mSource->start();

    mLastSeekTimeUs = 0;
    mAnchorTimeUs = 0;
    mNumSamplesOutput = 0;
    mStarted = true;

@@ -112,13 +112,16 @@ sp<MetaData> AACDecoder::getFormat() {

    int32_t numChannels;
    int32_t sampleRate;
    int64_t durationUs;
    CHECK(srcFormat->findInt32(kKeyChannelCount, &numChannels));
    CHECK(srcFormat->findInt32(kKeySampleRate, &sampleRate));
    CHECK(srcFormat->findInt64(kKeyDuration, &durationUs));

    sp<MetaData> meta = new MetaData;
    meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_RAW);
    meta->setInt32(kKeyChannelCount, numChannels);
    meta->setInt32(kKeySampleRate, sampleRate);
    meta->setInt64(kKeyDuration, durationUs);

    return meta;
}
@@ -150,11 +153,13 @@ status_t AACDecoder::read(
            return err;
        }

        if (seekTimeUs >= 0) {
            CHECK(mInputBuffer->meta_data()->findInt64(
                        kKeyTime, &mLastSeekTimeUs));

        int64_t timeUs;
        if (mInputBuffer->meta_data()->findInt64(kKeyTime, &timeUs)) {
            mAnchorTimeUs = timeUs;
            mNumSamplesOutput = 0;
        } else {
            // We must have a new timestamp after seeking.
            CHECK(seekTimeUs < 0);
        }
    }

@@ -189,7 +194,7 @@ status_t AACDecoder::read(

    buffer->meta_data()->setInt64(
            kKeyTime,
            mLastSeekTimeUs
            mAnchorTimeUs
                + (mNumSamplesOutput * 1000000) / mConfig->samplingRate);

    mNumSamplesOutput += mConfig->frameLength;
+6 −0
Original line number Diff line number Diff line
@@ -78,13 +78,16 @@ sp<MetaData> MP3Decoder::getFormat() {

    int32_t numChannels;
    int32_t sampleRate;
    int64_t durationUs;
    CHECK(srcFormat->findInt32(kKeyChannelCount, &numChannels));
    CHECK(srcFormat->findInt32(kKeySampleRate, &sampleRate));
    CHECK(srcFormat->findInt64(kKeyDuration, &durationUs));

    sp<MetaData> meta = new MetaData;
    meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_RAW);
    meta->setInt32(kKeyChannelCount, numChannels);
    meta->setInt32(kKeySampleRate, sampleRate);
    meta->setInt64(kKeyDuration, durationUs);

    return meta;
}
@@ -120,6 +123,9 @@ status_t MP3Decoder::read(
        if (mInputBuffer->meta_data()->findInt64(kKeyTime, &timeUs)) {
            mAnchorTimeUs = timeUs;
            mNumSamplesOutput = 0;
        } else {
            // We must have a new timestamp after seeking.
            CHECK(seekTimeUs < 0);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ private:

    tPVMP4AudioDecoderExternal *mConfig;
    void *mDecoderBuf;
    int64_t mLastSeekTimeUs;
    int64_t mAnchorTimeUs;
    int64_t mNumSamplesOutput;

    MediaBuffer *mInputBuffer;