Initialize Tizen 2.3
[framework/multimedia/gst-plugins-base0.10.git] / wearable / ext / pango / gsttextoverlay.h
1 #ifndef __GST_TEXT_OVERLAY_H__
2 #define __GST_TEXT_OVERLAY_H__
3
4 #include <gst/gst.h>
5 #include <gst/video/video.h>
6 #include <gst/video/video-overlay-composition.h>
7 #include <gst/controller/gstcontroller.h>
8 #include <pango/pangocairo.h>
9
10 G_BEGIN_DECLS
11
12 #define GST_TYPE_TEXT_OVERLAY            (gst_text_overlay_get_type())
13 #define GST_TEXT_OVERLAY(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),\
14                                          GST_TYPE_TEXT_OVERLAY, GstTextOverlay))
15 #define GST_TEXT_OVERLAY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),\
16                                          GST_TYPE_TEXT_OVERLAY,GstTextOverlayClass))
17 #define GST_TEXT_OVERLAY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),\
18                                          GST_TYPE_TEXT_OVERLAY, GstTextOverlayClass))
19 #define GST_IS_TEXT_OVERLAY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
20                                          GST_TYPE_TEXT_OVERLAY))
21 #define GST_IS_TEXT_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
22                                          GST_TYPE_TEXT_OVERLAY))
23
24 typedef struct _GstTextOverlay      GstTextOverlay;
25 typedef struct _GstTextOverlayClass GstTextOverlayClass;
26
27 /**
28  * GstTextOverlayVAlign:
29  * @GST_TEXT_OVERLAY_VALIGN_BASELINE: draw text on the baseline
30  * @GST_TEXT_OVERLAY_VALIGN_BOTTOM: draw text on the bottom
31  * @GST_TEXT_OVERLAY_VALIGN_TOP: draw text on top
32  * @GST_TEXT_OVERLAY_VALIGN_POS: draw text according to the #GstTextOverlay:ypos property
33  * @GST_TEXT_OVERLAY_VALIGN_CENTER: draw text vertically centered
34  *
35  * Vertical alignment of the text.
36  */
37 typedef enum {
38     GST_TEXT_OVERLAY_VALIGN_BASELINE,
39     GST_TEXT_OVERLAY_VALIGN_BOTTOM,
40     GST_TEXT_OVERLAY_VALIGN_TOP,
41     GST_TEXT_OVERLAY_VALIGN_POS,
42     GST_TEXT_OVERLAY_VALIGN_CENTER
43 } GstTextOverlayVAlign;
44
45 /**
46  * GstTextOverlayHAlign:
47  * @GST_TEXT_OVERLAY_HALIGN_LEFT: align text left
48  * @GST_TEXT_OVERLAY_HALIGN_CENTER: align text center
49  * @GST_TEXT_OVERLAY_HALIGN_RIGHT: align text right
50  * @GST_TEXT_OVERLAY_HALIGN_POS: position text according to the #GstTextOverlay:xpos property
51  *
52  * Horizontal alignment of the text.
53  */
54 /* FIXME 0.11: remove GST_TEXT_OVERLAY_HALIGN_UNUSED */
55 typedef enum {
56     GST_TEXT_OVERLAY_HALIGN_LEFT,
57     GST_TEXT_OVERLAY_HALIGN_CENTER,
58     GST_TEXT_OVERLAY_HALIGN_RIGHT,
59     GST_TEXT_OVERLAY_HALIGN_UNUSED,
60     GST_TEXT_OVERLAY_HALIGN_POS
61 } GstTextOverlayHAlign;
62
63 /**
64  * GstTextOverlayWrapMode:
65  * @GST_TEXT_OVERLAY_WRAP_MODE_NONE: no wrapping
66  * @GST_TEXT_OVERLAY_WRAP_MODE_WORD: do word wrapping
67  * @GST_TEXT_OVERLAY_WRAP_MODE_CHAR: do char wrapping
68  * @GST_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR: do word and char wrapping
69  *
70  * Whether to wrap the text and if so how.
71  */
72 typedef enum {
73     GST_TEXT_OVERLAY_WRAP_MODE_NONE = -1,
74     GST_TEXT_OVERLAY_WRAP_MODE_WORD = PANGO_WRAP_WORD,
75     GST_TEXT_OVERLAY_WRAP_MODE_CHAR = PANGO_WRAP_CHAR,
76     GST_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR = PANGO_WRAP_WORD_CHAR
77 } GstTextOverlayWrapMode;
78
79 /**
80  * GstTextOverlayLineAlign:
81  * @GST_TEXT_OVERLAY_LINE_ALIGN_LEFT: lines are left-aligned
82  * @GST_TEXT_OVERLAY_LINE_ALIGN_CENTER: lines are center-aligned
83  * @GST_TEXT_OVERLAY_LINE_ALIGN_RIGHT: lines are right-aligned
84  *
85  * Alignment of text lines relative to each other
86  */
87 typedef enum {
88     GST_TEXT_OVERLAY_LINE_ALIGN_LEFT = PANGO_ALIGN_LEFT,
89     GST_TEXT_OVERLAY_LINE_ALIGN_CENTER = PANGO_ALIGN_CENTER,
90     GST_TEXT_OVERLAY_LINE_ALIGN_RIGHT = PANGO_ALIGN_RIGHT
91 } GstTextOverlayLineAlign;
92
93 /**
94  * GstTextOverlay:
95  *
96  * Opaque textoverlay object structure
97  */
98 struct _GstTextOverlay {
99     GstElement                  element;
100
101     GstPad                     *video_sinkpad;
102     GstPad                     *text_sinkpad;
103     GstPad                     *srcpad;
104
105     GstSegment                  segment;
106     GstSegment                  text_segment;
107     GstBuffer                  *text_buffer;
108     gboolean                    text_linked;
109     gboolean                    video_flushing;
110     gboolean                    video_eos;
111     gboolean                    text_flushing;
112     gboolean                    text_eos;
113
114     GCond                      *cond;  /* to signal removal of a queued text
115                                      * buffer, arrival of a text buffer,
116                                      * a text segment update, or a change
117                                      * in status (e.g. shutdown, flushing) */
118
119     gint                        width;
120     gint                        height;
121     gint                        fps_n;
122     gint                        fps_d;
123     GstVideoFormat              format;
124
125     GstTextOverlayVAlign        valign;
126     GstTextOverlayHAlign        halign;
127     GstTextOverlayWrapMode      wrap_mode;
128     GstTextOverlayLineAlign     line_align;
129
130     gint                        xpad;
131     gint                        ypad;
132     gint                        deltax;
133     gint                        deltay;
134     gdouble                     xpos;
135     gdouble                     ypos;
136     gchar                      *default_text;
137     gboolean                    want_shading;
138     gboolean                    silent;
139     gboolean                    wait_text;
140     guint                       color, outline_color;
141
142     PangoLayout                *layout;
143     gdouble                     shadow_offset;
144     gboolean                    want_shadow;
145     gdouble                     outline_offset;
146     GstBuffer                  *text_image;
147     gint                        image_width;
148     gint                        image_height;
149     gint                        baseline_y;
150
151     gboolean                    auto_adjust_size;
152     gboolean                    need_render;
153
154     gint                        shading_value;  /* for timeoverlay subclass */
155
156     gboolean                    have_pango_markup;
157     gboolean                    use_vertical_render;
158
159     gboolean                    attach_compo_to_buffer;
160
161     GstVideoOverlayComposition *composition;
162 };
163
164 struct _GstTextOverlayClass {
165     GstElementClass parent_class;
166
167     PangoContext *pango_context;
168     GMutex       *pango_lock;
169
170     gchar *     (*get_text) (GstTextOverlay *overlay, GstBuffer *video_frame);
171 };
172
173 GType gst_text_overlay_get_type(void) G_GNUC_CONST;
174
175 G_END_DECLS
176
177 #endif /* __GST_TEXT_OVERLAY_H */