72625cd39ef5b2e99ba20582082ec91a51fb5a26
[platform/upstream/gstreamer.git] / ext / wayland / wldisplay.h
1 /* GStreamer Wayland video sink
2  *
3  * Copyright (C) 2014 Collabora Ltd.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the Free
17  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301 USA.
19  */
20
21 #ifndef __GST_WL_DISPLAY_H__
22 #define __GST_WL_DISPLAY_H__
23
24 #include <gst/gst.h>
25 #include <wayland-client.h>
26 #include "scaler-client-protocol.h"
27 #ifdef GST_WLSINK_ENHANCEMENT
28 #include <tbm_bufmgr.h>
29 #include "protocol/tizen-subsurfaceprotocol.h"
30 #include "protocol/tizen-bufferpoolprotocol.h"
31 #define NV_BUF_PLANE_NUM    2   /*SN12 or ST12 has 2 plane */
32 #endif
33 G_BEGIN_DECLS
34 #define GST_TYPE_WL_DISPLAY                  (gst_wl_display_get_type ())
35 #define GST_WL_DISPLAY(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_WL_DISPLAY, GstWlDisplay))
36 #define GST_IS_WL_DISPLAY(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_WL_DISPLAY))
37 #define GST_WL_DISPLAY_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_WL_DISPLAY, GstWlDisplayClass))
38 #define GST_IS_WL_DISPLAY_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_WL_DISPLAY))
39 #define GST_WL_DISPLAY_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_WL_DISPLAY, GstWlDisplayClass))
40 #if 1
41 #define FUNCTION_ENTER()        GST_INFO("<ENTER>")
42 #else
43 #define FUNCTION_ENTER()
44 #endif
45 typedef struct _GstWlDisplay GstWlDisplay;
46 typedef struct _GstWlDisplayClass GstWlDisplayClass;
47
48 struct _GstWlDisplay
49 {
50   GObject parent_instance;
51
52   /* public objects */
53   struct wl_display *display;
54   struct wl_event_queue *queue;
55
56   /* globals */
57   struct wl_registry *registry;
58   struct wl_compositor *compositor;
59   struct wl_subcompositor *subcompositor;
60   struct wl_shell *shell;
61   struct wl_shm *shm;
62   struct wl_scaler *scaler;
63   GArray *formats;
64
65   /* private */
66   gboolean own_display;
67   GThread *thread;
68   GstPoll *wl_fd_poll;
69
70 #ifdef GST_WLSINK_ENHANCEMENT
71   /*video output layer */
72   struct tizen_subsurface *tizen_subsurface;
73
74   /*tizen buffer pool */
75   struct tizen_buffer_pool *tizen_buffer_pool;
76   uint32_t name;
77   int has_capability;
78   char *device_name;
79   int drm_fd;
80   int authenticated;
81   tbm_bufmgr tbm_bufmgr;
82   tbm_bo tbm_bo;
83
84   gboolean is_special_format;   /*SN12, ST12 */
85   void *bo[NV_BUF_PLANE_NUM];
86   int plane_size[NV_BUF_PLANE_NUM];
87   int stride_width[NV_BUF_PLANE_NUM];
88   int stride_height[NV_BUF_PLANE_NUM];
89   int native_video_size;
90 #endif
91 };
92
93 struct _GstWlDisplayClass
94 {
95   GObjectClass parent_class;
96 };
97
98 GType gst_wl_display_get_type (void);
99
100 GstWlDisplay *gst_wl_display_new (const gchar * name, GError ** error);
101 GstWlDisplay *gst_wl_display_new_existing (struct wl_display *display,
102     gboolean take_ownership, GError ** error);
103
104 G_END_DECLS
105 #endif /* __GST_WL_DISPLAY_H__ */