summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-11-16 14:35:33 -0800
committerSteve Kondik <steve@cyngn.com>2015-11-16 19:27:41 -0800
commit842f7df253913a11b6dbc705b83299c437edd4e3 (patch)
tree6cb7da0af2b2b7254d8e43c454cb881dfa15f206 /media/libmediaplayerservice
parent8ab5ff0b3709976cde09362e7444d78d0a981dd3 (diff)
parent60282213a1194ee8753ac53b97fc7f7e36373e17 (diff)
downloadframeworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.zip
frameworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.tar.gz
frameworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.tar.bz2
Merge branch 'LA.BF64.1.2.2_rb4.7' of git://codeaurora.org/platform/frameworks/av into cm-13.0
Change-Id: Ia41df61c3ccfeb809572b63a4b1a8ca6bd85dfb2
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/GenericSource.cpp27
-rw-r--r--media/libmediaplayerservice/nuplayer/GenericSource.h2
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp8
3 files changed, 24 insertions, 13 deletions
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index 7be4d23..c0355d7 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;
}
@@ -155,7 +156,12 @@ status_t NuPlayer::GenericSource::initFromDataSource() {
return UNKNOWN_ERROR;
}
} else if (mIsStreaming) {
- if (!mDataSource->sniff(&mimeType, &confidence, &dummy)) {
+ sp<DataSource> dataSource;
+ {
+ Mutex::Autolock _l(mSourceLock);
+ dataSource = mDataSource;
+ }
+ if (!dataSource->sniff(&mimeType, &confidence, &dummy)) {
return UNKNOWN_ERROR;
}
isWidevineStreaming = !strcasecmp(
@@ -175,7 +181,7 @@ status_t NuPlayer::GenericSource::initFromDataSource() {
} else {
extractor = MediaExtractor::Create(mDataSource,
mimeType.isEmpty() ? NULL : mimeType.string(),
- mIsStreaming ? 0 : AVNuUtils::get()->getUseSetBuffersFlag());
+ mIsStreaming ? 0 : AVNuUtils::get()->getFlags());
}
if (extractor == NULL) {
@@ -380,6 +386,7 @@ void NuPlayer::GenericSource::onPrepareAsync() {
}
}
+ Mutex::Autolock _l(mSourceLock);
mDataSource = DataSource::CreateFromURI(
mHTTPService, uri, &mUriHeaders, &contentType,
static_cast<HTTPBase *>(mHttpSource.get()),
@@ -387,6 +394,7 @@ void NuPlayer::GenericSource::onPrepareAsync() {
} else {
mIsWidevine = false;
+ Mutex::Autolock _l(mSourceLock);
mDataSource = new FileSource(mFd, mOffset, mLength);
mFd = -1;
}
@@ -478,15 +486,10 @@ void NuPlayer::GenericSource::finishPrepareAsync() {
void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) {
if (err != OK) {
{
- sp<DataSource> dataSource = mDataSource;
- sp<NuCachedSource2> cachedSource = mCachedSource;
- sp<DataSource> httpSource = mHttpSource;
- {
- Mutex::Autolock _l(mDisconnectLock);
- mDataSource.clear();
- mCachedSource.clear();
- mHttpSource.clear();
- }
+ Mutex::Autolock _l(mSourceLock);
+ mDataSource.clear();
+ mCachedSource.clear();
+ mHttpSource.clear();
}
mBitrate = -1;
@@ -542,7 +545,7 @@ void NuPlayer::GenericSource::resume() {
void NuPlayer::GenericSource::disconnect() {
sp<DataSource> dataSource, httpSource;
{
- Mutex::Autolock _l(mDisconnectLock);
+ Mutex::Autolock _l(mSourceLock);
dataSource = mDataSource;
httpSource = mHttpSource;
}
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.h b/media/libmediaplayerservice/nuplayer/GenericSource.h
index bdcf706..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;
@@ -154,7 +155,6 @@ protected:
int32_t mPrevBufferPercentage;
mutable Mutex mReadBufferLock;
- mutable Mutex mDisconnectLock;
sp<ALooper> mLooper;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
index 9ca8c9f..98eff88 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
@@ -606,6 +606,14 @@ bool NuPlayer::Decoder::handleAnOutputBuffer(
reply->setSize("buffer-ix", index);
reply->setInt32("generation", mBufferGeneration);
+ if ((flags & MediaCodec::BUFFER_FLAG_DATACORRUPT) &&
+ AVNuUtils::get()->dropCorruptFrame()) {
+ ALOGV("[%s] dropping corrupt buffer at time %lld as requested.",
+ mComponentName.c_str(), (long long)timeUs);
+ reply->post();
+ return true;
+ }
+
if (eos) {
ALOGI("[%s] saw output EOS", mIsAudio ? "audio" : "video");