summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2015-10-29 14:01:58 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-10-29 14:01:58 -0700
commitbedd71770a410b5e707bbca24e4e04eba62875be (patch)
treea878ff1cebc2931724d6a44e32510d47608bfe4b /media/libmediaplayerservice
parent25a07d3f574755b8ee265fd3970d9d7b647ed0fd (diff)
parentbbb9b1da50edbbed193b342be19b62e232254f27 (diff)
downloadframeworks_av-bedd71770a410b5e707bbca24e4e04eba62875be.zip
frameworks_av-bedd71770a410b5e707bbca24e4e04eba62875be.tar.gz
frameworks_av-bedd71770a410b5e707bbca24e4e04eba62875be.tar.bz2
Merge "GenericSource: Synchronize access to dataSource"
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/GenericSource.cpp22
-rw-r--r--media/libmediaplayerservice/nuplayer/GenericSource.h1
2 files changed, 18 insertions, 5 deletions
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index efdf096..a86dce1 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -128,6 +128,7 @@ status_t NuPlayer::GenericSource::setDataSource(
status_t NuPlayer::GenericSource::setDataSource(const sp<DataSource>& source) {
resetDataSource();
+ Mutex::Autolock _l(mSourceLock);
mDataSource = source;
return OK;
}
@@ -380,6 +381,7 @@ void NuPlayer::GenericSource::onPrepareAsync() {
}
}
+ Mutex::Autolock _l(mSourceLock);
mDataSource = DataSource::CreateFromURI(
mHTTPService, uri, &mUriHeaders, &contentType,
static_cast<HTTPBase *>(mHttpSource.get()),
@@ -387,6 +389,7 @@ void NuPlayer::GenericSource::onPrepareAsync() {
} else {
mIsWidevine = false;
+ Mutex::Autolock _l(mSourceLock);
mDataSource = new FileSource(mFd, mOffset, mLength);
mFd = -1;
}
@@ -477,6 +480,7 @@ void NuPlayer::GenericSource::finishPrepareAsync() {
void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) {
if (err != OK) {
+ Mutex::Autolock _l(mSourceLock);
mDataSource.clear();
mCachedSource.clear();
mHttpSource.clear();
@@ -532,13 +536,21 @@ void NuPlayer::GenericSource::resume() {
}
void NuPlayer::GenericSource::disconnect() {
- if (mDataSource != NULL) {
+
+ sp<DataSource> dataSource;
+ sp<DataSource> httpSource;
+ {
+ Mutex::Autolock _l(mSourceLock);
+ dataSource = mDataSource;
+ httpSource = mHttpSource;
+ }
+ if (dataSource != NULL) {
// disconnect data source
- if (mDataSource->flags() & DataSource::kIsCachingDataSource) {
- static_cast<NuCachedSource2 *>(mDataSource.get())->disconnect();
+ if (dataSource->flags() & DataSource::kIsCachingDataSource) {
+ static_cast<NuCachedSource2 *>(dataSource.get())->disconnect();
}
- } else if (mHttpSource != NULL) {
- static_cast<HTTPBase *>(mHttpSource.get())->disconnect();
+ } else if (httpSource != NULL) {
+ static_cast<HTTPBase *>(httpSource.get())->disconnect();
}
}
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.h b/media/libmediaplayerservice/nuplayer/GenericSource.h
index ebc1fdc..c1d6e3e 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.h
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.h
@@ -137,6 +137,7 @@ protected:
int64_t mOffset;
int64_t mLength;
+ Mutex mSourceLock;
sp<DataSource> mDataSource;
sp<NuCachedSource2> mCachedSource;
sp<DataSource> mHttpSource;