Display and wfd synchronization during teardown
* Provide a binder interface call for wfd module
to inform display about the start/stop/pause/resume
of wfd session.
* This is needed for wfd-hdmi synchronization in
case of v4l2 wfd solution. If hdmi is plugged
in during v4l2 wfd session, display-hal waits in
uevent thread for wfd teardown notification from
wfd module, before going ahead with configuring
external display.
* For VDS WFD solution, display-hal waits in uevent
thread for wfd-teardown to be signalled from
the composition thread.
Change-Id: I9514cb5bc7ff81de0b5dd4cdf66d8286a64ba094
diff --git a/libhwcomposer/hwc_virtual.cpp b/libhwcomposer/hwc_virtual.cpp
index f68d08f..10ed9d1 100644
--- a/libhwcomposer/hwc_virtual.cpp
+++ b/libhwcomposer/hwc_virtual.cpp
@@ -35,19 +35,17 @@
using namespace qhwc;
using namespace overlay;
-HWCVirtualBase* HWCVirtualBase::getObject() {
- char property[PROPERTY_VALUE_MAX];
+HWCVirtualBase* HWCVirtualBase::getObject(bool isVDSEnabled) {
- if((property_get("persist.hwc.enable_vds", property, NULL) > 0)) {
- if(atoi(property) != 0) {
- ALOGD_IF(HWCVIRTUAL_LOG, "%s: VDS is enabled for Virtual display",
- __FUNCTION__);
- return new HWCVirtualVDS();
- }
+ if(isVDSEnabled) {
+ ALOGD_IF(HWCVIRTUAL_LOG, "%s: VDS is enabled for Virtual display",
+ __FUNCTION__);
+ return new HWCVirtualVDS();
+ } else {
+ ALOGD_IF(HWCVIRTUAL_LOG, "%s: V4L2 is enabled for Virtual display",
+ __FUNCTION__);
+ return new HWCVirtualV4L2();
}
- ALOGD_IF(HWCVIRTUAL_LOG, "%s: V4L2 is enabled for Virtual display",
- __FUNCTION__);
- return new HWCVirtualV4L2();
}
void HWCVirtualVDS::init(hwc_context_t *ctx) {
@@ -84,6 +82,9 @@
if(!Writeback::getInstance()->setSecure(false)) {
ALOGE("Failure while attempting to reset WB session.");
}
+ ctx->mWfdSyncLock.lock();
+ ctx->mWfdSyncLock.signal();
+ ctx->mWfdSyncLock.unlock();
}
}