}
}
-tdm_error
-tdm_virtual_display_create_layer_list(tdm_virtual_data *virtual_data)
-{
- tdm_virtual_output_data *output_data = NULL;
- tdm_error ret = TDM_ERROR_NONE;
-
- if (LIST_IS_EMPTY(&virtual_data->output_list)) {
- TDM_ERR("no output");
- return TDM_ERROR_OPERATION_FAILED;
- }
-
- /* The TDM virtual backend only support one output. */
- LIST_FOR_EACH_ENTRY(output_data, &virtual_data->output_list, link) {
- tdm_virtual_layer_data *layer_data = calloc(1, sizeof(tdm_virtual_layer_data));
- if (!layer_data) {
- TDM_ERR("alloc failed");
- ret = TDM_ERROR_OUT_OF_MEMORY;
- goto failed;
- }
-
- layer_data->virtual_data = virtual_data;
- layer_data->output_data = output_data;
- layer_data->zpos = 0;
-
- layer_data->capabilities = TDM_LAYER_CAPABILITY_PRIMARY | TDM_LAYER_CAPABILITY_GRAPHIC;
- output_data->primary_layer = layer_data;
-
- LIST_ADDTAIL(&layer_data->link, &output_data->layer_list);
- }
-
- return TDM_ERROR_NONE;
-failed:
- _tdm_virtual_display_destroy_layer_list(virtual_data);
- return ret;
-}
-
void
tdm_virtual_display_destroy_output_list(tdm_virtual_data *virtual_data)
{
}
tdm_error
-tdm_virtual_display_create_output_list(tdm_virtual_data *virtual_data)
-{
- tdm_virtual_output_data *output_data;
- tdm_error ret;
-
- RETURN_VAL_IF_FAIL(LIST_IS_EMPTY(&virtual_data->output_list), TDM_ERROR_OPERATION_FAILED);
-
- output_data = calloc(1, sizeof(tdm_virtual_output_data));
- if (!output_data) {
- TDM_ERR("alloc failed");
- ret = TDM_ERROR_OUT_OF_MEMORY;
- goto failed_create;
- }
-
- LIST_INITHEAD(&output_data->layer_list);
-
- output_data->virtual_data = virtual_data;
- output_data->pipe = 0;
- output_data->connector_type = TDM_OUTPUT_TYPE_Unknown;
- output_data->status = TDM_OUTPUT_CONN_STATUS_DISCONNECTED;
-
- output_data->output_modes = calloc(1, sizeof(tdm_output_mode));
- if (!output_data->output_modes) {
- TDM_ERR("alloc failed");
- free(output_data);
- ret = TDM_ERROR_OUT_OF_MEMORY;
- goto failed_create;
- }
-
- snprintf(output_data->output_modes->name, TDM_NAME_LEN, "640x480");
- output_data->output_modes->vrefresh = 30;
- output_data->output_modes->clock = 25200;
- output_data->output_modes->hdisplay = 640;
- output_data->output_modes->hsync_start = 656;
- output_data->output_modes->hsync_end = 752;
- output_data->output_modes->htotal = 800;
- output_data->output_modes->hskew = 0;
- output_data->output_modes->vdisplay = 480;
- output_data->output_modes->vsync_start = 490;
- output_data->output_modes->vsync_end = 492;
- output_data->output_modes->vtotal = 525;
- output_data->output_modes->vscan = 0;
- output_data->output_modes->flags = 0;
- output_data->output_modes->type = 0;
-
- output_data->timer = tdm_event_loop_add_timer_handler(virtual_data->dpy,
- _tdm_virtual_display_cb_timeout,
- output_data,
- &ret);
- if (!output_data->timer) {
- free(output_data);
- return ret;
- }
-
- LIST_INITHEAD(&output_data->timer_event_list);
-
- LIST_ADDTAIL(&output_data->link, &virtual_data->output_list);
-
- return TDM_ERROR_NONE;
-failed_create:
- tdm_virtual_display_destroy_output_list(virtual_data);
- return ret;
-}
-
-tdm_error
virtual_display_get_capability(tdm_backend_data *bdata, tdm_caps_display *caps)
{
RETURN_VAL_IF_FAIL(caps, TDM_ERROR_INVALID_PARAMETER);
snprintf(output_data->name, TDM_NAME_LEN, "%s", name);
else
snprintf(output_data->name, TDM_NAME_LEN, "unknown");
-#if 0
+
output_data->output_modes = calloc(1, sizeof(tdm_output_mode));
if (!output_data->output_modes) {
TDM_ERR("alloc failed");
goto create_fail;
}
+ /* default mode */
snprintf(output_data->output_modes->name, TDM_NAME_LEN, "640x480");
output_data->output_modes->vrefresh = 30;
output_data->output_modes->clock = 25200;
output_data->output_modes->vscan = 0;
output_data->output_modes->flags = 0;
output_data->output_modes->type = 0;
-
output_data->mode_count = 1;
-#endif
+
output_data->timer = tdm_event_loop_add_timer_handler(virtual_data->dpy,
_tdm_virtual_display_cb_timeout,
output_data,
layer_data->capabilities = TDM_LAYER_CAPABILITY_PRIMARY | TDM_LAYER_CAPABILITY_GRAPHIC;
output_data->primary_layer = layer_data;
+ LIST_ADDTAIL(&output_data->link, &virtual_data->output_list);
LIST_ADDTAIL(&layer_data->link, &output_data->layer_list);
ret = tdm_backend_register_output(virtual_data->dpy, output_data);
- GOTO_IF_FAIL(ret == TDM_ERROR_NONE, create_fail);
+ if (ret != TDM_ERROR_NONE) {
+ LIST_DEL(&output_data->link);
+ goto create_fail;
+ }
*error = TDM_ERROR_NONE;