ATSParser: dequeue pesStartOffset for every access unit.
Bug: 27297491
Change-Id: Id960693574679ccc8d3b54be37b0cadf104078bb
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index b863d67..844479e 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -701,6 +701,10 @@
}
mPayloadStarted = true;
+ // There should be at most 2 elements in |mPesStartOffsets|.
+ while (mPesStartOffsets.size() >= 2) {
+ mPesStartOffsets.erase(mPesStartOffsets.begin());
+ }
mPesStartOffsets.push_back(offset);
}
@@ -1104,15 +1108,20 @@
mSource->queueAccessUnit(accessUnit);
}
- if ((event != NULL) && !found && mQueue->getFormat() != NULL) {
+ // Every access unit has a pesStartOffset queued in |mPesStartOffsets|.
+ off64_t pesStartOffset = -1;
+ if (!mPesStartOffsets.empty()) {
+ pesStartOffset = *mPesStartOffsets.begin();
+ mPesStartOffsets.erase(mPesStartOffsets.begin());
+ }
+
+ if (pesStartOffset >= 0 && (event != NULL) && !found && mQueue->getFormat() != NULL) {
int32_t sync = 0;
if (accessUnit->meta()->findInt32("isSync", &sync) && sync) {
int64_t timeUs;
if (accessUnit->meta()->findInt64("timeUs", &timeUs)) {
found = true;
- off64_t pesStartOffset = *mPesStartOffsets.begin();
event->init(pesStartOffset, mSource, timeUs);
- mPesStartOffsets.erase(mPesStartOffsets.begin());
}
}
}