1 /*
2  * Clutter-GStreamer.
3  *
4  * GStreamer integration library for Clutter.
5  *
6  * clutter-gst-player.h - Wrap some convenience functions around playbin2
7  *
8  * Authored By Damien Lespiau    <damien.lespiau@intel.com>
9  *             Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>
10  *
11  * Copyright (C) 2011 Intel Corporation
12  *
13  * This library is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU Lesser General Public
15  * License as published by the Free Software Foundation; either
16  * version 2 of the License, or (at your option) any later version.
17  *
18  * This library is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21  * Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public
24  * License along with this library; if not, write to the
25  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
26  * Boston, MA 02111-1307, USA.
27  */
28 
29 #ifndef __CLUTTER_GST_PLAYER_H__
30 #define __CLUTTER_GST_PLAYER_H__
31 
32 #include <glib-object.h>
33 
34 #include <clutter/clutter.h>
35 
36 #include <clutter-gst/clutter-gst-types.h>
37 
38 G_BEGIN_DECLS
39 
40 #define CLUTTER_GST_TYPE_PLAYER clutter_gst_player_get_type()
41 
42 #define CLUTTER_GST_PLAYER(obj)                                         \
43   (G_TYPE_CHECK_INSTANCE_CAST ((obj),                                   \
44                                CLUTTER_GST_TYPE_PLAYER,                 \
45                                ClutterGstPlayer))
46 #define CLUTTER_GST_IS_PLAYER(obj)                              \
47   (G_TYPE_CHECK_INSTANCE_TYPE ((obj),                           \
48                                CLUTTER_GST_TYPE_PLAYER))
49 #define CLUTTER_GST_PLAYER_GET_INTERFACE(obj)                           \
50   (G_TYPE_INSTANCE_GET_INTERFACE ((obj),                                \
51                                   CLUTTER_GST_TYPE_PLAYER,              \
52                                   ClutterGstPlayerIface))
53 
54 typedef struct _ClutterGstPlayer ClutterGstPlayer;
55 typedef struct _ClutterGstPlayerIface ClutterGstPlayerIface;
56 typedef struct _ClutterGstPlayerIfacePrivate ClutterGstPlayerIfacePrivate;
57 
58 
59 /**
60  * ClutterGstPlayer:
61  *
62  * #ClutterGstPlayer is an opaque structure whose members cannot be
63  * directly accessed
64  *
65  * Since: 1.4
66  */
67 
68 /**
69  * ClutterGstPlayerIface:
70  * @download_buffering: handler for the #ClutterGstPlayer::download-buffering
71  * signal
72  *
73  * Interface vtable for #ClutterGstPlayer implementations
74  *
75  * Since: 1.4
76  */
77 struct _ClutterGstPlayerIface
78 {
79   /*< private >*/
80   GTypeInterface base_iface;
81 
82   ClutterGstPlayerIfacePrivate *priv;
83 
84   /*< public >*/
85   GstElement * (* get_pipeline)   (ClutterGstPlayer *player);
86 
87   gchar * (* get_user_agent) (ClutterGstPlayer *player);
88   void    (* set_user_agent) (ClutterGstPlayer *player,
89                               const gchar      *user_agent);
90 
91   ClutterGstSeekFlags (* get_seek_flags) (ClutterGstPlayer *player);
92   void                (* set_seek_flags) (ClutterGstPlayer    *player,
93                                           ClutterGstSeekFlags  flags);
94 
95   ClutterGstBufferingMode (* get_buffering_mode) (ClutterGstPlayer *player);
96   void                    (* set_buffering_mode) (ClutterGstPlayer        *player,
97                                                   ClutterGstBufferingMode  mode);
98 
99   GList * (* get_audio_streams) (ClutterGstPlayer *player);
100   gint    (* get_audio_stream)  (ClutterGstPlayer *player);
101   void    (* set_audio_stream)  (ClutterGstPlayer *player,
102                                  gint              index_);
103 
104   GList * (* get_subtitle_tracks) (ClutterGstPlayer *player);
105   gint    (* get_subtitle_track)  (ClutterGstPlayer *player);
106   void    (* set_subtitle_track)  (ClutterGstPlayer *player,
107                                    gint              index_);
108 
109   gboolean (*get_idle) (ClutterGstPlayer *player);
110 
111   gboolean (*get_in_seek) (ClutterGstPlayer *player);
112 
113   void (* _iface_reserved16) (void);
114   void (* _iface_reserved17) (void);
115   void (* _iface_reserved18) (void);
116   void (* _iface_reserved19) (void);
117   void (* _iface_reserved20) (void);
118   void (* _iface_reserved21) (void);
119   void (* _iface_reserved22) (void);
120   void (* _iface_reserved23) (void);
121   void (* _iface_reserved24) (void);
122   void (* _iface_reserved25) (void);
123   void (* _iface_reserved26) (void);
124   void (* _iface_reserved27) (void);
125   void (* _iface_reserved28) (void);
126   void (* _iface_reserved29) (void);
127   void (* _iface_reserved30) (void);
128   void (* _iface_reserved31) (void);
129   void (* _iface_reserved32) (void);
130   void (* _iface_reserved33) (void);
131   void (* _iface_reserved34) (void);
132   void (* _iface_reserved35) (void);
133 
134   /* signals */
135   void (* download_buffering)  (ClutterGstPlayer *player,
136                                 gdouble           start,
137                                 gdouble           stop);
138   void (* _clutter_reserved2)  (void);
139   void (* _clutter_reserved3)  (void);
140   void (* _clutter_reserved4)  (void);
141   void (* _clutter_reserved5)  (void);
142   void (* _clutter_reserved6)  (void);
143   void (* _clutter_reserved7)  (void);
144   void (* _clutter_reserved8)  (void);
145   void (* _clutter_reserved9)  (void);
146   void (* _clutter_reserved10) (void);
147 };
148 
149 GType clutter_gst_player_get_type (void) G_GNUC_CONST;
150 
151 void                      clutter_gst_player_class_init          (GObjectClass *object_class);
152 
153 gboolean                  clutter_gst_player_init                (ClutterGstPlayer        *player);
154 void                      clutter_gst_player_deinit               (ClutterGstPlayer *player);
155 
156 GstElement *		  clutter_gst_player_get_pipeline        (ClutterGstPlayer        *player);
157 
158 gchar *			  clutter_gst_player_get_user_agent      (ClutterGstPlayer        *player);
159 void			  clutter_gst_player_set_user_agent      (ClutterGstPlayer        *player,
160                                                                   const gchar             *user_agent);
161 
162 ClutterGstSeekFlags	  clutter_gst_player_get_seek_flags      (ClutterGstPlayer        *player);
163 void			  clutter_gst_player_set_seek_flags      (ClutterGstPlayer        *player,
164                                                                   ClutterGstSeekFlags      flags);
165 
166 ClutterGstBufferingMode	  clutter_gst_player_get_buffering_mode  (ClutterGstPlayer        *player);
167 void			  clutter_gst_player_set_buffering_mode  (ClutterGstPlayer        *player,
168                                                                   ClutterGstBufferingMode  mode);
169 
170 GList *                   clutter_gst_player_get_audio_streams   (ClutterGstPlayer        *player);
171 gint                      clutter_gst_player_get_audio_stream    (ClutterGstPlayer        *player);
172 void                      clutter_gst_player_set_audio_stream    (ClutterGstPlayer        *player,
173                                                                   gint                     index_);
174 
175 GList *                   clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer       *player);
176 gint                      clutter_gst_player_get_subtitle_track  (ClutterGstPlayer       *player);
177 void                      clutter_gst_player_set_subtitle_track  (ClutterGstPlayer       *player,
178                                                                   gint                    index_);
179 
180 gboolean                  clutter_gst_player_get_idle            (ClutterGstPlayer        *player);
181 
182 gboolean                  clutter_gst_player_get_in_seek         (ClutterGstPlayer        *player);
183 
184 G_END_DECLS
185 
186 #endif /* __CLUTTER_GST_PLAYER_H__ */
187