diff --git a/packages/ti/drv/dss/src/drv/dctrl/dss_dctrlApi.c b/packages/ti/drv/dss/src/drv/dctrl/dss_dctrlApi.c
index cfb455142ab56885926f6381c05e754cae1db780..95f41856569bb78c91d5e6c7d9001f5be81e404a 100755 (executable)
Dss_DctrlDrvInfo gDss_DctrlDrvInfo;
Dss_EvtMgrClientInfo gDss_DctrlEvtMgrClientInfo[DSS_DCTRL_EVT_MGR_MAX_CLIENTS];
+/* Semaphore to sync up back to back Fvid2_start() calls.
+ A VSYNC is needed between back to back Fvid2_start() calls. */
+SemaphoreP_Handle gDssStartSyncSem;
/* ========================================================================== */
/* Internal/Private Function Declarations */
/* ========================================================================== */
sizeof (Dss_DctrlDrvInitParams));
}
}
+ if (FVID2_SOK == retVal)
+ {
+ /* create semaphore */
+ SemaphoreP_Params_init(&semParams);
+ semParams.mode = SemaphoreP_Mode_BINARY;
+ gDssStartSyncSem = SemaphoreP_create(1U, &semParams);
+ }
return (retVal);
}
pObj->isRegistered = FALSE;
}
+ if (gDssStartSyncSem != NULL)
+ {
+ /* Delete semaphore */
+ (void)SemaphoreP_delete(gDssStartSyncSem);
+ }
+
return (retVal);
}
}
else if(DSS_VP_EVENT_VSYNC == currEvent)
{
+ /* Post crate sync semaphore */
+ if(NULL != gDssStartSyncSem)
+ {
+ /* Post the instance semaphore */
+ (void) SemaphoreP_post(gDssStartSyncSem);
+ }
activePipeNum = 0U;
for(j=0U; j<gDss_DctrlDrvInfo.numValidPipes; j++)
{