tdm_thread_cb_display_output_create output_create;
tdm_error ret;
+ if (LIST_IS_EMPTY(&private_display->output_create_handler_list)) return TDM_ERROR_NONE;
+
memset(&output_create, 0, sizeof output_create);
output_create.base.type = TDM_THREAD_CB_DISPLAY_OUTPUT_CREATE;
output_create.base.length = sizeof output_create;
- output_create.base.object_stamp = 0;
+ output_create.base.object_stamp = tdm_helper_get_time();
output_create.base.data = NULL;
output_create.base.sync = 1;
output_create.output = output;
}
}
+ if (private_display->virtual_module) {
+ private_module = private_display->virtual_module;
+ LIST_FOR_EACH_ENTRY(private_output, &private_module->output_list, link) {
+ if (strncmp(private_output->name, name, TDM_NAME_LEN))
+ continue;
+ _pthread_mutex_unlock(&private_display->lock);
+ return private_output;
+ }
+ }
_pthread_mutex_unlock(&private_display->lock);
return NULL;
TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(output != NULL, ret, NULL);
if (output_find != 1)
private_output = NULL;
+ else
+ strncpy(private_output->name, name, TDM_NAME_LEN);
return private_output;
}
else
private_layer->committing = 1;
+ private_layer->commiting_buffer = layer_commit_handler->committed_buffer->buffer;
+
if (tdm_debug_module & TDM_DEBUG_BUFFER)
TDM_INFO("layer(%p,%d) waiting_buffer(%p) committed_buffer(%p)",
private_layer, private_layer->index, private_layer->waiting_buffer,
tdm_private_output *private_output;
tdm_private_output_commit_handler *output_commit_handler = NULL;
tdm_private_layer *private_layer = NULL;
+ tdm_private_display *private_display;
tbm_surface_h buffer;
tdm_error ret = TDM_ERROR_NONE;
TDM_RETURN_VAL_IF_FAIL(output != NULL, TDM_ERROR_INVALID_PARAMETER);
private_output = (tdm_private_output*)output;
+ private_display = private_output->private_display;
if (!LIST_IS_EMPTY(&private_output->output_commit_handler_list)) {
/* support only 1 commit */
if (private_layer) break;
}
TDM_GOTO_IF_FAIL(private_layer, commit_failed);
- TDM_GOTO_IF_FAIL(private_layer->committed_buffer, commit_failed);
- buffer = private_layer->committed_buffer->buffer;
+ buffer = private_layer->commiting_buffer;
+ TDM_GOTO_IF_FAIL(buffer != NULL, commit_failed);
+ _pthread_mutex_unlock(&private_display->lock);
ret = tdm_output_send_buffer(private_output, buffer);
TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, commit_failed);
ret = tdm_output_commit_buffer(private_output);
TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, commit_failed);
+ _pthread_mutex_lock(&private_display->lock);
return ret;
if (private_layer) break;
}
+ private_layer->commiting_buffer = NULL;
+
LIST_FOR_EACH_ENTRY(output_commit_handler, &private_output->output_commit_handler_list, link) {
if (output_commit_handler) break;
}
/* hwc */
int need_set_target_info;
tdm_private_hwc *private_hwc;
+
+ /* virtual */
+ char name[TDM_NAME_LEN];
};
struct _tdm_private_layer {
double fps_stamp;
unsigned int fps_count;
+
+ /* virtual */
+ tbm_surface_h commiting_buffer;
};
struct _tdm_private_hwc {