hwc: Get notified on media player death.

Add support to get notified of media player death.
This is useful in reseting secure sessions initiated by mediaserver.

Change-Id: I215b5b552a0874c86a07426cd7d16ed48f307b5d
diff --git a/libhwcomposer/Android.mk b/libhwcomposer/Android.mk
index 1618ef5..0ca7ca1 100644
--- a/libhwcomposer/Android.mk
+++ b/libhwcomposer/Android.mk
@@ -8,7 +8,8 @@
 LOCAL_C_INCLUDES              := $(common_includes) $(kernel_includes)
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libEGL liboverlay libgenlock \
                                  libexternal libqdutils libhardware_legacy \
-                                 libdl libmemalloc libqservice libsync libbinder
+                                 libdl libmemalloc libqservice libsync \
+                                 libbinder libmedia
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdhwcomposer\"
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_SRC_FILES               := hwc.cpp          \
diff --git a/libhwcomposer/hwc_qclient.cpp b/libhwcomposer/hwc_qclient.cpp
index 32dc451..ee31e6c 100644
--- a/libhwcomposer/hwc_qclient.cpp
+++ b/libhwcomposer/hwc_qclient.cpp
@@ -39,9 +39,14 @@
 namespace qClient {
 
 // ----------------------------------------------------------------------------
-QClient::QClient(hwc_context_t *ctx) : mHwcContext(ctx)
+QClient::QClient(hwc_context_t *ctx) : mHwcContext(ctx),
+        mMPDeathNotifier(new MPDeathNotifier(ctx))
 {
+
     ALOGD_IF(QCLIENT_DEBUG, "QClient Constructor invoked");
+    //The only way to make this class in this process subscribe to media
+    //player's death.
+    IMediaDeathNotifier::getMediaPlayerService();
 }
 
 QClient::~QClient()
@@ -80,4 +85,12 @@
         mHwcContext->proc->invalidate(mHwcContext->proc);
 }
 
+void QClient::MPDeathNotifier::died() {
+    ALOGD_IF(QCLIENT_DEBUG, "Media Player died");
+    mHwcContext->mSecuring = false;
+    mHwcContext->mSecureMode = false;
+    if(mHwcContext->proc)
+        mHwcContext->proc->invalidate(mHwcContext->proc);
+}
+
 }
diff --git a/libhwcomposer/hwc_qclient.h b/libhwcomposer/hwc_qclient.h
index 1f3944f..0ee6de1 100644
--- a/libhwcomposer/hwc_qclient.h
+++ b/libhwcomposer/hwc_qclient.h
@@ -34,6 +34,7 @@
 #include <sys/types.h>
 #include <cutils/log.h>
 #include <binder/IServiceManager.h>
+#include <media/IMediaDeathNotifier.h>
 #include <IQClient.h>
 
 struct hwc_context_t;
@@ -46,10 +47,21 @@
     QClient(hwc_context_t *ctx);
     virtual ~QClient();
     virtual void notifyCallback(uint32_t msg, uint32_t value);
+
 private:
+    //Notifies of Media Player death
+    class MPDeathNotifier : public android::IMediaDeathNotifier {
+    public:
+        MPDeathNotifier(hwc_context_t* ctx) : mHwcContext(ctx){}
+        virtual void died();
+        hwc_context_t *mHwcContext;
+    };
+
     void securing(uint32_t startEnd);
     void unsecuring(uint32_t startEnd);
+
     hwc_context_t *mHwcContext;
+    const android::sp<android::IMediaDeathNotifier> mMPDeathNotifier;
 };
 }; // namespace qClient
 #endif // ANDROID_QCLIENT_H