diff options
Diffstat (limited to 'media/libmediaplayerservice/MediaPlayerService.h')
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.h | 68 |
1 files changed, 40 insertions, 28 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index 2bd7ec5c75..6e97b3892b 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -49,7 +49,7 @@ class MediaRecorderClient; #if CALLBACK_ANTAGONIZER class Antagonizer { public: - Antagonizer(notify_callback_f cb, void* client); + Antagonizer(const sp<MediaPlayerBase::Listener> &listener); void start() { mActive = true; } void stop() { mActive = false; } void kill(); @@ -57,12 +57,11 @@ private: static const int interval; Antagonizer(); static int callbackThread(void* cookie); - Mutex mLock; - Condition mCondition; - bool mExit; - bool mActive; - void* mClient; - notify_callback_f mCb; + Mutex mLock; + Condition mCondition; + bool mExit; + bool mActive; + sp<MediaPlayerBase::Listener> mListener; }; #endif @@ -205,7 +204,6 @@ class MediaPlayerService : public BnMediaPlayerService }; // AudioOutput - public: static void instantiate(); @@ -327,8 +325,7 @@ private: void setDataSource_post(const sp<MediaPlayerBase>& p, status_t status); - static void notify(void* cookie, int msg, - int ext1, int ext2, const Parcel *obj); + void notify(int msg, int ext1, int ext2, const Parcel *obj); pid_t pid() const { return mPid; } virtual status_t dump(int fd, const Vector<String16>& args); @@ -370,23 +367,38 @@ private: status_t setAudioAttributes_l(const Parcel &request); - mutable Mutex mLock; - sp<MediaPlayerBase> mPlayer; - sp<MediaPlayerService> mService; - sp<IMediaPlayerClient> mClient; - sp<AudioOutput> mAudioOutput; - pid_t mPid; - status_t mStatus; - bool mLoop; - int32_t mConnId; - int mAudioSessionId; - audio_attributes_t * mAudioAttributes; - uid_t mUID; - sp<ANativeWindow> mConnectedWindow; - sp<IBinder> mConnectedWindowBinder; - struct sockaddr_in mRetransmitEndpoint; - bool mRetransmitEndpointValid; - sp<Client> mNextClient; + class Listener : public MediaPlayerBase::Listener { + public: + Listener(const wp<Client> &client) : mClient(client) {} + virtual ~Listener() {} + virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) { + sp<Client> client = mClient.promote(); + if (client != NULL) { + client->notify(msg, ext1, ext2, obj); + } + } + private: + wp<Client> mClient; + }; + + mutable Mutex mLock; + sp<MediaPlayerBase> mPlayer; + sp<MediaPlayerService> mService; + sp<IMediaPlayerClient> mClient; + sp<AudioOutput> mAudioOutput; + pid_t mPid; + status_t mStatus; + bool mLoop; + int32_t mConnId; + int mAudioSessionId; + audio_attributes_t * mAudioAttributes; + uid_t mUID; + sp<ANativeWindow> mConnectedWindow; + sp<IBinder> mConnectedWindowBinder; + struct sockaddr_in mRetransmitEndpoint; + bool mRetransmitEndpointValid; + sp<Client> mNextClient; + sp<MediaPlayerBase::Listener> mListener; // Metadata filters. media::Metadata::Filter mMetadataAllow; // protected by mLock @@ -399,7 +411,7 @@ private: media::Metadata::Filter mMetadataUpdated; // protected by mLock #if CALLBACK_ANTAGONIZER - Antagonizer* mAntagonizer; + Antagonizer* mAntagonizer; #endif }; // Client |