gst_plugins_base/ext/pango/gsttextoverlay.h
branchRCL_3
changeset 30 7e817e7e631c
parent 2 5505e8908944
equal deleted inserted replaced
29:567bb019e3e3 30:7e817e7e631c
       
     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 */