4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunil Park <hyunil46.park@samsung.com>
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU Lesser General Public License as published by the
10 * Free Software Foundation; either version 2.1 of the License, or (at your option)
13 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 * License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library; if not, write to the Free Software Foundation, Inc., 51
20 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #ifndef __GST_XV_IMAGE_SRC_H__
24 #define __GST_XV_IMAGE_SRC_H__
27 #include <gst/base/gstpushsrc.h>
37 #include <sys/types.h>
42 #include <X11/Xutil.h>
43 #include <X11/extensions/Xvlib.h>
44 #include <X11/extensions/Xvproto.h>
45 #include <X11/extensions/XShm.h>
46 #include <X11/extensions/Xdamage.h>
48 #include <dri2.h> //libdri2-dev, libdrm-dev
49 #include <tbm_bufmgr.h>
53 #define C(b,m) (((b) >> (m)) & 0xFF)
54 #define B(c,s) ((((unsigned int)(c)) & 0xff) << (s))
55 #define FOURCC(a,b,c,d) (B(d,24) | B(c,16) | B(b,8) | B(a,0))
56 #define FOURCC_RGB32 FOURCC('R','G','B','4')
57 #define FOURCC_I420 FOURCC('I','4','2','0')
58 #define FOURCC_SN12 FOURCC('S','N','1','2')
59 #define FOURCC_NV12 FOURCC('N','V','1','2')
60 #define FOURCC_ST12 FOURCC('S','T','1','2')
64 #define GST_TYPE_XV_IMAGE_SRC \
65 (gst_xv_image_src_get_type())
66 #define GST_XV_IMAGE_SRC(obj) \
67 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XV_IMAGE_SRC,GstXVImageSrc))
68 #define GST_XV_IMAGE_SRC_CLASS(klass) \
69 (G_TYPE_CHECK_CLASS_CAST((klass), \
70 GST_TYPE_XV_IMAGE_SRC,GstXVImageSrcClass))
71 #define GST_IS_XV_IMAGE_SRC(obj) \
72 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XV_IMAGE_SRC))
73 #define GST_IS_XV_IMAGE_SRC_CLASS(klass) \
74 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XV_IMAGE_SRC))
76 typedef struct _GstXVImageSrc GstXVImageSrc;
77 typedef struct _GstXVImageSrcClass GstXVImageSrcClass;
79 struct _GstXVImageSrc {
87 unsigned int framesize;
91 unsigned int evt_base;
95 DRI2Buffer* dri2_buffers;
98 guint64 frame_duration;
101 gint rate_denominator;
102 GThread *updates_thread;
103 gboolean thread_return;
109 gboolean pause_cond_var;
111 GMutex *pause_cond_lock;
113 GMutex *pause_resp_lock;
114 GMutex *buffer_cond_lock;
117 gboolean is_secured_mode;
118 int current_data_type;
120 long get_image_overtime;
121 int get_image_overtime_cnt;
124 long sleep_base_time;
125 long sleep_limit_time;
126 gboolean switching_to_udp;
127 guint64 initial_audio_latency;
128 guint64 display_rotate;
130 /* For display selection */
138 struct _GstXVImageSrcClass {
139 GstPushSrcClass parent_class;
142 void (*ui_only) (void *data);
143 void (*video_with_ui) (void *data);
144 void (*video_only) (void *data);
145 void (*selection_notify) (void *data);
148 GType gst_xv_image_src_get_type (void);
152 #endif /* __GST_XV_IMAGE_SRC_H__ */