tbm_format
*formats; /**< The @b newly-allocated array. will be freed in frontend. */
- int min_w; /**< The minimun width */
- int min_h; /**< The minimun height */
- int max_w; /**< The maximum width */
- int max_h; /**< The maximum height */
- int preferred_align; /**< The prefered align */
+ int min_w; /**< The minimun width */
+ int min_h; /**< The minimun height */
+ int max_w; /**< The maximum width */
+ int max_h; /**< The maximum height */
+ int preferred_align; /**< The prefered align */
+ int preferred_align_vertical; /**< The prefered align vertical */
/**< The attach count which a PP object can handle. @since 1.2.0 */
int max_attach_count;
* @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);
* #output_set_dpms_handler, a backend module needs to call the output dpms handler
* to let the TDM frontend know the output DPMS change indeed.
* @param[in] dpms_value DPMS value
+ * @param[out] sync A flag for sync call
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
* @see #output_set_dpms_handler, #TDM_OUTPUT_CAPABILITY_ASYNC_DPMS
* @since 1.7.0
*/
- tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value);
+ tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value, int *sync);
/**
* @brief Get a hwc object of a output object
*/
tdm_hwc *(*output_get_hwc)(tdm_output *output, tdm_error *error);
- void (*reserved3)(void);
+ /**
+ * @brief Set the mirror image of the src_output to the output
+ * @details This function set the mirro image of the src_output to the output.
+ * If there is the hardware or the implementation to display the mirror image
+ * of the src_output to the output, the backend does it in this function.
+ * If the backend output gets the ability of the mirror displaying, it has to
+ * set the TDM_OUTPUT_CAPABILITY_MIRROR on the output capability.
+ * @param[in] output A output object to display the src_output image
+ * @param[in] src_output A src output object of which image is displayed on the output
+ * @param[in] transform A transform value
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @see #output_set_mirror, #TDM_OUTPUT_CAPABILITY_MIRROR
+ */
+ tdm_error (*output_set_mirror)(tdm_output *output,
+ tdm_output *src_output,
+ tdm_transform transform);
+ /**
+ * @brief Unset the mirror image
+ * @details This function unset the mirro image of the output.
+ * @param[in] output A output object to display the src_output image
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @see #output_set_mirror, #TDM_OUTPUT_CAPABILITY_MIRROR
+ */
+ tdm_error (*output_unset_mirror)(tdm_output *output);
+
void (*reserved4)(void);
void (*reserved5)(void);
void (*reserved6)(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.
*/
*/
tdm_error (*voutput_commit_done)(tdm_voutput *voutput);
- void (*reserved1)(void);
+ /**
+ * @brief Set target buffer queue flag of a virtual output's hwc object
+ * @param[in] voutput A voutput object
+ * @param[in] flags Flags of target buffer queue
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @remark
+ * A backend module doesn't need to implement this function if doesn't support virtual output.
+ */
+ tdm_error (*voutput_set_target_buffer_queue_flag)(tdm_voutput *voutput, int flags);
+
void (*reserved2)(void);
void (*reserved3)(void);
void (*reserved4)(void);
tdm_region damage);
/**
+ * @brief Set the acquire fence of client(relative to the TDM) target buffer
+ * @param[in] hwc A output hwc
+ * @param[in] acquire_fence The acquire fence fd of target
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ * @since 2.0.0
+ */
+ tdm_error (*hwc_set_client_target_acquire_fence)(tdm_hwc *hwc,
+ int acquire_fence);
+
+
+ /**
* @brief Validate the hwc
* @details Instructs the backend to inspect all of the hw layer state and
* determine if there are any composition type changes necessary before
* @return #TDM_ERROR_NONE if success. Otherwise, error value.
*/
tdm_error (*hwc_set_commit_handler)(tdm_hwc *hwc, tdm_hwc_commit_handler func);
+
+ /**
+ * @brief Get commit fence
+ * @details After all change of a window object are applied about last tdm_hwc_commit,
+ * the fence is signaled.
+ * @param[in] hwc A hwc object
+ * @param[out] commit_fence the commit fence fd of tdm_hwc_commit
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+ tdm_error (*hwc_get_commit_fence)(tdm_hwc *hwc, int *commit_fence);
+
+ /**
+ * @brief Set the property which has a given id on the hwc object.
+ * @param[in] hwc A hwc object
+ * @param[in] id The property id
+ * @param[in] value The value of the propery id
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+ tdm_error (*hwc_set_property)(tdm_hwc *hwc, uint32_t id, tdm_value value);
+
+ /**
+ * @brief Get the property which has a given id on the hwc object.
+ * @param[in] hwc A hwc object
+ * @param[in] id The property id
+ * @param[in] value The value of the propery id
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+ tdm_error (*hwc_get_property)(tdm_hwc *hwc, uint32_t id, tdm_value *value);
} tdm_func_hwc;
/**
*/
tdm_error (*hwc_window_set_cursor_image)(tdm_hwc_window *hwc_window,
int width, int height, int stride, void *ptr);
+
+ /**
+ * @brief Set the acquire fence of hwc_window
+ * @param[in] hwc_window A hwc window object
+ * @param[in] acquire_fence the acquire fence fd of a hwc window object
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+ tdm_error (*hwc_window_set_acquire_fence)(tdm_hwc_window *hwc_window,
+ int acquire_fence);
} tdm_func_hwc_window;
/**