Loading include/media/MediaPlayerInterface.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,10 @@ public: virtual status_t initCheck() = 0; virtual status_t initCheck() = 0; virtual bool hardwareOutput() = 0; virtual bool hardwareOutput() = 0; virtual status_t setUID(uid_t uid) { return INVALID_OPERATION; } virtual status_t setDataSource( virtual status_t setDataSource( const char *url, const char *url, const KeyedVector<String8, String8> *headers = NULL) = 0; const KeyedVector<String8, String8> *headers = NULL) = 0; Loading media/libmediaplayerservice/MediaPlayerService.cpp +22 −5 Original line number Original line Diff line number Diff line Loading @@ -250,7 +250,11 @@ sp<IMediaPlayer> MediaPlayerService::create( const KeyedVector<String8, String8> *headers, int audioSessionId) const KeyedVector<String8, String8> *headers, int audioSessionId) { { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, url=%s, connId=%d, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, url=%s, connId=%d, audioSessionId=%d", connId, pid, url, connId, audioSessionId); connId, pid, url, connId, audioSessionId); if (NO_ERROR != c->setDataSource(url, headers)) if (NO_ERROR != c->setDataSource(url, headers)) Loading @@ -268,7 +272,11 @@ sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClie int fd, int64_t offset, int64_t length, int audioSessionId) int fd, int64_t offset, int64_t length, int audioSessionId) { { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld, audioSessionId=%d", connId, pid, fd, offset, length, audioSessionId); connId, pid, fd, offset, length, audioSessionId); if (NO_ERROR != c->setDataSource(fd, offset, length)) { if (NO_ERROR != c->setDataSource(fd, offset, length)) { Loading @@ -286,7 +294,10 @@ sp<IMediaPlayer> MediaPlayerService::create( pid_t pid, const sp<IMediaPlayerClient> &client, pid_t pid, const sp<IMediaPlayerClient> &client, const sp<IStreamSource> &source, int audioSessionId) { const sp<IStreamSource> &source, int audioSessionId) { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, audioSessionId=%d", connId, pid, audioSessionId); connId, pid, audioSessionId); Loading Loading @@ -496,8 +507,10 @@ void MediaPlayerService::removeClient(wp<Client> client) mClients.remove(client); mClients.remove(client); } } MediaPlayerService::Client::Client(const sp<MediaPlayerService>& service, pid_t pid, MediaPlayerService::Client::Client( int32_t connId, const sp<IMediaPlayerClient>& client, int audioSessionId) const sp<MediaPlayerService>& service, pid_t pid, int32_t connId, const sp<IMediaPlayerClient>& client, int audioSessionId, uid_t uid) { { LOGV("Client(%d) constructor", connId); LOGV("Client(%d) constructor", connId); mPid = pid; mPid = pid; Loading @@ -507,6 +520,7 @@ MediaPlayerService::Client::Client(const sp<MediaPlayerService>& service, pid_t mLoop = false; mLoop = false; mStatus = NO_INIT; mStatus = NO_INIT; mAudioSessionId = audioSessionId; mAudioSessionId = audioSessionId; mUID = uid; #if CALLBACK_ANTAGONIZER #if CALLBACK_ANTAGONIZER LOGD("create Antagonizer"); LOGD("create Antagonizer"); Loading Loading @@ -671,6 +685,9 @@ sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerT if (p == NULL) { if (p == NULL) { p = android::createPlayer(playerType, this, notify); p = android::createPlayer(playerType, this, notify); } } p->setUID(mUID); return p; return p; } } Loading media/libmediaplayerservice/MediaPlayerService.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -306,7 +306,8 @@ private: pid_t pid, pid_t pid, int32_t connId, int32_t connId, const sp<IMediaPlayerClient>& client, const sp<IMediaPlayerClient>& client, int audioSessionId); int audioSessionId, uid_t uid); Client(); Client(); virtual ~Client(); virtual ~Client(); Loading Loading @@ -336,6 +337,7 @@ private: bool mLoop; bool mLoop; int32_t mConnId; int32_t mConnId; int mAudioSessionId; int mAudioSessionId; uid_t mUID; // Metadata filters. // Metadata filters. media::Metadata::Filter mMetadataAllow; // protected by mLock media::Metadata::Filter mMetadataAllow; // protected by mLock Loading media/libmediaplayerservice/StagefrightPlayer.cpp +6 −0 Original line number Original line Diff line number Diff line Loading @@ -47,6 +47,12 @@ status_t StagefrightPlayer::initCheck() { return OK; return OK; } } status_t StagefrightPlayer::setUID(uid_t uid) { mPlayer->setUID(uid); return OK; } status_t StagefrightPlayer::setDataSource( status_t StagefrightPlayer::setDataSource( const char *url, const KeyedVector<String8, String8> *headers) { const char *url, const KeyedVector<String8, String8> *headers) { return mPlayer->setDataSource(url, headers); return mPlayer->setDataSource(url, headers); Loading media/libmediaplayerservice/StagefrightPlayer.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ public: virtual status_t initCheck(); virtual status_t initCheck(); virtual status_t setUID(uid_t uid); virtual status_t setDataSource( virtual status_t setDataSource( const char *url, const KeyedVector<String8, String8> *headers); const char *url, const KeyedVector<String8, String8> *headers); Loading Loading
include/media/MediaPlayerInterface.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,10 @@ public: virtual status_t initCheck() = 0; virtual status_t initCheck() = 0; virtual bool hardwareOutput() = 0; virtual bool hardwareOutput() = 0; virtual status_t setUID(uid_t uid) { return INVALID_OPERATION; } virtual status_t setDataSource( virtual status_t setDataSource( const char *url, const char *url, const KeyedVector<String8, String8> *headers = NULL) = 0; const KeyedVector<String8, String8> *headers = NULL) = 0; Loading
media/libmediaplayerservice/MediaPlayerService.cpp +22 −5 Original line number Original line Diff line number Diff line Loading @@ -250,7 +250,11 @@ sp<IMediaPlayer> MediaPlayerService::create( const KeyedVector<String8, String8> *headers, int audioSessionId) const KeyedVector<String8, String8> *headers, int audioSessionId) { { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, url=%s, connId=%d, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, url=%s, connId=%d, audioSessionId=%d", connId, pid, url, connId, audioSessionId); connId, pid, url, connId, audioSessionId); if (NO_ERROR != c->setDataSource(url, headers)) if (NO_ERROR != c->setDataSource(url, headers)) Loading @@ -268,7 +272,11 @@ sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClie int fd, int64_t offset, int64_t length, int audioSessionId) int fd, int64_t offset, int64_t length, int audioSessionId) { { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld, audioSessionId=%d", connId, pid, fd, offset, length, audioSessionId); connId, pid, fd, offset, length, audioSessionId); if (NO_ERROR != c->setDataSource(fd, offset, length)) { if (NO_ERROR != c->setDataSource(fd, offset, length)) { Loading @@ -286,7 +294,10 @@ sp<IMediaPlayer> MediaPlayerService::create( pid_t pid, const sp<IMediaPlayerClient> &client, pid_t pid, const sp<IMediaPlayerClient> &client, const sp<IStreamSource> &source, int audioSessionId) { const sp<IStreamSource> &source, int audioSessionId) { int32_t connId = android_atomic_inc(&mNextConnId); int32_t connId = android_atomic_inc(&mNextConnId); sp<Client> c = new Client(this, pid, connId, client, audioSessionId); sp<Client> c = new Client( this, pid, connId, client, audioSessionId, IPCThreadState::self()->getCallingUid()); LOGV("Create new client(%d) from pid %d, audioSessionId=%d", LOGV("Create new client(%d) from pid %d, audioSessionId=%d", connId, pid, audioSessionId); connId, pid, audioSessionId); Loading Loading @@ -496,8 +507,10 @@ void MediaPlayerService::removeClient(wp<Client> client) mClients.remove(client); mClients.remove(client); } } MediaPlayerService::Client::Client(const sp<MediaPlayerService>& service, pid_t pid, MediaPlayerService::Client::Client( int32_t connId, const sp<IMediaPlayerClient>& client, int audioSessionId) const sp<MediaPlayerService>& service, pid_t pid, int32_t connId, const sp<IMediaPlayerClient>& client, int audioSessionId, uid_t uid) { { LOGV("Client(%d) constructor", connId); LOGV("Client(%d) constructor", connId); mPid = pid; mPid = pid; Loading @@ -507,6 +520,7 @@ MediaPlayerService::Client::Client(const sp<MediaPlayerService>& service, pid_t mLoop = false; mLoop = false; mStatus = NO_INIT; mStatus = NO_INIT; mAudioSessionId = audioSessionId; mAudioSessionId = audioSessionId; mUID = uid; #if CALLBACK_ANTAGONIZER #if CALLBACK_ANTAGONIZER LOGD("create Antagonizer"); LOGD("create Antagonizer"); Loading Loading @@ -671,6 +685,9 @@ sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerT if (p == NULL) { if (p == NULL) { p = android::createPlayer(playerType, this, notify); p = android::createPlayer(playerType, this, notify); } } p->setUID(mUID); return p; return p; } } Loading
media/libmediaplayerservice/MediaPlayerService.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -306,7 +306,8 @@ private: pid_t pid, pid_t pid, int32_t connId, int32_t connId, const sp<IMediaPlayerClient>& client, const sp<IMediaPlayerClient>& client, int audioSessionId); int audioSessionId, uid_t uid); Client(); Client(); virtual ~Client(); virtual ~Client(); Loading Loading @@ -336,6 +337,7 @@ private: bool mLoop; bool mLoop; int32_t mConnId; int32_t mConnId; int mAudioSessionId; int mAudioSessionId; uid_t mUID; // Metadata filters. // Metadata filters. media::Metadata::Filter mMetadataAllow; // protected by mLock media::Metadata::Filter mMetadataAllow; // protected by mLock Loading
media/libmediaplayerservice/StagefrightPlayer.cpp +6 −0 Original line number Original line Diff line number Diff line Loading @@ -47,6 +47,12 @@ status_t StagefrightPlayer::initCheck() { return OK; return OK; } } status_t StagefrightPlayer::setUID(uid_t uid) { mPlayer->setUID(uid); return OK; } status_t StagefrightPlayer::setDataSource( status_t StagefrightPlayer::setDataSource( const char *url, const KeyedVector<String8, String8> *headers) { const char *url, const KeyedVector<String8, String8> *headers) { return mPlayer->setDataSource(url, headers); return mPlayer->setDataSource(url, headers); Loading
media/libmediaplayerservice/StagefrightPlayer.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ public: virtual status_t initCheck(); virtual status_t initCheck(); virtual status_t setUID(uid_t uid); virtual status_t setDataSource( virtual status_t setDataSource( const char *url, const KeyedVector<String8, String8> *headers); const char *url, const KeyedVector<String8, String8> *headers); Loading