From 68845c14ebf2c7282800b1abffde38d8e9a57aab Mon Sep 17 00:00:00 2001 From: Ronghua Wu Date: Tue, 21 Jul 2015 09:50:48 -0700 Subject: libmediaplayerservice: propagate caller pid to MediaCodec. Bug: 22630317 Change-Id: I0337d74f4ef04bf96f2de83f33d98d0d7da47c12 --- media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 7 ++++--- media/libmediaplayerservice/nuplayer/NuPlayer.h | 3 ++- media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 7 +++++-- media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h | 2 ++ media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp | 4 ++-- media/libmediaplayerservice/nuplayer/NuPlayerDriver.h | 2 +- 6 files changed, 16 insertions(+), 9 deletions(-) (limited to 'media/libmediaplayerservice/nuplayer') diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 2fdc196..8e3e460 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -166,8 +166,9 @@ private: //////////////////////////////////////////////////////////////////////////////// -NuPlayer::NuPlayer() +NuPlayer::NuPlayer(pid_t pid) : mUIDValid(false), + mPID(pid), mSourceFlags(0), mOffloadAudio(false), mAudioDecoderGeneration(0), @@ -1525,7 +1526,7 @@ status_t NuPlayer::instantiateDecoder(bool audio, sp *decoder) { format->setInt32("has-video", hasVideo); *decoder = new DecoderPassThrough(notify, mSource, mRenderer); } else { - *decoder = new Decoder(notify, mSource, mRenderer); + *decoder = new Decoder(notify, mSource, mPID, mRenderer); } } else { sp notify = new AMessage(kWhatVideoNotify, this); @@ -1533,7 +1534,7 @@ status_t NuPlayer::instantiateDecoder(bool audio, sp *decoder) { notify->setInt32("generation", mVideoDecoderGeneration); *decoder = new Decoder( - notify, mSource, mRenderer, mSurface, mCCDecoder); + notify, mSource, mPID, mRenderer, mSurface, mCCDecoder); // enable FRC if high-quality AV sync is requested, even if not // directly queuing to display, as this will even improve textureview diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h index 9f4c462..9456d5d 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h @@ -33,7 +33,7 @@ class MetaData; struct NuPlayerDriver; struct NuPlayer : public AHandler { - NuPlayer(); + NuPlayer(pid_t pid); void setUID(uid_t uid); @@ -139,6 +139,7 @@ private: wp mDriver; bool mUIDValid; uid_t mUID; + pid_t mPID; sp mSource; uint32_t mSourceFlags; sp mSurface; diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index dcc28c4..3646828 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -48,6 +48,7 @@ static inline bool getAudioDeepBufferSetting() { NuPlayer::Decoder::Decoder( const sp ¬ify, const sp &source, + pid_t pid, const sp &renderer, const sp &surface, const sp &ccDecoder) @@ -56,6 +57,7 @@ NuPlayer::Decoder::Decoder( mSource(source), mRenderer(renderer), mCCDecoder(ccDecoder), + mPid(pid), mSkipRenderingUntilMediaTimeUs(-1ll), mNumFramesTotal(0ll), mNumInputFramesDropped(0ll), @@ -249,7 +251,8 @@ void NuPlayer::Decoder::onConfigure(const sp &format) { mComponentName.append(" decoder"); ALOGV("[%s] onConfigure (surface=%p)", mComponentName.c_str(), mSurface.get()); - mCodec = MediaCodec::CreateByType(mCodecLooper, mime.c_str(), false /* encoder */); + mCodec = MediaCodec::CreateByType( + mCodecLooper, mime.c_str(), false /* encoder */, NULL /* err */, mPid); int32_t secure = 0; if (format->findInt32("secure", &secure) && secure != 0) { if (mCodec != NULL) { @@ -258,7 +261,7 @@ void NuPlayer::Decoder::onConfigure(const sp &format) { mCodec->release(); ALOGI("[%s] creating", mComponentName.c_str()); mCodec = MediaCodec::CreateByComponentName( - mCodecLooper, mComponentName.c_str()); + mCodecLooper, mComponentName.c_str(), NULL /* err */, mPid); } } if (mCodec == NULL) { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h index ed0be62..eeb4af4 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h @@ -26,6 +26,7 @@ namespace android { struct NuPlayer::Decoder : public DecoderBase { Decoder(const sp ¬ify, const sp &source, + pid_t pid, const sp &renderer = NULL, const sp &surface = NULL, const sp &ccDecoder = NULL); @@ -77,6 +78,7 @@ private: Vector mMediaBuffers; Vector mDequeuedInputBuffers; + const pid_t mPid; int64_t mSkipRenderingUntilMediaTimeUs; int64_t mNumFramesTotal; int64_t mNumInputFramesDropped; diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp index 3882dcd..7370224 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp @@ -33,7 +33,7 @@ namespace android { -NuPlayerDriver::NuPlayerDriver() +NuPlayerDriver::NuPlayerDriver(pid_t pid) : mState(STATE_IDLE), mIsAsyncPrepare(false), mAsyncResult(UNKNOWN_ERROR), @@ -55,7 +55,7 @@ NuPlayerDriver::NuPlayerDriver() true, /* canCallJava */ PRIORITY_AUDIO); - mPlayer = new NuPlayer; + mPlayer = new NuPlayer(pid); mLooper->registerHandler(mPlayer); mPlayer->setDriver(this); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h index 9da7fc1..d009fd7 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h @@ -24,7 +24,7 @@ struct ALooper; struct NuPlayer; struct NuPlayerDriver : public MediaPlayerInterface { - NuPlayerDriver(); + NuPlayerDriver(pid_t pid); virtual status_t initCheck(); -- cgit v1.1