Merge "Make NuMediaExtractor behave more like mediaextractor" into qt-dev
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 2fee637..680d426 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -430,18 +430,6 @@
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 @@
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 @@
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 @@
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;
}
diff --git a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
index f34f9b6..4307110 100644
--- a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
@@ -149,7 +149,6 @@
MediaSource::ReadOptions::SeekMode mode =
MediaSource::ReadOptions::SEEK_CLOSEST_SYNC);
- void releaseOneSample(TrackInfo *info);
void releaseTrackSamples(TrackInfo *info);
void releaseAllTrackSamples();