summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/httplive/M3UParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/httplive/M3UParser.cpp')
-rw-r--r--media/libstagefright/httplive/M3UParser.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp
index ef9145c..ff2bb27 100644
--- a/media/libstagefright/httplive/M3UParser.cpp
+++ b/media/libstagefright/httplive/M3UParser.cpp
@@ -250,6 +250,9 @@ M3UParser::M3UParser(
mIsVariantPlaylist(false),
mIsComplete(false),
mIsEvent(false),
+ mFirstSeqNumber(-1),
+ mLastSeqNumber(-1),
+ mTargetDurationUs(-1ll),
mDiscontinuitySeq(0),
mDiscontinuityCount(0),
mSelectedIndex(-1) {
@@ -283,6 +286,19 @@ size_t M3UParser::getDiscontinuitySeq() const {
return mDiscontinuitySeq;
}
+int64_t M3UParser::getTargetDuration() const {
+ return mTargetDurationUs;
+}
+
+int32_t M3UParser::getFirstSeqNumber() const {
+ return mFirstSeqNumber;
+}
+
+void M3UParser::getSeqNumberRange(int32_t *firstSeq, int32_t *lastSeq) const {
+ *firstSeq = mFirstSeqNumber;
+ *lastSeq = mLastSeqNumber;
+}
+
sp<AMessage> M3UParser::meta() {
return mMeta;
}
@@ -664,11 +680,22 @@ status_t M3UParser::parse(const void *_data, size_t size) {
}
// error checking of all fields that's required to appear once
- // (currently only checking "target-duration")
- int32_t targetDurationSecs;
- if (!mIsVariantPlaylist && (mMeta == NULL || !mMeta->findInt32(
- "target-duration", &targetDurationSecs))) {
- return ERROR_MALFORMED;
+ // (currently only checking "target-duration"), and
+ // initialization of playlist properties (eg. mTargetDurationUs)
+ if (!mIsVariantPlaylist) {
+ int32_t targetDurationSecs;
+ if (mMeta == NULL || !mMeta->findInt32(
+ "target-duration", &targetDurationSecs)) {
+ ALOGE("Media playlist missing #EXT-X-TARGETDURATION");
+ return ERROR_MALFORMED;
+ }
+ mTargetDurationUs = targetDurationSecs * 1000000ll;
+
+ mFirstSeqNumber = 0;
+ if (mMeta != NULL) {
+ mMeta->findInt32("media-sequence", &mFirstSeqNumber);
+ }
+ mLastSeqNumber = mFirstSeqNumber + mItems.size() - 1;
}
return OK;