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