summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2014-04-23 17:03:10 -0700
committerRobert Shih <robertshih@google.com>2014-04-25 17:37:11 -0700
commit1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8 (patch)
tree4ca6ac5e9556ab239d4ad576ed8d14daae81f40f /media/libstagefright
parentce65a05eddc8a39d9805d1e1eee0292725df1f1c (diff)
downloadframeworks_av-1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8.zip
frameworks_av-1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8.tar.gz
frameworks_av-1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8.tar.bz2
PlaylistFetcher: start queueing AUs after the 1st IDR nalu
Bug: 14159556 Change-Id: I4fc16dda9357e1251d2909571a79215d13d0104b
Diffstat (limited to 'media/libstagefright')
-rw-r--r--media/libstagefright/httplive/PlaylistFetcher.cpp19
-rw-r--r--media/libstagefright/httplive/PlaylistFetcher.h2
2 files changed, 21 insertions, 0 deletions
diff --git a/media/libstagefright/httplive/PlaylistFetcher.cpp b/media/libstagefright/httplive/PlaylistFetcher.cpp
index 5011bc1..07a3ed0 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.cpp
+++ b/media/libstagefright/httplive/PlaylistFetcher.cpp
@@ -69,6 +69,7 @@ PlaylistFetcher::PlaylistFetcher(
mNumRetries(0),
mStartup(true),
mPrepared(false),
+ mSkipToFirstIDRAfterConnect(false),
mNextPTSTimeUs(-1ll),
mMonitorQueueGeneration(0),
mRefreshState(INITIAL_MINIMUM_RELOAD_DELAY),
@@ -1096,12 +1097,30 @@ status_t PlaylistFetcher::extractAndQueueAccessUnitsFromTs(const sp<ABuffer> &bu
continue;
}
+ if (stream == LiveSession::STREAMTYPE_VIDEO && mVideoMime.empty()) {
+ const char *mime;
+ if (source->getFormat()->findCString(kKeyMIMEType, &mime)) {
+ mVideoMime.setTo(mime);
+ if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) {
+ mSkipToFirstIDRAfterConnect = true;
+ }
+ }
+ }
+
int64_t timeUs;
sp<ABuffer> accessUnit;
status_t finalResult;
while (source->hasBufferAvailable(&finalResult)
&& source->dequeueAccessUnit(&accessUnit) == OK) {
+ if (stream == LiveSession::STREAMTYPE_VIDEO && mSkipToFirstIDRAfterConnect) {
+ if (!IsIDR(accessUnit)) {
+ continue;
+ } else {
+ mSkipToFirstIDRAfterConnect = false;
+ }
+ }
+
CHECK(accessUnit->meta()->findInt64("timeUs", &timeUs));
if (mMinStartTimeUs > 0) {
if (timeUs < mMinStartTimeUs) {
diff --git a/media/libstagefright/httplive/PlaylistFetcher.h b/media/libstagefright/httplive/PlaylistFetcher.h
index 7e21523..e0ed11d 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.h
+++ b/media/libstagefright/httplive/PlaylistFetcher.h
@@ -98,6 +98,7 @@ private:
sp<LiveSession> mSession;
AString mURI;
+ AString mVideoMime;
uint32_t mStreamTypeMask;
int64_t mStartTimeUs;
@@ -115,6 +116,7 @@ private:
int32_t mNumRetries;
bool mStartup;
bool mPrepared;
+ bool mSkipToFirstIDRAfterConnect;
int64_t mNextPTSTimeUs;
int32_t mMonitorQueueGeneration;