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

Commit 08d77228 authored by Marco Nelissen's avatar Marco Nelissen Committed by android-build-merger
Browse files

Merge "Make NuMediaExtractor behave more like mediaextractor" into qt-dev

am: acfd148d

Change-Id: Icbd533c592eae29207e6970fd18d60df2c39a984
parents 39d855af acfd148d
Loading
Loading
Loading
Loading
+20 −22
Original line number Diff line number Diff line
@@ -430,18 +430,6 @@ status_t NuMediaExtractor::unselectTrack(size_t index) {
    return OK;
}

void NuMediaExtractor::releaseOneSample(TrackInfo *info) {
    if (info == NULL || info->mSamples.empty()) {
        return;
    }

    auto it = info->mSamples.begin();
    if (it->mBuffer != NULL) {
        it->mBuffer->release();
    }
    info->mSamples.erase(it);
}

void NuMediaExtractor::releaseTrackSamples(TrackInfo *info) {
    if (info == NULL) {
        return;
@@ -472,7 +460,7 @@ ssize_t NuMediaExtractor::fetchAllTrackSamples(
        fetchTrackSamples(info, seekTimeUs, mode);

        status_t err = info->mFinalResult;
        if (err != OK && err != ERROR_END_OF_STREAM) {
        if (err != OK && err != ERROR_END_OF_STREAM && info->mSamples.empty()) {
            return err;
        }

@@ -527,14 +515,6 @@ void NuMediaExtractor::fetchTrackSamples(TrackInfo *info,
    info->mFinalResult = err;
    if (err != OK && err != ERROR_END_OF_STREAM) {
        ALOGW("read on track %zu failed with error %d", info->mTrackIndex, err);
        size_t count = mediaBuffers.size();
        for (size_t id = 0; id < count; ++id) {
            MediaBufferBase *mbuf = mediaBuffers[id];
            if (mbuf != NULL) {
                mbuf->release();
            }
        }
        return;
    }

    size_t count = mediaBuffers.size();
@@ -584,8 +564,26 @@ status_t NuMediaExtractor::advance() {

    TrackInfo *info = &mSelectedTracks.editItemAt(minIndex);

    releaseOneSample(info);
    if (info == NULL || info->mSamples.empty()) {
        return ERROR_END_OF_STREAM;
    }

    auto it = info->mSamples.begin();
    if (it->mBuffer != NULL) {
        it->mBuffer->release();
    }
    info->mSamples.erase(it);

    if (info->mSamples.empty()) {
        minIndex = fetchAllTrackSamples();
        if (minIndex < 0) {
            return ERROR_END_OF_STREAM;
        }
        info = &mSelectedTracks.editItemAt(minIndex);
        if (info == NULL || info->mSamples.empty()) {
            return ERROR_END_OF_STREAM;
        }
    }
    return OK;
}

+0 −1
Original line number Diff line number Diff line
@@ -149,7 +149,6 @@ private:
            MediaSource::ReadOptions::SeekMode mode =
                MediaSource::ReadOptions::SEEK_CLOSEST_SYNC);

    void releaseOneSample(TrackInfo *info);
    void releaseTrackSamples(TrackInfo *info);
    void releaseAllTrackSamples();