1 /* screenshotsrc: Screenshot plugin for GStreamer 2 * 3 * This library is free software; you can redistribute it and/or 4 * modify it under the terms of the GNU Library General Public 5 * License as published by the Free Software Foundation; either 6 * version 2 of the License, or (at your option) any later version. 7 * 8 * This library is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * Library General Public License for more details. 12 * 13 * You should have received a copy of the GNU Library General Public 14 * License along with this library; if not, write to the 15 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 16 * Boston, MA 02110-1301, USA. 17 */ 18 19 #ifndef __GST_XIMAGE_SRC_H__ 20 #define __GST_XIMAGE_SRC_H__ 21 22 #include <gst/gst.h> 23 #include <gst/base/gstpushsrc.h> 24 #include "ximageutil.h" 25 26 #ifdef HAVE_XFIXES 27 #include <X11/extensions/Xfixes.h> 28 #endif 29 #ifdef HAVE_XDAMAGE 30 #include <X11/extensions/Xdamage.h> 31 #endif 32 33 G_BEGIN_DECLS 34 35 #define GST_TYPE_XIMAGE_SRC (gst_ximage_src_get_type()) 36 #define GST_XIMAGE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XIMAGE_SRC,GstXImageSrc)) 37 #define GST_XIMAGE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XIMAGE_SRC,GstXImageSrc)) 38 #define GST_IS_XIMAGE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XIMAGE_SRC)) 39 #define GST_IS_XIMAGE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XIMAGE_SRC)) 40 41 typedef struct _GstXImageSrc GstXImageSrc; 42 typedef struct _GstXImageSrcClass GstXImageSrcClass; 43 44 GType gst_ximage_src_get_type (void) G_GNUC_CONST; 45 46 struct _GstXImageSrc 47 { 48 GstPushSrc parent; 49 50 /* Information on display */ 51 GstXContext *xcontext; 52 gint x; 53 gint y; 54 gint width; 55 gint height; 56 57 Window xwindow; 58 gchar *display_name; 59 60 /* Window selection */ 61 guint64 xid; 62 gchar *xname; 63 64 /* Desired output framerate */ 65 gint fps_n; 66 gint fps_d; 67 68 /* for framerate sync */ 69 GstClockID clock_id; 70 gint64 last_frame_no; 71 72 /* Protect X Windows calls */ 73 GMutex x_lock; 74 75 /* Gathered pool of emitted buffers */ 76 GMutex pool_lock; 77 GSList *buffer_pool; 78 79 /* XFixes and XDamage support */ 80 gboolean have_xfixes; 81 gboolean have_xdamage; 82 gboolean show_pointer; 83 gboolean use_damage; 84 85 /* co-ordinates for start and end */ 86 guint startx; 87 guint starty; 88 guint endx; 89 guint endy; 90 91 /* whether to use remote friendly calls */ 92 gboolean remote; 93 94 #ifdef HAVE_XFIXES 95 int fixes_event_base; 96 XFixesCursorImage *cursor_image; 97 #endif 98 #ifdef HAVE_XDAMAGE 99 Damage damage; 100 int damage_event_base; 101 XserverRegion damage_region; 102 GC damage_copy_gc; 103 GstBuffer *last_ximage; 104 #endif 105 }; 106 107 struct _GstXImageSrcClass 108 { 109 GstPushSrcClass parent_class; 110 }; 111 112 G_END_DECLS 113 114 #endif /* __GST_XIMAGE_SRC_H__ */ 115