return TDM_ERROR_DPMS_OFF;
}
+ if (private_output->waiting_dpms_change) {
+ TDM_WRN("output(%d) dpms is changing: %s", private_output->pipe,
+ tdm_dpms_str(private_output->current_dpms_value));
+ _pthread_mutex_unlock(&private_display->lock);
+ return TDM_ERROR_DPMS_OFF;
+ }
+
ret = _tdm_output_wait_vblank(private_output, interval, sync, func, user_data, 0);
_pthread_mutex_unlock(&private_display->lock);
return TDM_ERROR_DPMS_OFF;
}
+ if (private_output->waiting_dpms_change) {
+ TDM_WRN("output(%d) dpms is changing: %s", private_output->pipe,
+ tdm_dpms_str(private_output->current_dpms_value));
+ _pthread_mutex_unlock(&private_display->lock);
+ return TDM_ERROR_DPMS_OFF;
+ }
+
ret = _tdm_output_wait_vblank(private_output, interval, sync, func, user_data, 1);
_pthread_mutex_unlock(&private_display->lock);
tdm_vblank_wait_info *wait_info;
tdm_output_dpms dpms = TDM_OUTPUT_DPMS_OFF;
unsigned int fps;
+ int dpms_changing = 0;
tdm_error ret;
TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(vblank), TDM_ERROR_INVALID_PARAMETER);
}
tdm_output_get_dpms(private_vblank->output, &dpms);
+ tdm_output_get_dpms_changing(private_vblank->output, &dpms_changing);
if (!private_vblank->enable_fake) {
if (private_vblank->connection == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) {
VER("can't wait a vblank: DPMS %s", tdm_dpms_str(dpms));
return TDM_ERROR_DPMS_OFF;
}
+
+ if (dpms_changing) {
+ VER("can't wait a vblank: DPMS is changing");
+ return TDM_ERROR_DPMS_OFF;
+ }
}
wait_info = calloc(1, sizeof * wait_info);
*/
if (private_vblank->vrefresh % fps)
wait_info->type = VBLANK_TYPE_SW;
- else if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms) ||
+ else if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms) || dpms_changing ||
private_vblank->connection != TDM_OUTPUT_CONN_STATUS_MODE_SETTED)
wait_info->type = VBLANK_TYPE_SW_FAKE;
else if (private_vblank->offset == 0)