X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=backends%2Fvirtual%2Ftdm_virtual.h;h=cc36d58233740b2a35bc770a886b3dbe4296a979;hb=ceeb07117433a7aaecc0041df8162f43fd8e06de;hp=0a5c3776ef8ad60fe5fa0c41bda10345a0af6ee1;hpb=398989bae0addb8c17264d1bee02509fafcd101d;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/backends/virtual/tdm_virtual.h b/backends/virtual/tdm_virtual.h index 0a5c377..cc36d58 100644 --- a/backends/virtual/tdm_virtual.h +++ b/backends/virtual/tdm_virtual.h @@ -52,12 +52,50 @@ 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_hwc *virtual_output_get_hwc(tdm_output *output, tdm_error *error); +tdm_hwc_window *virtual_hwc_create_window(tdm_hwc *hwc, tdm_error *error); +tdm_error virtual_hwc_get_video_supported_formats(tdm_output *output, const tbm_format **formats, int *count); +tdm_error virtual_hwc_get_capabilities(tdm_hwc *hwc, tdm_hwc_capability *capabilities); +tdm_error virtual_hwc_get_available_properties(tdm_hwc *hwc, const tdm_prop **props, int *count); +tbm_surface_queue_h virtual_hwc_get_client_target_buffer_queue(tdm_hwc *hwc, tdm_error *error); +tdm_error virtual_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h buffer, tdm_region damage); +tdm_error virtual_hwc_validate(tdm_hwc *hwc, tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types); +tdm_error virtual_hwc_get_changed_composition_types(tdm_hwc *hwc, uint32_t *num_elements, tdm_hwc_window **hwc_wnds, tdm_hwc_window_composition *composition_types); +tdm_error virtual_hwc_accept_validation(tdm_hwc *hwc); +tdm_error virtual_hwc_commit(tdm_hwc *hwc, int sync, void *user_data); +tdm_error virtual_hwc_set_commit_handler(tdm_hwc *hwc, tdm_hwc_commit_handler func); + +void virtual_hwc_window_destroy(tdm_hwc_window *hwc_window); +tdm_error virtual_hwc_window_set_composition_type(tdm_hwc_window *hwc_window, tdm_hwc_window_composition composition_type); +tdm_error virtual_hwc_window_set_buffer_damage(tdm_hwc_window *hwc_window, tdm_region damage); +tdm_error virtual_hwc_window_set_info(tdm_hwc_window *hwc_window, tdm_hwc_window_info *info); +tdm_error virtual_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h surface); +tdm_error virtual_hwc_window_set_property(tdm_hwc_window *hwc_window, unsigned int id, tdm_value value); +tdm_error virtual_hwc_window_get_property(tdm_hwc_window *hwc_window, unsigned int id, tdm_value *value); +tdm_error virtual_hwc_window_get_constraints(tdm_hwc_window *hwc_window, int *constraints); +tdm_error virtual_hwc_window_set_name(tdm_hwc_window *hwc_window, const char *name); + 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_layer_get_info(tdm_layer *layer, tdm_info_layer *info); tdm_error virtual_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer); tdm_error virtual_layer_unset_buffer(tdm_layer *layer); +#define C(b,m) (((b) >> (m)) & 0xFF) +#define B(c,s) ((((unsigned int)(c)) & 0xff) << (s)) +#define FOURCC(a,b,c,d) (B(d,24) | B(c,16) | B(b,8) | B(a,0)) +#define FOURCC_STR(id) C(id,0), C(id,8), C(id,16), C(id,24) + +#define IS_RGB(format) (format == TBM_FORMAT_XRGB8888 || format == TBM_FORMAT_ARGB8888 || \ + format == TBM_FORMAT_XBGR8888 || format == TBM_FORMAT_ABGR8888) + +#define RETURN_IF_FAIL(cond) { \ + if (!(cond)) { \ + TDM_ERR("'%s' failed", #cond); \ + return; \ + } \ +} + #define RETURN_VAL_IF_FAIL(cond, val) {\ if (!(cond)) {\ TDM_ERR("'%s' failed", #cond);\ @@ -72,16 +110,140 @@ tdm_error virtual_layer_unset_buffer(tdm_layer *layer); }\ } -typedef struct _tdm_virtual_data { +typedef struct _tdm_virtual_data tdm_virtual_data; +typedef struct _tdm_virtual_output_data tdm_virtual_output_data; +typedef struct _tdm_virtual_hwc_data tdm_virtual_hwc_data; +typedef struct _tdm_virtual_hwc_window_data tdm_virtual_hwc_window_data; +typedef struct _tdm_virtual_voutput_data tdm_virtual_voutput_data; +typedef struct _tdm_virtual_layer_data tdm_virtual_layer_data; +typedef struct _tdm_virtual_event_data tdm_virtual_event_data; + +typedef enum { + TDM_VIRTUAL_EVENT_TYPE_WAIT, + TDM_VIRTUAL_EVENT_TYPE_COMMIT, + TDM_VIRTUAL_EVENT_TYPE_VCOMMIT, +} tdm_virtual_event_type; + +struct _tdm_virtual_data { tdm_display *dpy; + int hwc_mode; int pipe[2]; struct list_head voutput_list; struct list_head output_list; struct list_head buffer_list; -} tdm_virtual_data; +}; -void tdm_virtual_display_destroy_output_list(tdm_virtual_data *virtual_data); +struct _tdm_virtual_output_data { + struct list_head link; + + /* data which are fixed at initializing */ + tdm_virtual_data *virtual_data; + tdm_virtual_voutput_data *voutput_data; + + char name[TDM_NAME_LEN]; /* output name */ + uint32_t pipe; + tdm_output_type connector_type; + struct list_head layer_list; + tdm_virtual_layer_data *primary_layer; + + tdm_output_dpms dpms; + + /* not fixed data below */ + tdm_output_vblank_handler vblank_func; + tdm_output_commit_handler commit_func; + void *commit_user_data; + + tdm_output_conn_status status; + tdm_output_status_handler status_func; + void *status_user_data; + + int mode_changed; + const tdm_output_mode *current_mode; + + tdm_event_loop_source *timer; + unsigned int timer_waiting; + struct list_head timer_event_list; + + /* hwc data */ + int hwc_enable; + tdm_virtual_hwc_data *hwc_data; +}; + +struct _tdm_virtual_hwc_data { + tdm_virtual_hwc_window_data *target_hwc_window; + + int need_validate; + int need_target_window; + int need_set_crtc; + + int target_window_zpos; + tdm_virtual_output_data *output_data; + struct list_head hwc_window_list; + + tdm_hwc_commit_handler commit_func; +}; + +struct _tdm_virtual_hwc_window_data { + struct list_head link; + + tdm_virtual_hwc_data *hwc_data; + + tdm_hwc_window_info info; + tbm_surface_h surface; + tdm_hwc_window_composition client_type; + tdm_hwc_window_composition validated_type; + int lzpos; + + char name[TDM_NAME_LEN]; +}; + +struct _tdm_virtual_voutput_data { + struct list_head link; + + /* data which are fixed at initializing */ + tdm_virtual_data *virtual_data; + tdm_virtual_output_data *output_data; + + char name[TDM_NAME_LEN]; /* output name */ + + tdm_voutput_commit_handler vcommit_func; + + tdm_output_mode *output_modes; + int mode_count; + + unsigned int mmwidth; + unsigned int mmheight; +}; + +struct _tdm_virtual_layer_data { + struct list_head link; + + /* data which are fixed at initializing */ + tdm_virtual_data *virtual_data; + tdm_virtual_output_data *output_data; + tdm_layer_capability capabilities; + int zpos; + + /* not fixed data below */ + tdm_info_layer info; + int info_changed; + + tbm_surface_h display_buffer; + int display_buffer_changed; +}; + +struct _tdm_virtual_event_data { + struct list_head link; + + tdm_virtual_event_type type; + tdm_virtual_output_data *output_data; + void *user_data; +}; + +void tdm_virtual_display_destroy_output_list(tdm_virtual_data *virtual_data); +tdm_virtual_layer_data *virtual_output_data_get_layer_data(tdm_virtual_output_data *output_data, int layer_zpos); +tdm_error virtual_hwc_initailize_target_window(tdm_hwc *hwc_data, int width, int height); #endif /* _TDM_VIRTUAL_H_ */