1 #ifndef __GST_TEXT_OVERLAY_H__ |
|
2 #define __GST_TEXT_OVERLAY_H__ |
|
3 |
|
4 #include <gst/gst.h> |
|
5 #include <pango/pangoft2.h> |
|
6 |
|
7 G_BEGIN_DECLS |
|
8 |
|
9 #define GST_TYPE_TEXT_OVERLAY (gst_text_overlay_get_type()) |
|
10 #define GST_TEXT_OVERLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),\ |
|
11 GST_TYPE_TEXT_OVERLAY, GstTextOverlay)) |
|
12 #define GST_TEXT_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),\ |
|
13 GST_TYPE_TEXT_OVERLAY,GstTextOverlayClass)) |
|
14 #define GST_TEXT_OVERLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),\ |
|
15 GST_TYPE_TEXT_OVERLAY, GstTextOverlayClass)) |
|
16 #define GST_IS_TEXT_OVERLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),\ |
|
17 GST_TYPE_TEXT_OVERLAY)) |
|
18 #define GST_IS_TEXT_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\ |
|
19 GST_TYPE_TEXT_OVERLAY)) |
|
20 |
|
21 typedef struct _GstTextOverlay GstTextOverlay; |
|
22 typedef struct _GstTextOverlayClass GstTextOverlayClass; |
|
23 |
|
24 /** |
|
25 * GstTextOverlayVAlign: |
|
26 * @GST_TEXT_OVERLAY_VALIGN_BASELINE: draw text on the baseline |
|
27 * @GST_TEXT_OVERLAY_VALIGN_BOTTOM: draw text on the bottom |
|
28 * @GST_TEXT_OVERLAY_VALIGN_TOP: draw test on top |
|
29 * |
|
30 * Vertical alignment of the text. |
|
31 */ |
|
32 typedef enum { |
|
33 GST_TEXT_OVERLAY_VALIGN_BASELINE, |
|
34 GST_TEXT_OVERLAY_VALIGN_BOTTOM, |
|
35 GST_TEXT_OVERLAY_VALIGN_TOP |
|
36 } GstTextOverlayVAlign; |
|
37 |
|
38 /** |
|
39 * GstTextOverlayHAlign: |
|
40 * @GST_TEXT_OVERLAY_HALIGN_LEFT: align text left |
|
41 * @GST_TEXT_OVERLAY_HALIGN_CENTER: align text center |
|
42 * @GST_TEXT_OVERLAY_HALIGN_RIGHT: align text right |
|
43 * |
|
44 * Horizontal alignment of the text. |
|
45 */ |
|
46 typedef enum { |
|
47 GST_TEXT_OVERLAY_HALIGN_LEFT, |
|
48 GST_TEXT_OVERLAY_HALIGN_CENTER, |
|
49 GST_TEXT_OVERLAY_HALIGN_RIGHT |
|
50 } GstTextOverlayHAlign; |
|
51 |
|
52 /** |
|
53 * GstTextOverlayWrapMode: |
|
54 * @GST_TEXT_OVERLAY_WRAP_MODE_NONE: no wrapping |
|
55 * @GST_TEXT_OVERLAY_WRAP_MODE_WORD: do word wrapping |
|
56 * @GST_TEXT_OVERLAY_WRAP_MODE_CHAR: do char wrapping |
|
57 * @GST_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR: do word and char wrapping |
|
58 * |
|
59 * Whether to wrap the text and if so how. |
|
60 */ |
|
61 typedef enum { |
|
62 GST_TEXT_OVERLAY_WRAP_MODE_NONE = -1, |
|
63 GST_TEXT_OVERLAY_WRAP_MODE_WORD = PANGO_WRAP_WORD, |
|
64 GST_TEXT_OVERLAY_WRAP_MODE_CHAR = PANGO_WRAP_CHAR, |
|
65 GST_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR = PANGO_WRAP_WORD_CHAR |
|
66 } GstTextOverlayWrapMode; |
|
67 |
|
68 /** |
|
69 * GstTextOverlayLineAlign: |
|
70 * @GST_TEXT_OVERLAY_LINE_ALIGN_LEFT: lines are left-aligned |
|
71 * @GST_TEXT_OVERLAY_LINE_ALIGN_CENTER: lines are center-aligned |
|
72 * @GST_TEXT_OVERLAY_LINE_ALIGN_RIGHT: lines are right-aligned |
|
73 * |
|
74 * Alignment of text lines relative to each other |
|
75 */ |
|
76 typedef enum { |
|
77 GST_TEXT_OVERLAY_LINE_ALIGN_LEFT = PANGO_ALIGN_LEFT, |
|
78 GST_TEXT_OVERLAY_LINE_ALIGN_CENTER = PANGO_ALIGN_CENTER, |
|
79 GST_TEXT_OVERLAY_LINE_ALIGN_RIGHT = PANGO_ALIGN_RIGHT |
|
80 } GstTextOverlayLineAlign; |
|
81 |
|
82 /** |
|
83 * GstTextOverlay: |
|
84 * |
|
85 * Opaque textoverlay object structure |
|
86 */ |
|
87 struct _GstTextOverlay { |
|
88 GstElement element; |
|
89 |
|
90 GstPad *video_sinkpad; |
|
91 GstPad *text_sinkpad; |
|
92 GstPad *srcpad; |
|
93 |
|
94 GstSegment *segment; |
|
95 GstSegment text_segment; |
|
96 GstBuffer *text_buffer; |
|
97 gboolean text_linked; |
|
98 gboolean video_flushing; |
|
99 gboolean text_flushing; |
|
100 gboolean text_eos; |
|
101 |
|
102 GCond *cond; /* to signal removal of a queued text |
|
103 * buffer, arrival of a text buffer, |
|
104 * a text segment update, or a change |
|
105 * in status (e.g. shutdown, flushing) */ |
|
106 |
|
107 gint width; |
|
108 gint height; |
|
109 gint fps_n; |
|
110 gint fps_d; |
|
111 |
|
112 GstTextOverlayVAlign valign; |
|
113 GstTextOverlayHAlign halign; |
|
114 GstTextOverlayWrapMode wrap_mode; |
|
115 GstTextOverlayLineAlign line_align; |
|
116 |
|
117 gint xpad; |
|
118 gint ypad; |
|
119 gint deltax; |
|
120 gint deltay; |
|
121 gchar *default_text; |
|
122 gboolean want_shading; |
|
123 gboolean silent; |
|
124 |
|
125 PangoLayout *layout; |
|
126 FT_Bitmap bitmap; |
|
127 gint bitmap_buffer_size; |
|
128 gint baseline_y; |
|
129 |
|
130 gboolean need_render; |
|
131 |
|
132 gint shading_value; /* for timeoverlay subclass */ |
|
133 |
|
134 gboolean have_pango_markup; |
|
135 }; |
|
136 |
|
137 struct _GstTextOverlayClass { |
|
138 GstElementClass parent_class; |
|
139 |
|
140 PangoContext *pango_context; |
|
141 |
|
142 gchar * (*get_text) (GstTextOverlay *overlay, GstBuffer *video_frame); |
|
143 }; |
|
144 |
|
145 GType gst_text_overlay_get_type(void) G_GNUC_CONST; |
|
146 |
|
147 G_END_DECLS |
|
148 |
|
149 #endif /* __GST_TEXT_OVERLAY_H */ |
|