diff options
Diffstat (limited to 'media/libmediaplayerservice/MediaPlayerService.cpp')
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.cpp | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index a2ec69182e..d4a5847b41 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -604,10 +604,11 @@ MediaPlayerService::Client::Client( mUID = uid; mRetransmitEndpointValid = false; mAudioAttributes = NULL; + mListener = new Listener(this); #if CALLBACK_ANTAGONIZER ALOGD("create Antagonizer"); - mAntagonizer = new Antagonizer(notify, this); + mAntagonizer = new Antagonizer(mListener); #endif } @@ -643,7 +644,7 @@ void MediaPlayerService::Client::disconnect() // and reset the player. We assume the player will serialize // access to itself if necessary. if (p != 0) { - p->setNotifyCallback(0, 0); + p->setNotifyCallback(0); #if CALLBACK_ANTAGONIZER ALOGD("kill Antagonizer"); mAntagonizer->kill(); @@ -665,7 +666,7 @@ sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerT p.clear(); } if (p == NULL) { - p = MediaPlayerFactory::createPlayer(playerType, this, notify, mPid); + p = MediaPlayerFactory::createPlayer(playerType, mListener, mPid); } if (p != NULL) { @@ -1271,29 +1272,25 @@ status_t MediaPlayerService::Client::getRetransmitEndpoint( } void MediaPlayerService::Client::notify( - void* cookie, int msg, int ext1, int ext2, const Parcel *obj) + int msg, int ext1, int ext2, const Parcel *obj) { - Client* client = static_cast<Client*>(cookie); - if (client == NULL) { - return; - } sp<IMediaPlayerClient> c; { - Mutex::Autolock l(client->mLock); - c = client->mClient; - if (msg == MEDIA_PLAYBACK_COMPLETE && client->mNextClient != NULL) { - if (client->mAudioOutput != NULL) - client->mAudioOutput->switchToNextOutput(); + Mutex::Autolock l(mLock); + c = mClient; + if (msg == MEDIA_PLAYBACK_COMPLETE && mNextClient != NULL) { + if (mAudioOutput != NULL) + mAudioOutput->switchToNextOutput(); ALOGD("gapless:current track played back"); ALOGD("gapless:try to do a gapless switch to next track"); status_t ret; - ret = client->mNextClient->start(); + ret = mNextClient->start(); if (ret == NO_ERROR) { - client->mNextClient->mClient->notify(MEDIA_INFO, + mNextClient->mClient->notify(MEDIA_INFO, MEDIA_INFO_STARTED_AS_NEXT, 0, obj); } else { - client->mClient->notify(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN , 0, obj); + mClient->notify(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN , 0, obj); ALOGW("gapless:start playback for next track failed"); } } @@ -1303,17 +1300,17 @@ void MediaPlayerService::Client::notify( MEDIA_INFO_METADATA_UPDATE == ext1) { const media::Metadata::Type metadata_type = ext2; - if(client->shouldDropMetadata(metadata_type)) { + if(shouldDropMetadata(metadata_type)) { return; } // Update the list of metadata that have changed. getMetadata // also access mMetadataUpdated and clears it. - client->addNewMetadataUpdate(metadata_type); + addNewMetadataUpdate(metadata_type); } if (c != NULL) { - ALOGV("[%d] notify (%p, %d, %d, %d)", client->mConnId, cookie, msg, ext1, ext2); + ALOGV("[%d] notify (%d, %d, %d)", mConnId, msg, ext1, ext2); c->notify(msg, ext1, ext2, obj); } } @@ -1361,8 +1358,8 @@ status_t MediaPlayerService::Client::resume() #if CALLBACK_ANTAGONIZER const int Antagonizer::interval = 10000; // 10 msecs -Antagonizer::Antagonizer(notify_callback_f cb, void* client) : - mExit(false), mActive(false), mClient(client), mCb(cb) +Antagonizer::Antagonizer(const sp<MediaPlayerBase::Listener> &listener) : + mExit(false), mActive(false), mListener(listener) { createThread(callbackThread, this); } @@ -1382,7 +1379,7 @@ int Antagonizer::callbackThread(void* user) while (!p->mExit) { if (p->mActive) { ALOGV("send event"); - p->mCb(p->mClient, 0, 0, 0); + p->mListener->notify(0, 0, 0, 0); } usleep(interval); } |