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

Commit 01427884 authored by Robert Shih's avatar Robert Shih Committed by Android (Google) Code Review
Browse files

Merge "Expose sample duration in MPEG4Extractor."

parents 70c2fd3d 17005654
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -3540,7 +3540,7 @@ status_t MPEG4Source::read(

    off64_t offset;
    size_t size;
    uint32_t cts;
    uint32_t cts, stts;
    bool isSyncSample;
    bool newBuffer = false;
    if (mBuffer == NULL) {
@@ -3548,7 +3548,7 @@ status_t MPEG4Source::read(

        status_t err =
            mSampleTable->getMetaDataForSample(
                    mCurrentSampleIndex, &offset, &size, &cts, &isSyncSample);
                    mCurrentSampleIndex, &offset, &size, &cts, &isSyncSample, &stts);

        if (err != OK) {
            return err;
@@ -3579,6 +3579,8 @@ status_t MPEG4Source::read(
            mBuffer->meta_data()->clear();
            mBuffer->meta_data()->setInt64(
                    kKeyTime, ((int64_t)cts * 1000000) / mTimescale);
            mBuffer->meta_data()->setInt64(
                    kKeyDuration, ((int64_t)stts * 1000000) / mTimescale);

            if (targetSampleTimeUs >= 0) {
                mBuffer->meta_data()->setInt64(
@@ -3701,6 +3703,8 @@ status_t MPEG4Source::read(
        mBuffer->meta_data()->clear();
        mBuffer->meta_data()->setInt64(
                kKeyTime, ((int64_t)cts * 1000000) / mTimescale);
        mBuffer->meta_data()->setInt64(
                kKeyDuration, ((int64_t)stts * 1000000) / mTimescale);

        if (targetSampleTimeUs >= 0) {
            mBuffer->meta_data()->setInt64(
@@ -3850,6 +3854,8 @@ status_t MPEG4Source::fragmentedRead(
            mBuffer->set_range(0, size);
            mBuffer->meta_data()->setInt64(
                    kKeyTime, ((int64_t)cts * 1000000) / mTimescale);
            mBuffer->meta_data()->setInt64(
                    kKeyDuration, ((int64_t)smpl->duration * 1000000) / mTimescale);

            if (targetSampleTimeUs >= 0) {
                mBuffer->meta_data()->setInt64(
@@ -3973,6 +3979,8 @@ status_t MPEG4Source::fragmentedRead(

        mBuffer->meta_data()->setInt64(
                kKeyTime, ((int64_t)cts * 1000000) / mTimescale);
        mBuffer->meta_data()->setInt64(
                kKeyDuration, ((int64_t)smpl->duration * 1000000) / mTimescale);

        if (targetSampleTimeUs >= 0) {
            mBuffer->meta_data()->setInt64(
+6 −3
Original line number Diff line number Diff line
@@ -133,7 +133,8 @@ status_t SampleIterator::seekTo(uint32_t sampleIndex) {
    }

    status_t err;
    if ((err = findSampleTime(sampleIndex, &mCurrentSampleTime)) != OK) {
    if ((err = findSampleTimeAndDuration(
            sampleIndex, &mCurrentSampleTime, &mCurrentSampleDuration)) != OK) {
        ALOGE("findSampleTime return error");
        return err;
    }
@@ -285,8 +286,8 @@ status_t SampleIterator::getSampleSizeDirect(
    return OK;
}

status_t SampleIterator::findSampleTime(
        uint32_t sampleIndex, uint32_t *time) {
status_t SampleIterator::findSampleTimeAndDuration(
        uint32_t sampleIndex, uint32_t *time, uint32_t *duration) {
    if (sampleIndex >= mTable->mNumSampleSizes) {
        return ERROR_OUT_OF_RANGE;
    }
@@ -309,6 +310,8 @@ status_t SampleIterator::findSampleTime(

    *time += mTable->getCompositionTimeOffset(sampleIndex);

    *duration = mTTSDuration;

    return OK;
}

+6 −1
Original line number Diff line number Diff line
@@ -778,7 +778,8 @@ status_t SampleTable::getMetaDataForSample(
        off64_t *offset,
        size_t *size,
        uint32_t *compositionTime,
        bool *isSyncSample) {
        bool *isSyncSample,
        uint32_t *sampleDuration) {
    Mutex::Autolock autoLock(mLock);

    status_t err;
@@ -820,6 +821,10 @@ status_t SampleTable::getMetaDataForSample(
        }
    }

    if (sampleDuration) {
        *sampleDuration = mSampleIterator->getSampleDuration();
    }

    return OK;
}

+3 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ struct SampleIterator {
    off64_t getSampleOffset() const { return mCurrentSampleOffset; }
    size_t getSampleSize() const { return mCurrentSampleSize; }
    uint32_t getSampleTime() const { return mCurrentSampleTime; }
    uint32_t getSampleDuration() const { return mCurrentSampleDuration; }

    status_t getSampleSizeDirect(
            uint32_t sampleIndex, size_t *size);
@@ -61,11 +62,12 @@ private:
    off64_t mCurrentSampleOffset;
    size_t mCurrentSampleSize;
    uint32_t mCurrentSampleTime;
    uint32_t mCurrentSampleDuration;

    void reset();
    status_t findChunkRange(uint32_t sampleIndex);
    status_t getChunkOffset(uint32_t chunk, off64_t *offset);
    status_t findSampleTime(uint32_t sampleIndex, uint32_t *time);
    status_t findSampleTimeAndDuration(uint32_t sampleIndex, uint32_t *time, uint32_t *duration);

    SampleIterator(const SampleIterator &);
    SampleIterator &operator=(const SampleIterator &);
+2 −1
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ public:
            off64_t *offset,
            size_t *size,
            uint32_t *compositionTime,
            bool *isSyncSample = NULL);
            bool *isSyncSample = NULL,
            uint32_t *sampleDuration = NULL);

    enum {
        kFlagBefore,