tdm_display_get_output(tdm_display *dpy, int index, tdm_error *error);
/**
+ * @brief Find a output object which has the given name.
+ * @param[in] dpy A display object
+ * @param[in] name The name of a output object
+ * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @return A output object if success. Otherwise, NULL.
+ */
+tdm_output *
+tdm_display_find_output(tdm_display *dpy, const char *name, tdm_error *error);
+
+/**
* @brief Create a pp object.
* @param[in] dpy A display object
* @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value.
return NULL;
}
+EXTERN tdm_output *
+tdm_display_find_output(tdm_display *dpy, const char *name, tdm_error *error)
+{
+ tdm_private_backend *private_backend = NULL;
+ tdm_private_output *private_output = NULL;
+
+ DISPLAY_FUNC_ENTRY_ERROR();
+
+ if (!strncasecmp(name, "primary", 7) || !strncasecmp(name, "default", 7)) {
+ return tdm_display_get_output(dpy, 0, error);
+ }
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ if (error)
+ *error = TDM_ERROR_NONE;
+
+ LIST_FOR_EACH_ENTRY(private_backend, &private_display->backend_list, link) {
+ LIST_FOR_EACH_ENTRY(private_output, &private_backend->output_list, link) {
+ if (strncmp(private_output->caps.model, name, TDM_NAME_LEN))
+ continue;
+ _pthread_mutex_unlock(&private_display->lock);
+ return private_output;
+ }
+ }
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return NULL;
+}
+
EXTERN tdm_error
tdm_display_get_fd(tdm_display *dpy, int *fd)
{
fclose(h);
}
-static tdm_output*
-_tdm_server_find_output(tdm_private_server *private_server, const char *name)
-{
- tdm_private_loop *private_loop = private_server->private_loop;
- tdm_output *found = NULL;
-
- if (!strncasecmp(name, "primary", 7) || !strncasecmp(name, "default", 7))
- found = tdm_display_get_output(private_loop->dpy, 0, NULL);
-
- if (!found) {
- int count = 0, i;
-
- tdm_display_get_output_count(private_loop->dpy, &count);
-
- for (i = 0; i < count; i++) {
- tdm_output *output = tdm_display_get_output(private_loop->dpy, i, NULL);
- tdm_output_conn_status status;
- const char *model = NULL;
- tdm_error ret;
-
- ret = tdm_output_get_conn_status(output, &status);
- if (ret || status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
- continue;
-
- ret = tdm_output_get_model_info(output, NULL, &model, NULL);
- if (ret || !model)
- continue;
-
- if (strncmp(model, name, TDM_NAME_LEN))
- continue;
-
- found = output;
- break;
- }
- }
-
- return found;
-}
-
/* LCOV_EXCL_START */
static void
_tdm_server_send_done(tdm_server_wait_info *wait_info, tdm_error error,
tdm_output_conn_status status = TDM_OUTPUT_CONN_STATUS_DISCONNECTED;
tdm_error ret;
- output = _tdm_server_find_output(private_server, name);
+ output = tdm_display_find_output(private_server->private_loop->dpy, name, NULL);
if (!output) {
/* LCOV_EXCL_START */