1. The voutput is created at the tdm_display, so it belongs to the tdm_display.
The creation of the voutput should be done at the display.
2. The voutput should be distinguished from the output. The functions associated
with the voutput has to get the voutput symbol name.
Change-Id: Ie21def171a1e8d9c43150e23347542c3a232db23
virtual_func_display.display_get_outputs = virtual_display_get_outputs;
virtual_func_display.display_get_fd = virtual_display_get_fd;
virtual_func_display.display_handle_events = virtual_display_handle_events;
- virtual_func_display.voutput_create = virtual_output_create;
+ virtual_func_display.display_voutput_create = virtual_display_voutput_create;
memset(&virtual_func_output, 0, sizeof(virtual_func_output));
virtual_func_output.output_get_capability = virtual_output_get_capability;
virtual_func_output.output_set_status_handler = virtual_output_set_status_handler;
memset(&virtual_func_voutput, 0, sizeof(virtual_func_voutput));
- virtual_func_voutput.voutput_destroy = virtual_output_destroy;
- virtual_func_voutput.voutput_set_available_mode = virtual_output_set_available_mode;
- virtual_func_voutput.voutput_set_physical_size = virtual_output_set_physical_size;
- virtual_func_voutput.voutput_connect = virtual_output_connect;
- virtual_func_voutput.voutput_disconnect = virtual_output_disconnect;
- virtual_func_voutput.voutput_get_output = virtual_output_get_output;
- virtual_func_voutput.voutput_set_commit_func = virtual_output_set_commit_func;
- virtual_func_voutput.voutput_commit_done = virtual_output_commit_done;
+ virtual_func_voutput.voutput_destroy = virtual_voutput_destroy;
+ virtual_func_voutput.voutput_set_available_mode = virtual_voutput_set_available_mode;
+ virtual_func_voutput.voutput_set_physical_size = virtual_voutput_set_physical_size;
+ virtual_func_voutput.voutput_connect = virtual_voutput_connect;
+ virtual_func_voutput.voutput_disconnect = virtual_voutput_disconnect;
+ virtual_func_voutput.voutput_get_output = virtual_voutput_get_output;
+ virtual_func_voutput.voutput_set_commit_func = virtual_voutput_set_commit_func;
+ virtual_func_voutput.voutput_commit_done = virtual_voutput_commit_done;
memset(&virtual_func_layer, 0, sizeof(virtual_func_layer));
virtual_func_layer.layer_get_capability = virtual_layer_get_capability;
tdm_output **virtual_display_get_outputs(tdm_backend_data *bdata, int *count, tdm_error *error);
tdm_error virtual_display_get_fd(tdm_backend_data *bdata, int *fd);
tdm_error virtual_display_handle_events(tdm_backend_data *bdata);
-tdm_output *virtual_display_output_create(tdm_backend_data *bdata, const char* name, tdm_error *error);
-tdm_error virtual_display_output_destroy(tdm_backend_data *bdata, tdm_output *output);
+tdm_voutput *virtual_display_voutput_create(tdm_backend_data *bdata, const char *name, tdm_error *error);
tdm_error virtual_output_get_capability(tdm_output *output, tdm_caps_output *caps);
tdm_layer **virtual_output_get_layers(tdm_output *output, int *count, tdm_error *error);
tdm_error virtual_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value);
tdm_error virtual_output_set_mode(tdm_output *output, const tdm_output_mode *mode);
tdm_error virtual_output_get_mode(tdm_output *output, const tdm_output_mode **mode);
-tdm_error virtual_output_set_available_mode(tdm_output *output, const tdm_output_mode *modes, int count);
-tdm_error virtual_output_set_physical_size(tdm_output *output, unsigned int mmwidth, unsigned int mmheight);
-tdm_error virtual_output_connect(tdm_output *output);
-tdm_error virtual_output_disconnect(tdm_output *output);
tdm_error virtual_output_set_status_handler(tdm_output *output, tdm_output_status_handler func, void *user_data);
-tdm_voutput *virtual_output_create(tdm_backend_data *bdata, const char *name, tdm_error *error);
-tdm_error virtual_output_destroy(tdm_voutput *voutput);
-tdm_output *virtual_output_get_output(tdm_voutput *voutput, tdm_error *error);
-tdm_error virtual_output_set_commit_func(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func);
-tdm_error virtual_output_commit_done(tdm_voutput *voutput);
+tdm_error virtual_voutput_set_available_mode(tdm_output *output, const tdm_output_mode *modes, int count);
+tdm_error virtual_voutput_set_physical_size(tdm_output *output, unsigned int mmwidth, unsigned int mmheight);
+tdm_error virtual_voutput_connect(tdm_output *output);
+tdm_error virtual_voutput_disconnect(tdm_output *output);
+tdm_error virtual_voutput_destroy(tdm_voutput *voutput);
+tdm_output *virtual_voutput_get_output(tdm_voutput *voutput, tdm_error *error);
+tdm_error virtual_voutput_set_commit_func(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func);
+tdm_error virtual_voutput_commit_done(tdm_voutput *voutput);
tdm_error virtual_layer_get_capability(tdm_layer *layer, tdm_caps_layer *caps);
tdm_error virtual_layer_set_info(tdm_layer *layer, tdm_info_layer *info);
}
tdm_error
-virtual_output_set_available_mode(tdm_voutput *voutput, const tdm_output_mode *modes, int count)
+virtual_voutput_set_available_mode(tdm_voutput *voutput, const tdm_output_mode *modes, int count)
{
tdm_virtual_voutput_data *voutput_data = voutput;
tdm_virtual_output_data *output_data = NULL;
}
tdm_error
-virtual_output_set_physical_size(tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight)
+virtual_voutput_set_physical_size(tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight)
{
tdm_virtual_voutput_data *voutput_data = voutput;
}
tdm_error
-virtual_output_connect(tdm_voutput *voutput)
+virtual_voutput_connect(tdm_voutput *voutput)
{
tdm_virtual_voutput_data *voutput_data = voutput;
tdm_virtual_output_data *output_data = NULL;
}
tdm_error
-virtual_output_disconnect(tdm_voutput *voutput)
+virtual_voutput_disconnect(tdm_voutput *voutput)
{
tdm_virtual_voutput_data *voutput_data = voutput;
}
tdm_voutput *
-virtual_output_create(tdm_backend_data *bdata, const char *name, tdm_error *error)
+virtual_display_voutput_create(tdm_backend_data *bdata, const char *name, tdm_error *error)
{
tdm_virtual_data *virtual_data = bdata;
tdm_virtual_voutput_data *voutput_data = NULL;
}
tdm_error
-virtual_output_destroy(tdm_voutput *voutput)
+virtual_voutput_destroy(tdm_voutput *voutput)
{
tdm_virtual_data *virtual_data = NULL;
tdm_virtual_voutput_data *vo = NULL, *voutput_data = voutput;
}
tdm_output *
-virtual_output_get_output(tdm_voutput *voutput, tdm_error *error)
+virtual_voutput_get_output(tdm_voutput *voutput, tdm_error *error)
{
tdm_virtual_voutput_data *voutput_data = voutput;
}
tdm_error
-virtual_output_set_commit_func(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func)
+virtual_voutput_set_commit_func(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func)
{
tdm_virtual_voutput_data *voutput_data = voutput;
}
tdm_error
-virtual_output_commit_done(tdm_voutput *voutput)
+virtual_voutput_commit_done(tdm_voutput *voutput)
{
tdm_virtual_voutput_data *voutput_data = voutput;
tdm_virtual_output_data *output_data = NULL;
* @remark
* A backend module doesn't need to implement this function if doesn't support virtual output.
*/
- tdm_voutput *(*voutput_create)(tdm_backend_data *bdata, const char *name, tdm_error *error);
+ tdm_voutput *(*display_voutput_create)(tdm_backend_data *bdata, const char *name, tdm_error *error);
void (*reserved2)(void);
void (*reserved3)(void);
* @brief Destroy a virtual output object of a backend module
* @param[in] voutput The voutput object
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
- * @see voutput_create() function
+ * @see display_voutput_create() function
* @remark
* A backend module doesn't need to implement this function if doesn't support virtual output.
*/
return 1;
}
+INTERN tdm_voutput *
+tdm_display_voutput_create(tdm_display *dpy, const char *name, tdm_error *error)
+{
+ tdm_private_module *private_module = NULL;
+ tdm_private_module *current_module = NULL;
+ tdm_private_voutput *private_voutput = NULL;
+ tdm_private_output *private_output = NULL;
+ tdm_func_display *func_display = NULL;
+ tdm_func_voutput *func_voutput = NULL;
+ tdm_voutput *voutput_backend = NULL;
+ tdm_output *output_backend = NULL;
+ int output_find = 0;
+ tdm_private_display *private_display;
+ tdm_error ret = TDM_ERROR_NONE;
+
+ TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(dpy != NULL, TDM_ERROR_INVALID_PARAMETER, NULL);
+ private_display = (tdm_private_display*)dpy;
+ private_module = private_display->virtual_module;
+ TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(private_module != NULL, TDM_ERROR_BAD_MODULE, NULL);
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ if (error) *error = TDM_ERROR_NONE;
+
+ private_voutput = calloc(1, sizeof(tdm_private_voutput));
+ if (!private_voutput) {
+ if (error) *error = TDM_ERROR_OUT_OF_MEMORY;
+ _pthread_mutex_unlock(&private_display->lock);
+ return NULL;
+ }
+
+ func_display = &private_module->func_display;
+ func_voutput = &private_module->func_voutput;
+ current_module = private_display->current_module;
+ private_display->current_module = private_module;
+
+ voutput_backend = func_display->display_voutput_create(private_module->bdata, name, &ret);
+
+ if (voutput_backend == NULL || ret != TDM_ERROR_NONE) {
+ TDM_ERR("display_voutput_create fail");
+ free(private_voutput);
+ if (error) *error = ret;
+ private_display->current_module = current_module;
+ _pthread_mutex_unlock(&private_display->lock);
+ return NULL;
+ }
+ private_voutput->voutput_backend = voutput_backend;
+ private_voutput->private_display = private_display;
+ private_voutput->private_module = private_module;
+ LIST_INITHEAD(&private_voutput->voutput_commit_handler_list);
+
+ output_backend = func_voutput->voutput_get_output(voutput_backend, &ret);
+ if (output_backend == NULL || ret != TDM_ERROR_NONE) {
+ TDM_ERR("voutput_get_output fail");
+ free(private_voutput);
+ if (error) *error = ret;
+ if (func_voutput->voutput_destroy)
+ func_voutput->voutput_destroy(voutput_backend);
+ else
+ TDM_ERR("no destroy function");
+ private_display->current_module = current_module;
+ _pthread_mutex_unlock(&private_display->lock);
+ return NULL;
+ }
+
+ ret = tdm_display_update_output(private_display->current_module, output_backend);
+ if (ret != TDM_ERROR_NONE) {
+ TDM_ERR("tdm_display_update_output fail");
+ free(private_voutput);
+ if (func_voutput->voutput_destroy)
+ func_voutput->voutput_destroy(voutput_backend);
+ else
+ TDM_ERR("no destroy function");
+ if (error) *error = ret;
+ private_display->current_module = current_module;
+ _pthread_mutex_unlock(&private_display->lock);
+ return NULL;
+ }
+
+ LIST_FOR_EACH_ENTRY(private_output, &private_module->output_list, link) {
+ if (private_output->output_backend == output_backend) {
+ output_find = 1;
+ break;
+ }
+ }
+
+ if (output_find != 1) {
+ private_output = NULL;
+ free(private_voutput);
+ if (func_voutput->voutput_destroy)
+ func_voutput->voutput_destroy(voutput_backend);
+ else
+ TDM_ERR("no destroy function");
+ private_voutput = NULL;
+ } else {
+ strncpy(private_voutput->name, name, TDM_NAME_LEN - 1);
+ private_voutput->name[TDM_NAME_LEN - 1] = '\0';
+ strncpy(private_output->name, name, TDM_NAME_LEN - 1);
+ private_output->name[TDM_NAME_LEN - 1] = '\0';
+
+ private_voutput->private_output = private_output;
+ private_output->private_voutput = private_voutput;
+
+ /* do not use vblank */
+ tdm_output_choose_commit_per_vblank_mode(private_output, 0);
+
+ LIST_ADDTAIL(&private_voutput->link, &private_module->voutput_list);
+ }
+
+ private_display->current_module = current_module;
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return private_voutput;
+}
return TDM_ERROR_NONE;
}
-INTERN tdm_voutput *
-tdm_voutput_create(tdm_display *dpy, const char *name, tdm_error *error)
-{
- tdm_private_module *private_module = NULL;
- tdm_private_module *current_module = NULL;
- tdm_private_voutput *private_voutput = NULL;
- tdm_private_output *private_output = NULL;
- tdm_func_display *func_display = NULL;
- tdm_func_voutput *func_voutput = NULL;
- tdm_voutput *voutput_backend = NULL;
- tdm_output *output_backend = NULL;
- int output_find = 0;
- tdm_private_display *private_display;
- tdm_error ret = TDM_ERROR_NONE;
-
- TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(dpy != NULL, TDM_ERROR_INVALID_PARAMETER, NULL);
- private_display = (tdm_private_display*)dpy;
- private_module = private_display->virtual_module;
- TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(private_module != NULL, TDM_ERROR_BAD_MODULE, NULL);
-
- _pthread_mutex_lock(&private_display->lock);
-
- if (error) *error = TDM_ERROR_NONE;
-
- private_voutput = calloc(1, sizeof(tdm_private_voutput));
- if (!private_voutput) {
- if (error) *error = TDM_ERROR_OUT_OF_MEMORY;
- _pthread_mutex_unlock(&private_display->lock);
- return NULL;
- }
-
- func_display = &private_module->func_display;
- func_voutput = &private_module->func_voutput;
- current_module = private_display->current_module;
- private_display->current_module = private_module;
-
- voutput_backend = func_display->voutput_create(private_module->bdata, name, &ret);
-
- if (voutput_backend == NULL || ret != TDM_ERROR_NONE) {
- TDM_ERR("voutput_create fail");
- free(private_voutput);
- if (error) *error = ret;
- private_display->current_module = current_module;
- _pthread_mutex_unlock(&private_display->lock);
- return NULL;
- }
- private_voutput->voutput_backend = voutput_backend;
- private_voutput->private_display = private_display;
- private_voutput->private_module = private_module;
- LIST_INITHEAD(&private_voutput->voutput_commit_handler_list);
-
- output_backend = func_voutput->voutput_get_output(voutput_backend, &ret);
- if (output_backend == NULL || ret != TDM_ERROR_NONE) {
- TDM_ERR("voutput_get_output fail");
- free(private_voutput);
- if (error) *error = ret;
- if (func_voutput->voutput_destroy)
- func_voutput->voutput_destroy(voutput_backend);
- else
- TDM_ERR("no destroy function");
- private_display->current_module = current_module;
- _pthread_mutex_unlock(&private_display->lock);
- return NULL;
- }
-
- ret = tdm_display_update_output(private_display->current_module, output_backend);
- if (ret != TDM_ERROR_NONE) {
- TDM_ERR("tdm_display_update_output fail");
- free(private_voutput);
- if (func_voutput->voutput_destroy)
- func_voutput->voutput_destroy(voutput_backend);
- else
- TDM_ERR("no destroy function");
- if (error) *error = ret;
- private_display->current_module = current_module;
- _pthread_mutex_unlock(&private_display->lock);
- return NULL;
- }
-
- LIST_FOR_EACH_ENTRY(private_output, &private_module->output_list, link) {
- if (private_output->output_backend == output_backend) {
- output_find = 1;
- break;
- }
- }
-
- if (output_find != 1) {
- private_output = NULL;
- free(private_voutput);
- if (func_voutput->voutput_destroy)
- func_voutput->voutput_destroy(voutput_backend);
- else
- TDM_ERR("no destroy function");
- private_voutput = NULL;
- } else {
- strncpy(private_voutput->name, name, TDM_NAME_LEN - 1);
- private_voutput->name[TDM_NAME_LEN - 1] = '\0';
- strncpy(private_output->name, name, TDM_NAME_LEN - 1);
- private_output->name[TDM_NAME_LEN - 1] = '\0';
-
- private_voutput->private_output = private_output;
- private_output->private_voutput = private_voutput;
-
- /* do not use vblank */
- tdm_output_choose_commit_per_vblank_mode(private_output, 0);
-
- LIST_ADDTAIL(&private_voutput->link, &private_module->voutput_list);
- }
-
- private_display->current_module = current_module;
-
- _pthread_mutex_unlock(&private_display->lock);
-
- return private_voutput;
-}
-
INTERN tdm_error
tdm_voutput_destroy(tdm_voutput *voutput)
{
/* virtual */
tdm_voutput *
-tdm_voutput_create(tdm_display *dpy, const char *name, tdm_error *error);
+tdm_display_voutput_create(tdm_display *dpy, const char *name, tdm_error *error);
tdm_error
tdm_voutput_destroy(tdm_voutput *voutput);
tdm_error
return;
}
- voutput = tdm_voutput_create(private_server->private_loop->dpy, name, &ret);
+ voutput = tdm_display_voutput_create(private_server->private_loop->dpy, name, &ret);
if (!voutput) {
TDM_ERR("voutput creation fail(%s)(%d).", name, ret);
wl_resource_post_error(resource, WL_DISPLAY_ERROR_NO_MEMORY,