diff options
author | Robert Shih <robertshih@google.com> | 2014-04-23 17:03:10 -0700 |
---|---|---|
committer | Robert Shih <robertshih@google.com> | 2014-04-25 17:37:11 -0700 |
commit | 1da7ee098ac97d2fdd2cff16a2bfa51fd1889ad8 (patch) | |
tree | 4ca6ac5e9556ab239d4ad576ed8d14daae81f40f /media/libstagefright | |
parent | ce65a05eddc8a39d9805d1e1eee0292725df1f1c (diff) | |
download | frameworks_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.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 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; |