diff options
author | Robert Shih <robertshih@google.com> | 2014-10-01 19:41:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-10-01 19:41:34 +0000 |
commit | 3af67d03bbc30c368821caf8b74ae7fb91ee7db7 (patch) | |
tree | 6f71a15d1a29af4964d8b71d4d120ed97f0778c3 /media/libmediaplayerservice | |
parent | 1f4b162e0bee6bcb0c9de464087db286270f5525 (diff) | |
parent | 360d6d0924f99b82ebacb5cfb6f7bca95e11b4ee (diff) | |
download | frameworks_av-3af67d03bbc30c368821caf8b74ae7fb91ee7db7.zip frameworks_av-3af67d03bbc30c368821caf8b74ae7fb91ee7db7.tar.gz frameworks_av-3af67d03bbc30c368821caf8b74ae7fb91ee7db7.tar.bz2 |
Merge "GenericSource: support disconnect before NuCachedSource2 is created" into lmp-dev
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/GenericSource.cpp | 22 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/GenericSource.h | 1 |
2 files changed, 21 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp index f84decd..016a764 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp +++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp @@ -36,6 +36,7 @@ #include "../../libstagefright/include/DRMExtractor.h" #include "../../libstagefright/include/NuCachedSource2.h" #include "../../libstagefright/include/WVMExtractor.h" +#include "../../libstagefright/include/HTTPBase.h" namespace android { @@ -64,6 +65,7 @@ void NuPlayer::GenericSource::resetDataSource() { mAudioTimeUs = 0; mVideoTimeUs = 0; mHTTPService.clear(); + mHttpSource.clear(); mUri.clear(); mUriHeaders.clear(); mFd = -1; @@ -284,10 +286,23 @@ void NuPlayer::GenericSource::onPrepareAsync() { // delayed data source creation if (mDataSource == NULL) { if (!mUri.empty()) { - mIsWidevine = !strncasecmp(mUri.c_str(), "widevine://", 11); + const char* uri = mUri.c_str(); + mIsWidevine = !strncasecmp(uri, "widevine://", 11); + + if (!strncasecmp("http://", uri, 7) + || !strncasecmp("https://", uri, 8) + || mIsWidevine) { + mHttpSource = DataSource::CreateMediaHTTP(mHTTPService); + if (mHttpSource == NULL) { + ALOGE("Failed to create http source!"); + notifyPreparedAndCleanup(UNKNOWN_ERROR); + return; + } + } mDataSource = DataSource::CreateFromURI( - mHTTPService, mUri.c_str(), &mUriHeaders, &mContentType); + mHTTPService, uri, &mUriHeaders, &mContentType, + static_cast<HTTPBase *>(mHttpSource.get())); } else { // set to false first, if the extractor // comes back as secure, set it to true then. @@ -360,6 +375,7 @@ void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) { mSniffedMIME = ""; mDataSource.clear(); mCachedSource.clear(); + mHttpSource.clear(); cancelPollBuffering(); } @@ -479,6 +495,8 @@ void NuPlayer::GenericSource::disconnect() { if (mDataSource->flags() & DataSource::kIsCachingDataSource) { static_cast<NuCachedSource2 *>(mDataSource.get())->disconnect(); } + } else if (mHttpSource != NULL) { + static_cast<HTTPBase *>(mHttpSource.get())->disconnect(); } } diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.h b/media/libmediaplayerservice/nuplayer/GenericSource.h index 24bb6af..5ed4d52 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.h +++ b/media/libmediaplayerservice/nuplayer/GenericSource.h @@ -126,6 +126,7 @@ private: sp<DataSource> mDataSource; sp<NuCachedSource2> mCachedSource; + sp<DataSource> mHttpSource; sp<WVMExtractor> mWVMExtractor; sp<MetaData> mFileMeta; DrmManagerClient *mDrmManagerClient; |