summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/mpeg2ts
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-05-17 14:18:50 -0700
committerAndreas Huber <andih@google.com>2012-05-17 14:18:50 -0700
commitbfd4d0d9fe0033abf3f55b94f30f6a58846a875e (patch)
tree9b8a16246cce7e86b6dcc4e5af147d264d4eb4b9 /media/libstagefright/mpeg2ts
parentcd28dc10d49c359566c69d48a29a6f0d3eefa6d9 (diff)
downloadframeworks_av-bfd4d0d9fe0033abf3f55b94f30f6a58846a875e.zip
frameworks_av-bfd4d0d9fe0033abf3f55b94f30f6a58846a875e.tar.gz
frameworks_av-bfd4d0d9fe0033abf3f55b94f30f6a58846a875e.tar.bz2
Buffer at least 2 secs worth of data at startup of after a seek before
resuming starting RTSP playback. Change-Id: I060c6c7fd627ab7ebd5c095ddcfdb4cc0f637aad related-to-bug: 6364126
Diffstat (limited to 'media/libstagefright/mpeg2ts')
-rw-r--r--media/libstagefright/mpeg2ts/AnotherPacketSource.cpp34
-rw-r--r--media/libstagefright/mpeg2ts/AnotherPacketSource.h4
2 files changed, 38 insertions, 0 deletions
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
index d708ba6..a605a05 100644
--- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
+++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
@@ -198,6 +198,40 @@ bool AnotherPacketSource::hasBufferAvailable(status_t *finalResult) {
return false;
}
+int64_t AnotherPacketSource::getBufferedDurationUs(status_t *finalResult) {
+ Mutex::Autolock autoLock(mLock);
+
+ *finalResult = mEOSResult;
+
+ if (mBuffers.empty()) {
+ return 0;
+ }
+
+ int64_t time1 = -1;
+ int64_t time2 = -1;
+
+ List<sp<ABuffer> >::iterator it = mBuffers.begin();
+ while (it != mBuffers.end()) {
+ const sp<ABuffer> &buffer = *it;
+
+ int64_t timeUs;
+ if (buffer->meta()->findInt64("timeUs", &timeUs)) {
+ if (time1 < 0) {
+ time1 = timeUs;
+ }
+
+ time2 = timeUs;
+ } else {
+ // This is a discontinuity, reset everything.
+ time1 = time2 = -1;
+ }
+
+ ++it;
+ }
+
+ return time2 - time1;
+}
+
status_t AnotherPacketSource::nextBufferTime(int64_t *timeUs) {
*timeUs = 0;
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.h b/media/libstagefright/mpeg2ts/AnotherPacketSource.h
index c99f7f2..d685b98 100644
--- a/media/libstagefright/mpeg2ts/AnotherPacketSource.h
+++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.h
@@ -43,6 +43,10 @@ struct AnotherPacketSource : public MediaSource {
bool hasBufferAvailable(status_t *finalResult);
+ // Returns the difference between the last and the first queued
+ // presentation timestamps since the last discontinuity (if any).
+ int64_t getBufferedDurationUs(status_t *finalResult);
+
status_t nextBufferTime(int64_t *timeUs);
void queueAccessUnit(const sp<ABuffer> &buffer);