{
tdm_func_display dummy_func_display;
tdm_func_output dummy_func_output;
- tdm_func_layer dummy_func_layer;
tdm_func_hwc dummy_func_hwc;
tdm_func_hwc_window dummy_func_hwc_window;
tdm_error ret;
memset(&dummy_func_output, 0, sizeof(dummy_func_output));
dummy_func_output.output_get_capability = dummy_output_get_capability;
- dummy_func_output.output_get_layers = dummy_output_get_layers;
dummy_func_output.output_wait_vblank = dummy_output_wait_vblank;
dummy_func_output.output_set_vblank_handler = dummy_output_set_vblank_handler;
- dummy_func_output.output_commit = dummy_output_commit;
- dummy_func_output.output_set_commit_handler = dummy_output_set_commit_handler;
dummy_func_output.output_set_mode = dummy_output_set_mode;
dummy_func_output.output_get_mode = dummy_output_get_mode;
dummy_func_output.output_get_hwc = dummy_output_get_hwc;
- memset(&dummy_func_layer, 0, sizeof(dummy_func_layer));
- dummy_func_layer.layer_get_capability = dummy_layer_get_capability;
- dummy_func_layer.layer_set_info = dummy_layer_set_info;
- dummy_func_layer.layer_get_info = dummy_layer_get_info;
- dummy_func_layer.layer_set_buffer = dummy_layer_set_buffer;
- dummy_func_layer.layer_unset_buffer = dummy_layer_unset_buffer;
-
memset(&dummy_func_hwc, 0, sizeof(dummy_func_hwc));
dummy_func_hwc.hwc_create_window = dummy_hwc_create_window;
dummy_func_hwc.hwc_get_video_supported_formats = dummy_hwc_get_video_supported_formats;
if (ret != TDM_ERROR_NONE)
goto failed;
- ret = tdm_backend_register_func_layer(dpy, &dummy_func_layer);
- if (ret != TDM_ERROR_NONE)
- goto failed;
-
ret = tdm_backend_register_func_hwc(dpy, &dummy_func_hwc);
if (ret != TDM_ERROR_NONE)
goto failed;
/* not fixed data below */
tdm_output_vblank_handler vblank_func;
- tdm_output_commit_handler commit_func;
tdm_output_conn_status status;
unsigned int timer_waiting;
struct list_head timer_event_list;
- int hwc_enable;
tdm_dummy_hwc_data *hwc_data;
};
output_data->vblank_func(output_data, sequence, tv_sec, tv_usec, event_data->user_data);
break;
case TDM_DUMMY_EVENT_TYPE_COMMIT:
- if (output_data->hwc_data) {
- if (output_data->hwc_data->commit_func)
- output_data->hwc_data->commit_func(output_data, sequence, tv_sec, tv_usec, event_data->user_data);
- } else {
- if (output_data->commit_func)
- output_data->commit_func(output_data, sequence, tv_sec, tv_usec, event_data->user_data);
- }
+ if (output_data->hwc_data->commit_func)
+ output_data->hwc_data->commit_func(output_data, sequence, tv_sec, tv_usec, event_data->user_data);
break;
default:
break;
return ret;
}
-tdm_layer **
-dummy_output_get_layers(tdm_output *output, int *count, tdm_error *error)
-{
- tdm_dummy_output_data *output_data = output;
- tdm_dummy_layer_data *layer_data = NULL;
- tdm_layer **layers;
- tdm_error ret;
- int i;
-
- RETURN_VAL_IF_FAIL(output_data, NULL);
- RETURN_VAL_IF_FAIL(count, NULL);
-
- *count = 0;
- LIST_FOR_EACH_ENTRY(layer_data, &output_data->layer_list, link)
- (*count)++;
-
- if (*count == 0) {
- ret = TDM_ERROR_NONE;
- goto failed_get;
- }
-
- /* will be freed in frontend */
- layers = calloc(*count, sizeof(tdm_dummy_layer_data *));
- if (!layers) {
- TDM_ERR("failed: alloc memory");
- *count = 0;
- ret = TDM_ERROR_OUT_OF_MEMORY;
- goto failed_get;
- }
-
- i = 0;
- LIST_FOR_EACH_ENTRY(layer_data, &output_data->layer_list, link)
- layers[i++] = layer_data;
-
- if (error)
- *error = TDM_ERROR_NONE;
-
- return layers;
-failed_get:
- if (error)
- *error = ret;
- return NULL;
-}
-
tdm_error
dummy_output_wait_vblank(tdm_output *output, int interval, int sync, void *user_data)
{
return TDM_ERROR_NONE;
}
-tdm_error
-dummy_output_commit(tdm_output *output, int sync, void *user_data)
-{
- tdm_dummy_output_data *output_data = output;
- tdm_dummy_event_data *event_data;
- tdm_error ret;
-
- RETURN_VAL_IF_FAIL(output_data, TDM_ERROR_INVALID_PARAMETER);
-
- event_data = calloc(1, sizeof(tdm_dummy_event_data));
- if (!event_data) {
- TDM_ERR("alloc failed");
- return TDM_ERROR_OUT_OF_MEMORY;
- }
-
- event_data->type = TDM_DUMMY_EVENT_TYPE_COMMIT;
- event_data->output_data = output_data;
- event_data->user_data = user_data;
-
- ret = _tdm_dummy_display_wait_vblank(output_data, 1, event_data);
- if (ret != TDM_ERROR_NONE) {
- free(event_data);
- return ret;
- }
-
- return TDM_ERROR_NONE;
-}
-
-tdm_error
-dummy_output_set_commit_handler(tdm_output *output, tdm_output_commit_handler func)
-{
- tdm_dummy_output_data *output_data = output;
-
- RETURN_VAL_IF_FAIL(output_data, TDM_ERROR_INVALID_PARAMETER);
- RETURN_VAL_IF_FAIL(func, TDM_ERROR_INVALID_PARAMETER);
-
- output_data->commit_func = func;
-
- return TDM_ERROR_NONE;
-}
-
tdm_error
dummy_output_set_mode(tdm_output *output, const tdm_output_mode *mode)
{
return hwc_data;
}
-tdm_error
-dummy_layer_get_capability(tdm_layer *layer, tdm_caps_layer *caps)
-{
- tdm_dummy_layer_data *layer_data = layer;
-
- RETURN_VAL_IF_FAIL(layer_data, TDM_ERROR_INVALID_PARAMETER);
- RETURN_VAL_IF_FAIL(caps, TDM_ERROR_INVALID_PARAMETER);
-
- memset(caps, 0, sizeof(tdm_caps_layer));
-
- caps->capabilities = layer_data->capabilities;
- caps->zpos = layer_data->zpos;
-
- caps->format_count = 2;
- caps->formats = calloc(caps->format_count, sizeof(tbm_format));
- if (!caps->formats) {
- TDM_ERR("alloc failed\n");
- free(caps->formats);
- memset(caps, 0, sizeof(tdm_caps_layer));
- return TDM_ERROR_OUT_OF_MEMORY;
- }
-
- caps->formats[0] = TBM_FORMAT_ARGB8888;
- caps->formats[1] = TBM_FORMAT_XRGB8888;
-
- caps->prop_count = 0;
-
- return TDM_ERROR_NONE;
-}
-
tdm_error
dummy_layer_set_info(tdm_layer *layer, tdm_info_layer *info)
{
{
tdm_dummy_hwc_data *hwc_data = hwc;
tdm_dummy_output_data *output_data = NULL;
+ tdm_dummy_event_data *event_data;
tdm_error ret;
RETURN_VAL_IF_FAIL(hwc_data, TDM_ERROR_INVALID_PARAMETER);
TDM_DBG(" ==============COMMIT=================================");
- ret = dummy_output_commit(output_data, sync, user_data);
- RETURN_VAL_IF_FAIL(ret == TDM_ERROR_NONE, ret);
+ event_data = calloc(1, sizeof(tdm_dummy_event_data));
+ if (!event_data) {
+ TDM_ERR("alloc failed");
+ return TDM_ERROR_OUT_OF_MEMORY;
+ }
+
+ event_data->type = TDM_DUMMY_EVENT_TYPE_COMMIT;
+ event_data->output_data = output_data;
+ event_data->user_data = user_data;
+
+ ret = _tdm_dummy_display_wait_vblank(output_data, 1, event_data);
+ if (ret != TDM_ERROR_NONE) {
+ free(event_data);
+ return ret;
+ }
return TDM_ERROR_NONE;
}