summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2014-05-09 19:07:13 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-05-09 19:07:14 +0000
commit70c2fd3dc648b512ea088ee9de5e505c626fd39c (patch)
tree87966e9e8f612576c35455e1c1c84770bba17f08 /media/libstagefright
parent0c5b910e6eb2b9b2a622ccc0dd66e8fcae3eb28b (diff)
parent1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8 (diff)
downloadframeworks_av-70c2fd3dc648b512ea088ee9de5e505c626fd39c.zip
frameworks_av-70c2fd3dc648b512ea088ee9de5e505c626fd39c.tar.gz
frameworks_av-70c2fd3dc648b512ea088ee9de5e505c626fd39c.tar.bz2
Merge "PlaylistFetcher: start queueing AUs after the 1st IDR nalu"
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 6160009..326d85b 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),
@@ -1097,12 +1098,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 6af82c4..e4fdbff 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.h
+++ b/media/libstagefright/httplive/PlaylistFetcher.h
@@ -99,6 +99,7 @@ private:
sp<LiveSession> mSession;
AString mURI;
+ AString mVideoMime;
uint32_t mStreamTypeMask;
int64_t mStartTimeUs;
@@ -116,6 +117,7 @@ private:
int32_t mNumRetries;
bool mStartup;
bool mPrepared;
+ bool mSkipToFirstIDRAfterConnect;
int64_t mNextPTSTimeUs;
int32_t mMonitorQueueGeneration;