X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=evasimagesink%2Fsrc%2Fgstevasimagesink.h;h=163304428a6601c286dabb260690813347ae7d4f;hb=10d8c7c2b57632a0708f30fc5e417cccbb8f2a66;hp=1e2e19b90e26e08e241a82a58c32278992f8d441;hpb=e69270ac86b363e8806a1f81b56ec2593a972b44;p=framework%2Fmultimedia%2Fgst-plugins-ext0.10.git diff --git a/evasimagesink/src/gstevasimagesink.h b/evasimagesink/src/gstevasimagesink.h old mode 100644 new mode 100755 index 1e2e19b..1633044 --- a/evasimagesink/src/gstevasimagesink.h +++ b/evasimagesink/src/gstevasimagesink.h @@ -24,12 +24,17 @@ #ifndef __GST_EVASIMAGESINK_H__ #define __GST_EVASIMAGESINK_H__ +//#define USE_TBM_SURFACE +#define USE_FIMCC + #include #include #include #include -#include - +#ifdef USE_TBM_SURFACE +#include +#include +#endif G_BEGIN_DECLS /* #defines don't like whitespacey bits */ @@ -46,7 +51,71 @@ G_BEGIN_DECLS typedef struct _GstEvasImageSink GstEvasImageSink; typedef struct _GstEvasImageSinkClass GstEvasImageSinkClass; +#ifdef USE_TBM_SURFACE +typedef struct _GstEvasImageDisplayingBuffer GstEvasImageDisplayingBuffer; +typedef struct _GstEvasImageFlushBuffer GstEvasImageFlushBuffer; +typedef enum { + BUF_SHARE_METHOD_NONE = -1, + BUF_SHARE_METHOD_PADDR = 0, + BUF_SHARE_METHOD_FD, + BUF_SHARE_METHOD_TIZEN_BUFFER, + BUF_SHARE_METHOD_FLUSH_BUFFER +} buf_share_method_t; + +enum { + DEGREE_0 = 0, + DEGREE_90, + DEGREE_180, + DEGREE_270, + DEGREE_NUM, +}; + +enum { + DISP_GEO_METHOD_LETTER_BOX = 0, + DISP_GEO_METHOD_ORIGIN_SIZE, + DISP_GEO_METHOD_FULL_SCREEN, + DISP_GEO_METHOD_CROPPED_FULL_SCREEN, + DISP_GEO_METHOD_ORIGIN_SIZE_OR_LETTER_BOX, + DISP_GEO_METHOD_CUSTOM_DST_ROI, + DISP_GEO_METHOD_NUM, +}; + +enum { + FLIP_NONE = 0, + FLIP_HORIZONTAL, + FLIP_VERTICAL, + FLIP_BOTH, + FLIP_NUM +}; +struct buffer_info { + uint64_t usr_addr; + uint64_t size; + void *bo; + tbm_surface_h tbm_surf; +}; + +/* _GstEvasDisplayingBuffer + * + * buffer : manage ref count by got index through comparison + * bo : compare with buffer from codec for getting index + * n_buffer : compare with buffer from evas for getting index + * ref_count : decide whether it unref buffer or not in gst_evas_image_sink_fini/reset + */ +struct _GstEvasImageDisplayingBuffer { + GstBuffer *buffer; + void *bo; + tbm_surface_h tbm_surf; + int ref_count; +}; + +struct _GstEvasImageFlushBuffer { + void *bo; + tbm_surface_h tbm_surf; +}; +#define NATIVE_BUFFER_NUM 20 +#define SOURCE_BUFFER_NUM 8 +#endif struct _GstEvasImageSink { GstVideoSink element; @@ -56,12 +125,37 @@ struct _GstEvasImageSink Evas_Coord w; Evas_Coord h; gboolean object_show; + gchar update_visibility; gboolean gl_zerocopy; GstBuffer *oldbuf; gboolean is_evas_object_size_set; guint present_data_addr; +#ifdef USE_TBM_SURFACE + GMutex *display_buffer_lock; + GMutex *flow_lock; + GstEvasImageDisplayingBuffer displaying_buffer[NATIVE_BUFFER_NUM]; + GstVideoRectangle eo_size; + gboolean use_ratio; + guint rotate_angle; + guint display_geometry_method; + guint flip; + GstBuffer *prev_buf; + gint prev_index; + gint cur_index; + gboolean need_flush; + gboolean enable_flush_buffer; + GstEvasImageFlushBuffer *flush_buffer; + gint sent_buffer_cnt; + gint debuglog_cnt_showFrame; + gint debuglog_cnt_ecoreCbPipe; + + tbm_format tbm_surface_format; + struct buffer_info src_buffer_info[NATIVE_BUFFER_NUM]; + guint src_buf_idx; + gboolean is_buffer_allocated; +#endif }; struct _GstEvasImageSinkClass