expand tabs
[platform/upstream/gstreamer.git] / 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/base/gstcollectpads.h>
6 #include <pango/pangoft2.h>
7
8 G_BEGIN_DECLS
9
10 #define GST_TYPE_TEXT_OVERLAY            (gst_text_overlay_get_type())
11 #define GST_TEXT_OVERLAY(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),\
12                                          GST_TYPE_TEXT_OVERLAY, GstTextOverlay))
13 #define GST_TEXT_OVERLAY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),\
14                                          GST_TYPE_TEXT_OVERLAY,GstTextOverlayClass))
15 #define GST_TEXT_OVERLAY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),\
16                                          GST_TYPE_TEXT_OVERLAY, GstTextOverlayClass))
17 #define GST_IS_TEXT_OVERLAY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
18                                          GST_TYPE_TEXT_OVERLAY))
19 #define GST_IS_TEXT_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
20                                          GST_TYPE_TEXT_OVERLAY))
21
22 typedef struct _GstTextOverlay      GstTextOverlay;
23 typedef struct _GstTextOverlayClass GstTextOverlayClass;
24
25 typedef enum _GstTextOverlayVAlign   GstTextOverlayVAlign;
26 typedef enum _GstTextOverlayHAlign   GstTextOverlayHAlign;
27 typedef enum _GstTextOverlayWrapMode GstTextOverlayWrapMode;
28
29 enum _GstTextOverlayVAlign {
30     GST_TEXT_OVERLAY_VALIGN_BASELINE,
31     GST_TEXT_OVERLAY_VALIGN_BOTTOM,
32     GST_TEXT_OVERLAY_VALIGN_TOP
33 };
34
35 enum _GstTextOverlayHAlign {
36     GST_TEXT_OVERLAY_HALIGN_LEFT,
37     GST_TEXT_OVERLAY_HALIGN_CENTER,
38     GST_TEXT_OVERLAY_HALIGN_RIGHT
39 };
40
41 enum _GstTextOverlayWrapMode {
42     GST_TEXT_OVERLAY_WRAP_MODE_NONE = -1,
43     GST_TEXT_OVERLAY_WRAP_MODE_WORD = PANGO_WRAP_WORD,
44     GST_TEXT_OVERLAY_WRAP_MODE_CHAR = PANGO_WRAP_CHAR,
45     GST_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR = PANGO_WRAP_WORD_CHAR
46 };
47
48
49 struct _GstTextOverlay {
50     GstElement               element;
51
52     GstPad                  *video_sinkpad;
53     GstPad                  *text_sinkpad;
54     GstPad                  *srcpad;
55
56     GstCollectPads          *collect;
57     GstCollectData          *video_collect_data;
58     GstCollectData          *text_collect_data;
59
60     gint                     width;
61     gint                     height;
62     gint                     fps_n;
63     gint                     fps_d;
64
65     GstTextOverlayVAlign     valign;
66     GstTextOverlayHAlign     halign;
67     GstTextOverlayWrapMode   wrap_mode;
68
69     gint                     xpad;
70     gint                     ypad;
71     gint                     deltax;
72     gint                     deltay;
73     gchar                   *default_text;
74     gboolean                 want_shading;
75
76     PangoLayout             *layout;
77     FT_Bitmap                bitmap;
78     gint                     bitmap_buffer_size;
79     gint                     baseline_y;
80
81     gboolean                 need_render;
82
83     gint                     shading_value;  /* for timeoverlay subclass */
84 };
85
86 struct _GstTextOverlayClass {
87     GstElementClass parent_class;
88
89     PangoContext *pango_context;
90
91     gchar *     (*get_text) (GstTextOverlay *overlay, GstBuffer *video_frame);
92
93 };
94
95 GType gst_text_overlay_get_type(void) G_GNUC_CONST;
96
97 G_END_DECLS
98
99 #endif /* __GST_TEXT_OVERLAY_H */