summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright')
-rw-r--r--media/libstagefright/httplive/LiveSession.cpp18
-rw-r--r--media/libstagefright/include/LiveSession.h2
-rw-r--r--media/libstagefright/mpeg2ts/ATSParser.cpp12
-rw-r--r--media/libstagefright/mpeg2ts/ATSParser.h2
4 files changed, 30 insertions, 4 deletions
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index 5b1f14d..51ab7a1 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -395,10 +395,17 @@ void LiveSession::onDownloadNext() {
int64_t index = seekTimeSecs / targetDuration;
if (index >= 0 && index < mPlaylist->size()) {
- mSeqNumber = firstSeqNumberInPlaylist + index;
- mDataSource->reset();
+ int32_t newSeqNumber = firstSeqNumberInPlaylist + index;
- explicitDiscontinuity = true;
+ if (newSeqNumber != mSeqNumber) {
+ LOGI("seeking to seq no %d", newSeqNumber);
+
+ mSeqNumber = newSeqNumber;
+
+ mDataSource->reset();
+
+ explicitDiscontinuity = true;
+ }
}
}
@@ -463,6 +470,8 @@ void LiveSession::onDownloadNext() {
return;
}
+ CHECK(buffer != NULL);
+
CHECK_EQ((status_t)OK,
decryptBuffer(mSeqNumber - firstSeqNumberInPlaylist, buffer));
@@ -482,6 +491,9 @@ void LiveSession::onDownloadNext() {
if (explicitDiscontinuity || bandwidthChanged) {
// Signal discontinuity.
+ LOGI("queueing discontinuity (explicit=%d, bandwidthChanged=%d)",
+ explicitDiscontinuity, bandwidthChanged);
+
sp<ABuffer> tmp = new ABuffer(188);
memset(tmp->data(), 0, tmp->size());
tmp->data()[1] = bandwidthChanged;
diff --git a/media/libstagefright/include/LiveSession.h b/media/libstagefright/include/LiveSession.h
index 3873d5d..41f5ad0 100644
--- a/media/libstagefright/include/LiveSession.h
+++ b/media/libstagefright/include/LiveSession.h
@@ -49,7 +49,7 @@ protected:
private:
enum {
- kMaxNumQueuedFragments = 2,
+ kMaxNumQueuedFragments = 3,
kMaxNumRetries = 5,
};
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index 7c81ffd..84a3860 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -56,6 +56,10 @@ struct ATSParser::Program : public RefBase {
int64_t convertPTSToTimestamp(uint64_t PTS);
+ bool PTSTimeDeltaEstablished() const {
+ return mFirstPTSValid;
+ }
+
private:
ATSParser *mParser;
unsigned mProgramMapPID;
@@ -734,4 +738,12 @@ sp<MediaSource> ATSParser::getSource(SourceType type) {
return NULL;
}
+bool ATSParser::PTSTimeDeltaEstablished() {
+ if (mPrograms.isEmpty()) {
+ return false;
+ }
+
+ return mPrograms.editItemAt(0)->PTSTimeDeltaEstablished();
+}
+
} // namespace android
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index ef78c77..fe31981 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -50,6 +50,8 @@ struct ATSParser : public RefBase {
};
sp<MediaSource> getSource(SourceType type);
+ bool PTSTimeDeltaEstablished();
+
protected:
virtual ~ATSParser();