X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Ftdm_backend.h;h=4075f7b50d417bc7bfd2283e9ccc9a49a858b081;hb=9bd49c10734de8b55679ecd3bb663200354bc5b7;hp=52d905669c1f77fa7727b8f352fd71e7e429326d;hpb=dc0f94dbd2d214c19b3811ed424647906be77f75;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/include/tdm_backend.h b/include/tdm_backend.h index 52d9056..4075f7b 100644 --- a/include/tdm_backend.h +++ b/include/tdm_backend.h @@ -150,8 +150,7 @@ typedef struct _tdm_caps_layer { int zpos; unsigned int format_count; /**< The count of available formats */ - tbm_format - *formats; /**< The @b newly-allocated array of formats. will be freed in frontend. */ + tbm_format *formats; /**< The @b newly-allocated array of formats. will be freed in frontend. */ unsigned int prop_count; /**< The count of available properties */ tdm_prop *props; /**< The @b newly-allocated array of properties. will be freed in frontend. */ @@ -335,7 +334,18 @@ typedef struct _tdm_func_display { */ tdm_pp *(*display_create_pp)(tdm_backend_data *bdata, tdm_error *error); - void (*reserved1)(void); + /** + * @brief Create a virtual output object of a backend module + * @param[in] bdata The backend module data + * @param[in] name The output name + * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value. + * @return A tdm_voutput object + * @see voutput_destroy() function + * @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); + void (*reserved2)(void); void (*reserved3)(void); void (*reserved4)(void); @@ -548,12 +558,118 @@ typedef struct _tdm_func_output { */ tdm_hwc *(*output_get_hwc)(tdm_output *output, tdm_error *error); + /** + * @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 #TDM_OUTPUT_CAPABILITY_MIRROR + */ + tdm_error (*output_set_mirror)(tdm_output *output, + tdm_output *src_output, + tdm_transform transform); + + void (*reserved4)(void); void (*reserved5)(void); void (*reserved6)(void); void (*reserved7)(void); void (*reserved8)(void); } tdm_func_output; +typedef struct _tdm_func_voutput { + /** + * @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 + * @remark + * A backend module doesn't need to implement this function if doesn't support virtual output. + */ + tdm_error (*voutput_destroy)(tdm_voutput *voutput); + + /** + * @brief Set available modes of a virtual output object + * @param[in] voutput A voutput object + * @param[in] modes Modes of voutput + * @param[in] count A count of modes + * @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_available_mode)(tdm_voutput *voutput, const tdm_output_mode *modes, int count); + + /** + * @brief Set physical size(mm) of a virtual output object + * @param[in] voutput A voutput object + * @param[in] mmwidth Width of voutput + * @param[in] mmheight Height of voutput + * @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_physical_size)(tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight); + + /** + * @brief Set connect status of a virtual output object + * @param[in] voutput A voutput object + * @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_connect)(tdm_voutput *voutput); + + /** + * @brief Set disconnect status of a virtual output object + * @param[in] voutput A voutput object + * @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_disconnect)(tdm_voutput *voutput); + + /** + * @brief Get output object from virtual output object + * @param[in] voutput A voutput object + * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value. + * @return A tdm_output object + * @remark + * A backend module doesn't need to implement this function if doesn't support virtual output. + */ + tdm_output *(*voutput_get_output)(tdm_voutput *voutput, tdm_error *error); + + /** + * @brief Set a user commit function + * @param[in] voutput A voutput object + * @param[in] func A user voutput commit function + * @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. + * If virtual output's output_commit is executed, call this voutput commit func. + */ + tdm_error (*voutput_set_commit_func)(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func); + + /** + * @brief Notify commit done to backend + * @param[in] voutput A voutput object + * @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_commit_done)(tdm_voutput *voutput); + + void (*reserved1)(void); + void (*reserved2)(void); + void (*reserved3)(void); + void (*reserved4)(void); + void (*reserved5)(void); + void (*reserved6)(void); +} tdm_func_voutput; /** * @brief The layer functions for a backend module. */ @@ -703,13 +819,22 @@ typedef struct _tdm_func_hwc { tdm_error (*hwc_get_video_supported_formats)(tdm_hwc *hwc, const tbm_format **formats, int *count); /** - * @brief Get the hwc video capability + * @brief Get the available video property array of a hwc object. * @param[in] hwc A hwc object - * @param[out] video_capability A hwc hwc video capability + * @param[out] props The available video property array + * @param[out] count The count of video properties * @return #TDM_ERROR_NONE if success. Otherwise, error value. */ - tdm_error (*hwc_get_video_capability)(tdm_hwc *hwc, - tdm_hwc_video_capability *video_capability); + tdm_error (*hwc_get_video_available_properties)(tdm_hwc *hwc, const tdm_prop **props, + int *count); + + /** + * @brief Get the hwc capabilities + * @param[in] hwc A hwc object + * @param[out] capabilities A hwc hwc capability + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + */ + tdm_error (*hwc_get_capabilities)(tdm_hwc *hwc, tdm_hwc_capability *capabilities); /** * @brief Get the available property array of a hwc object. @@ -733,29 +858,12 @@ typedef struct _tdm_func_hwc { /** * @brief Set the client(relative to the TDM) target buffer - * @details Sets the buffer which will receive the hwc of client composition. - * Window marked as TDM_COMPOSITION_CLIENT or TDM_COMPOSITION_DEVICE_CANDIDATE - * will be composited into this buffer prior to the call to hwc_commit(), - * and windows not marked as TDM_COMPOSITION_CLIENT and - * TDM_COMPOSITION_DEVICE_CANDIDATE should be composited with this buffer by the - * device. - * - * The buffer handle provided may be null if no windows are being composited by - * the client. This must not result in an error (unless an invalid display - * handle is also provided). - * - * The damage parameter describes a buffer damage region as defined in the - * description of hwc_window_set_buffer_damage(). - * - * Will be called before hwc_commit() if any of the layers are marked as - * TDM_COMPOSITION_CLIENT or TDM_COMPOSITION_DEVICE_CANDIDATE. If no layers are - * so marked, then it is not necessary to call this function. It is not necessary - * to call hwc_validate() after changing the target through this function. + * @details This function lets the backend know the target buffer. + * The target buffer contains the result of the gl composition with the + * tdm_hwc_windows which marked as TDM_HWC_WIN_COMPOSITION_CLIENT. * @param[in] hwc A hwc object - * @param[in] target The new target buffer + * @param[in] target_buffer The new target buffer * @param[in] damage The buffer damage region - * @param[in] composited_wnds The array of composited hwc_wnds - * @param[in] num_wnds The size of #composited_wnds array * @return #TDM_ERROR_NONE if success. Otherwise, error value. * @since 2.0.0 */ @@ -765,18 +873,19 @@ typedef struct _tdm_func_hwc { /** * @brief Validate the hwc - * @details Instructs the device to inspect all of the layer state and + * @details Instructs the backend to inspect all of the hw layer state and * determine if there are any composition type changes necessary before - * presenting the hwc. Permitted changes are described in the definition - * of tdm_composition_t above. + * presenting the hwc. * @param[in] hwc A hwc object - * @param[out] num_types The number of composition type changes required by - * the device; if greater than 0, the client must either set and validate new - * types, or call hwc_accept_changes() to accept the changes returned by - * hwc_get_changed_composition_types(); must be the same as the number of - * changes returned by hwc_get_changed_composition_types (see the - * declaration of that function for more information); pointer will be non-NULL + * @param[in] composited_wnds the hwc window list which is visible. + * @param[in] num_wnds the number of the visible windows in the composited_wnds + * @param[out] num_types The number of composition type changes * @return #TDM_ERROR_NONE if success. Otherwise, error value. + * @remark + * The backend has to return the num_types when the assgined comopsite types of + * the tdm_hwc_windows in the composited_wnds. If the num_types is greater than + * 0, the cleint must get the changed composite types of the tdm_hwc_windows + * and change the comopsite types * @since 2.0.0 */ tdm_error (*hwc_validate)(tdm_hwc *hwc, tdm_hwc_window **composited_wnds, @@ -784,23 +893,17 @@ typedef struct _tdm_func_hwc { /** * @brief Get changed composition types - * @details Retrieves the windows for which the device requires a different - * composition type than had been set prior to the last call to hwc_validate(). + * @details Retrieves the windows for which the backend requires a different + * composition types that had been set prior to the last call to tdm_hwc_validate(). * The client will either update its state with these types and call - * hwc_accept_changes, or will set new types and attempt to validate the - * display again. - * layers and types may be NULL to retrieve the number of elements which - * will be returned. The number of elements returned must be the same as the - * value returned in num_types from the last call to hwc_validate(). + * tdm_hwc_accept_validation, or will set new types and attempt to validate the + * display again. The number of elements returned must be the same as the + * value returned in num_types from the last call to tdm_hwc_validate(). * @param[in] hwc A hwc object - * @param[out] num_elements If windows or types were NULL, the number of layers - * and types which would have been returned; if both were non-NULL, the - * number of elements returned in layers and types, which must not exceed - * the value stored in num_elements prior to the call; pointer will be - * non-NULL + * @param[out] num_elements the number of hwc_windows * @param[out] windows An array of windows - * @param[out] composition_types An array of composition types, each - * corresponding to an element of windows + * @param[out] composition_types An array of composition types, each corresponding + * to an element of windows * @return #TDM_ERROR_NONE if success. Otherwise, error value. * @since 2.0.0 */ @@ -808,24 +911,17 @@ typedef struct _tdm_func_hwc { tdm_hwc_window **hwc_window, tdm_hwc_window_composition *composition_types); /** - * @brief Accepts the changes required by the device - * @details Accepts the changes required by the device from the previous - * hwc_validate() call (which may be queried using - * hwc_get_chaged_composition_types()) and revalidates the display. This - * function is equivalent to requesting the changed types from - * hwc_get_chaged_composition_types(), setting those types on the - * corresponding windows, and then calling hwc_validate again. - * After this call it must be valid to present this display. Calling this after - * hwc_validate() returns 0 changes must succeed with TDM_ERROR_NONE, but - * should have no other effect. + * @brief Accepts the validation required by the backend + * @details Accepts the validation required by the backend from the previous + * tdm_hwc_validate() and tdm_hwc_get_chaged_composition_types(). * @param[in] hwc A hwc object * @return #TDM_ERROR_NONE if success. Otherwise, error value. * @since 2.0.0 */ - tdm_error (*hwc_accept_changes)(tdm_hwc *hwc); + tdm_error (*hwc_accept_validation)(tdm_hwc *hwc); /** - * @brief Commit changes for a output object + * @brief Commit changes for a hwc object * @param[in] hwc A hwc object * @param[in] sync 0: asynchronous, 1:synchronous * @param[in] user_data The user data @@ -833,11 +929,11 @@ typedef struct _tdm_func_hwc { * @see hwc_set_commit_handler, tdm_hwc_commit_handler * @remark * When this function is called, a backend module @b SHOULD apply the all - * changes of the given output object to screen as well as the layer changes - * of this output. + * changes of the given hwc object to screen as well as the layer changes + * of this hwc. * If this function returns TDM_ERROR_NONE, a backend module @b SHOULD call * a user commit handler with the user data of this function after all - * changes of the given output object are applied. + * changes of the given hwc object are applied. */ tdm_error (*hwc_commit)(tdm_hwc *hwc, int sync, void *user_data); @@ -847,7 +943,25 @@ typedef struct _tdm_func_hwc { * @param[in] func A user commit handler * @return #TDM_ERROR_NONE if success. Otherwise, error value. */ - tdm_error (*hwc_set_commit_handler)(tdm_output *hwc, tdm_hwc_commit_handler func); + tdm_error (*hwc_set_commit_handler)(tdm_hwc *hwc, tdm_hwc_commit_handler func); + + /** + * @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; /** @@ -863,26 +977,28 @@ typedef struct _tdm_func_hwc_window { void (*hwc_window_destroy)(tdm_hwc_window *hwc_window); /** - * @brief Get a buffer queue for the window object + * @brief Acquire a buffer queue for the window object + * @details These buffers are used to composite by hardware a client content in + * the nocomp mode. * @param[in] hwc_window A window object * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value. * @return A buffer queue */ - tbm_surface_queue_h (*hwc_window_get_buffer_queue)(tdm_hwc_window *hwc_window, - tdm_error *error); + tbm_surface_queue_h (*hwc_window_acquire_buffer_queue)(tdm_hwc_window *hwc_window, + tdm_error *error); /** - * @brief Free a buffer queue for the window object - * @details Free buffer queue when the client no longer uses buferrs of queue. + * @brief Release a buffer queue for the window object + * @details Release buffer queue when the client no longer uses buferrs of queue. * @param[in] hwc_window A window object * @param[in] A tbm buffer queue */ - void (*hwc_window_free_buffer_queue)(tdm_hwc_window *hwc_window, - tbm_surface_queue_h queue); + void (*hwc_window_release_buffer_queue)(tdm_hwc_window *hwc_window, + tbm_surface_queue_h queue); /** * @brief Sets the desired composition type of the given window. - * @details During hwc_validate(), the device may request changes to + * @details During hwc_validate(), the backend may request changes to * the composition types of any of the layers as described in the definition * of tdm_hwc_window_composition_t above. * @param[in] hwc_window A window object @@ -917,8 +1033,7 @@ typedef struct _tdm_func_hwc_window { /** * @brief Set the information to a window object - * @details The information will be applied when the hwc object - * of a layer object is committed. + * @details The information will be applied when the hwc object is committed. * @param[in] hwc_window A window object * @param[in] info The geometry information * @return #TDM_ERROR_NONE if success. Otherwise, error value. @@ -927,34 +1042,21 @@ typedef struct _tdm_func_hwc_window { tdm_hwc_window_info *info); /** - * @brief Get the geometry information to a layer object - * @param[in] layer A layer object - * @param[out] info The geometry information - * @return #TDM_ERROR_NONE if success. Otherwise, error value. - */ - tdm_error (*hwc_window_get_info)(tdm_hwc_window *hwc_window, - tdm_hwc_window_info *info); - - /** * @brief Set a TDM buffer to a window object * @details A TDM buffer will be applied when the hwc object * of a layer object is committed. * @param[in] hwc_window A window object - * @param[in] buffer A TDM buffer + * @param[in] buffer A TBM buffer * @return #TDM_ERROR_NONE if success. Otherwise, error value. - * - * Implementation should return #TDM_ERROR_BUSY if #hwc_window can't - * be updated right now, this won't be interpreted like some critical - * error. */ tdm_error (*hwc_window_set_buffer)(tdm_hwc_window *hwc_window, tbm_surface_h buffer); /** * @brief Set the property which has a given id. - * @param[in] hwc window A hwc window object + * @param[in] hwc_window A hwc window object * @param[in] id The property id - * @param[in] value The value + * @param[in] value The value of the propery id * @return #TDM_ERROR_NONE if success. Otherwise, error value. */ tdm_error (*hwc_window_set_property)(tdm_hwc_window *hwc_window, @@ -962,22 +1064,43 @@ typedef struct _tdm_func_hwc_window { /** * @brief Get the property which has a given id. - * @param[in] hwc window A hwc window object + * @param[in] hwc_window A hwc window object * @param[in] id The property id - * @param[out] value The value + * @param[out] value The value of the propery id * @return #TDM_ERROR_NONE if success. Otherwise, error value. */ tdm_error (*hwc_window_get_property)(tdm_hwc_window *hwc_window, uint32_t id, tdm_value *value); /** - * @brief Get the preperation type of hwc_window - * @param[in] hwc window A hwc window object - * @param[out] preperation_types The tdm_hwc_window_preparation types + * @brief Get the constraints of hwc_window + * @param[in] hwc_window A hwc window object + * @param[out] constraints The tdm_hwc_window_constraint types + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + */ + tdm_error (*hwc_window_get_constraints)(tdm_hwc_window *hwc_window, + int *constraints); + + /** + * @brief Set the name of hwc_window + * @param[in] hwc_window A hwc window object + * @param[in] name of the hwc_window + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + */ + tdm_error (*hwc_window_set_name)(tdm_hwc_window *hwc_window, + const char *name); + + /** + * @brief Get buffer flags of cursor hwc_window + * @param[in] hwc_window A hwc window object + * @param[in] width of the cursor image + * @param[in] height of the cursor image + * @param[in] stride of the cursor image + * @param[in] virtual address of the cursor image * @return #TDM_ERROR_NONE if success. Otherwise, error value. */ - tdm_error (*hwc_window_get_preparation_types)(tdm_hwc_window *hwc_window, - int *preperation_types); + tdm_error (*hwc_window_set_cursor_image)(tdm_hwc_window *hwc_window, + int width, int height, int stride, void *ptr); } tdm_func_hwc_window; /** @@ -1228,6 +1351,18 @@ tdm_backend_register_func_output(tdm_display *dpy, tdm_func_output *func_output); /** + * @brief Register the backend voutput functions to a display + * @param[in] dpy A display object + * @param[in] func_voutput voutput functions + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + * @see tdm_backend_register_func_display, tdm_backend_register_func_output + * @remarks + * A backend module doesn't need to implement this function if doesn't support virtual output. + */ +tdm_error +tdm_backend_register_func_voutput(tdm_display *dpy, tdm_func_voutput *func_voutput); + +/** * @brief Register the backend layer functions to a display * @param[in] dpy A display object * @param[in] func_layer layer functions @@ -1293,6 +1428,26 @@ tdm_backend_register_func_capture(tdm_display *dpy, tdm_func_capture *func_capture); /** + * @brief Register the backend output to a display + * @param[in] dpy A display object + * @param[in] output A backend output object + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + * @see tdm_backend_unregister_output + */ +tdm_error +tdm_backend_register_output(tdm_display *dpy, tdm_output *output); + +/** + * @brief Unregister the backend output to a display + * @param[in] dpy A display object + * @param[in] output A backend output object + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + * @see tdm_backend_register_output + */ +void +tdm_backend_unregister_output(tdm_display *dpy, tdm_output *output); + +/** * @brief Increase the ref_count of a TDM buffer * @details * TDM has its own buffer release mechanism to let an frontend user know when a TDM buffer