Merge "Set duration to audio track format in MPEG2TSExtractor"
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.cpp b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
index 9191386..24e623b 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
@@ -269,9 +269,6 @@
off64_t size;
if (mDataSource->getSize(&size) == OK && (haveAudio || haveVideo)) {
- sp<AnotherPacketSource> impl = haveVideo
- ? mParser->getSource(ATSParser::VIDEO)
- : mParser->getSource(ATSParser::AUDIO);
size_t prevSyncSize = 1;
int64_t durationUs = -1;
List<int64_t> durations;
@@ -305,17 +302,32 @@
}
}
}
- status_t err;
- int64_t bufferedDurationUs;
- bufferedDurationUs = impl->getBufferedDurationUs(&err);
- if (err == ERROR_END_OF_STREAM) {
- durationUs = bufferedDurationUs;
+
+ bool found = false;
+ for (int i = 0; i < ATSParser::NUM_SOURCE_TYPES; ++i) {
+ ATSParser::SourceType type = static_cast<ATSParser::SourceType>(i);
+ sp<AnotherPacketSource> impl = mParser->getSource(type);
+ if (impl == NULL) {
+ continue;
+ }
+
+ int64_t trackDurationUs = durationUs;
+
+ status_t err;
+ int64_t bufferedDurationUs = impl->getBufferedDurationUs(&err);
+ if (err == ERROR_END_OF_STREAM) {
+ trackDurationUs = bufferedDurationUs;
+ }
+ if (trackDurationUs > 0) {
+ ALOGV("[SourceType%d] durationUs=%" PRId64 "", type, trackDurationUs);
+ const sp<MetaData> meta = impl->getFormat();
+ meta->setInt64(kKeyDuration, trackDurationUs);
+ impl->setFormat(meta);
+
+ found = true;
+ }
}
- if (durationUs > 0) {
- const sp<MetaData> meta = impl->getFormat();
- meta->setInt64(kKeyDuration, durationUs);
- impl->setFormat(meta);
- } else {
+ if (!found) {
estimateDurationsFromTimesUsAtEnd();
}
}