diff options
author | Robert Shih <robertshih@google.com> | 2014-05-09 19:07:13 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-05-09 19:07:14 +0000 |
commit | 70c2fd3dc648b512ea088ee9de5e505c626fd39c (patch) | |
tree | 87966e9e8f612576c35455e1c1c84770bba17f08 /media/libstagefright | |
parent | 0c5b910e6eb2b9b2a622ccc0dd66e8fcae3eb28b (diff) | |
parent | 1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8 (diff) | |
download | frameworks_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.cpp | 19 | ||||
-rw-r--r-- | media/libstagefright/httplive/PlaylistFetcher.h | 2 |
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; |