Report other servers' deaths in OnErrorListener too
otherwise applications will be unaware of those processes dying.
Bug: 22775369
Change-Id: I48577f787a97ee7627ae8e7f32e2f21ace243ed0
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index 80593b2..ef2819a 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -229,6 +229,14 @@
void removeClient(wp<Client> client);
+ enum {
+ MEDIASERVER_PROCESS_DEATH = 0,
+ MEDIAEXTRACTOR_PROCESS_DEATH = 1,
+ MEDIACODEC_PROCESS_DEATH = 2,
+ AUDIO_PROCESS_DEATH = 3,
+ CAMERA_PROCESS_DEATH = 4
+ };
+
// For battery usage tracking purpose
struct BatteryUsageInfo {
// how many streams are being played by one UID
@@ -336,6 +344,22 @@
audio_session_t getAudioSessionId() { return mAudioSessionId; }
private:
+ class ServiceDeathNotifier: public IBinder::DeathRecipient
+ {
+ public:
+ ServiceDeathNotifier(
+ const sp<IBinder>& service,
+ const sp<MediaPlayerBase>& listener,
+ int which);
+ virtual ~ServiceDeathNotifier();
+ virtual void binderDied(const wp<IBinder>& who);
+
+ private:
+ int mWhich;
+ sp<IBinder> mService;
+ wp<MediaPlayerBase> mListener;
+ };
+
friend class MediaPlayerService;
Client( const sp<MediaPlayerService>& service,
pid_t pid,
@@ -395,6 +419,9 @@
// getMetadata clears this set.
media::Metadata::Filter mMetadataUpdated; // protected by mLock
+ sp<IBinder::DeathRecipient> mExtractorDeathListener;
+ sp<IBinder::DeathRecipient> mCodecDeathListener;
+ sp<IBinder::DeathRecipient> mAudioDeathListener;
#if CALLBACK_ANTAGONIZER
Antagonizer* mAntagonizer;
#endif