• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GStreamer
2  *
3  * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
4  * Copyright (C) 2019-2020 Stephan Hesse <stephan@emliri.com>
5  * Copyright (C) 2020 Philippe Normand <philn@igalia.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef __GST_PLAY_H__
24 #define __GST_PLAY_H__
25 
26 #include <gst/gst.h>
27 #include <gst/video/video.h>
28 #include <gst/play/play-prelude.h>
29 #include <gst/play/gstplay-types.h>
30 #include <gst/play/gstplay-video-renderer.h>
31 #include <gst/play/gstplay-media-info.h>
32 
33 G_BEGIN_DECLS
34 
35 GST_PLAY_API
36 GType        gst_play_state_get_type                (void);
37 
38 /**
39  * GST_TYPE_PLAY_STATE:
40  * Since: 1.20
41  */
42 #define      GST_TYPE_PLAY_STATE                    (gst_play_state_get_type ())
43 
44 GST_PLAY_API
45 GType        gst_play_message_get_type              (void);
46 
47 /**
48  * GST_TYPE_PLAY_MESSAGE:
49  * Since: 1.20
50  */
51 #define      GST_TYPE_PLAY_MESSAGE                  (gst_play_message_get_type ())
52 
53 /**
54  * GstPlayState:
55  * @GST_PLAY_STATE_STOPPED: the play is stopped.
56  * @GST_PLAY_STATE_BUFFERING: the play is buffering.
57  * @GST_PLAY_STATE_PAUSED: the play is paused.
58  * @GST_PLAY_STATE_PLAYING: the play is currently playing a
59  * stream.
60  *
61  * Since: 1.20
62  */
63 typedef enum
64 {
65   GST_PLAY_STATE_STOPPED,
66   GST_PLAY_STATE_BUFFERING,
67   GST_PLAY_STATE_PAUSED,
68   GST_PLAY_STATE_PLAYING
69 } GstPlayState;
70 
71 /**
72  * GstPlayMessage:
73  * @GST_PLAY_MESSAGE_URI_LOADED: Source element was initalized for set URI
74  * @GST_PLAY_MESSAGE_POSITION_UPDATED: Sink position changed
75  * @GST_PLAY_MESSAGE_DURATION_CHANGED: Duration of stream changed
76  * @GST_PLAY_MESSAGE_STATE_CHANGED: State changed, see #GstPlayState
77  * @GST_PLAY_MESSAGE_BUFFERING: Pipeline is in buffering state, message contains the percentage value of the decoding buffer
78  * @GST_PLAY_MESSAGE_END_OF_STREAM: Sink has received EOS
79  * @GST_PLAY_MESSAGE_ERROR: Message contains an error
80  * @GST_PLAY_MESSAGE_WARNING: Message contains an error
81  * @GST_PLAY_MESSAGE_VIDEO_DIMENSIONS_CHANGED: Video sink received format in different dimensions than before
82  * @GST_PLAY_MESSAGE_MEDIA_INFO_UPDATED: A media-info property has changed, message contains current #GstPlayMediaInfo
83  * @GST_PLAY_MESSAGE_VOLUME_CHANGED: The volume of the audio ouput has changed
84  * @GST_PLAY_MESSAGE_MUTE_CHANGED: Audio muting flag has been toggled
85  * @GST_PLAY_MESSAGE_SEEK_DONE: Any pending seeking operation has been completed
86  *
87  * Since: 1.20
88  *
89  * Types of messages that will be posted on the play API bus.
90  *
91  * See also #gst_play_get_message_bus()
92  *
93  */
94 typedef enum
95 {
96   GST_PLAY_MESSAGE_URI_LOADED,
97   GST_PLAY_MESSAGE_POSITION_UPDATED,
98   GST_PLAY_MESSAGE_DURATION_CHANGED,
99   GST_PLAY_MESSAGE_STATE_CHANGED,
100   GST_PLAY_MESSAGE_BUFFERING,
101   GST_PLAY_MESSAGE_END_OF_STREAM,
102   GST_PLAY_MESSAGE_ERROR,
103   GST_PLAY_MESSAGE_WARNING,
104   GST_PLAY_MESSAGE_VIDEO_DIMENSIONS_CHANGED,
105   GST_PLAY_MESSAGE_MEDIA_INFO_UPDATED,
106   GST_PLAY_MESSAGE_VOLUME_CHANGED,
107   GST_PLAY_MESSAGE_MUTE_CHANGED,
108   GST_PLAY_MESSAGE_SEEK_DONE
109 } GstPlayMessage;
110 
111 GST_PLAY_API
112 const gchar *gst_play_state_get_name                (GstPlayState state);
113 
114 GST_PLAY_API
115 const gchar *gst_play_message_get_name              (GstPlayMessage message_type);
116 
117 GST_PLAY_API
118 GQuark       gst_play_error_quark                   (void);
119 
120 GST_PLAY_API
121 GType        gst_play_error_get_type                (void);
122 
123 /**
124  * GST_PLAY_ERROR:
125  *
126  * Since: 1.20
127  */
128 #define      GST_PLAY_ERROR                         (gst_play_error_quark ())
129 
130 /**
131  * GST_TYPE_PLAY_ERROR:
132  *
133  * Since: 1.20
134  */
135 #define      GST_TYPE_PLAY_ERROR                    (gst_play_error_get_type ())
136 
137 /**
138  * GstPlayError:
139  * @GST_PLAY_ERROR_FAILED: generic error.
140  *
141  * Since: 1.20
142  */
143 typedef enum {
144   GST_PLAY_ERROR_FAILED = 0
145 } GstPlayError;
146 
147 GST_PLAY_API
148 const gchar *gst_play_error_get_name                (GstPlayError error);
149 
150 GST_PLAY_API
151 GType gst_play_color_balance_type_get_type          (void);
152 
153 /**
154  * GST_TYPE_PLAY_COLOR_BALANCE_TYPE:
155  *
156  * Since: 1.20
157  */
158 #define GST_TYPE_PLAY_COLOR_BALANCE_TYPE            (gst_play_color_balance_type_get_type ())
159 
160 /**
161  * GstPlayColorBalanceType:
162  * @GST_PLAY_COLOR_BALANCE_BRIGHTNESS: brightness or black level.
163  * @GST_PLAY_COLOR_BALANCE_CONTRAST: contrast or luma gain.
164  * @GST_PLAY_COLOR_BALANCE_SATURATION: color saturation or chroma
165  * gain.
166  * @GST_PLAY_COLOR_BALANCE_HUE: hue or color balance.
167  *
168  * Since: 1.20
169  */
170 typedef enum
171 {
172   GST_PLAY_COLOR_BALANCE_BRIGHTNESS,
173   GST_PLAY_COLOR_BALANCE_CONTRAST,
174   GST_PLAY_COLOR_BALANCE_SATURATION,
175   GST_PLAY_COLOR_BALANCE_HUE,
176 } GstPlayColorBalanceType;
177 
178 GST_PLAY_API
179 const gchar *gst_play_color_balance_type_get_name   (GstPlayColorBalanceType type);
180 
181 #define GST_TYPE_PLAY             (gst_play_get_type ())
182 #define GST_IS_PLAY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAY))
183 #define GST_IS_PLAY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAY))
184 #define GST_PLAY_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAY, GstPlayClass))
185 #define GST_PLAY(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAY, GstPlay))
186 #define GST_PLAY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAY, GstPlayClass))
187 
188 /**
189  * GST_PLAY_CAST:
190  * Since: 1.20
191  */
192 #define GST_PLAY_CAST(obj)        ((GstPlay*)(obj))
193 
194 #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
195 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPlay, gst_object_unref)
196 #endif
197 
198 GST_PLAY_API
199 GType        gst_play_get_type                      (void);
200 
201 GST_PLAY_API
202 GstPlay *    gst_play_new                           (GstPlayVideoRenderer * video_renderer);
203 
204 GST_PLAY_API
205 GstBus *     gst_play_get_message_bus               (GstPlay    * play);
206 
207 GST_PLAY_API
208 void         gst_play_play                          (GstPlay    * play);
209 
210 GST_PLAY_API
211 void         gst_play_pause                         (GstPlay    * play);
212 
213 GST_PLAY_API
214 void         gst_play_stop                          (GstPlay    * play);
215 
216 GST_PLAY_API
217 void         gst_play_seek                          (GstPlay    * play,
218                                                      GstClockTime   position);
219 
220 GST_PLAY_API
221 void         gst_play_set_rate                      (GstPlay    * play,
222                                                      gdouble        rate);
223 
224 GST_PLAY_API
225 gdouble      gst_play_get_rate                      (GstPlay    * play);
226 
227 GST_PLAY_API
228 gchar *      gst_play_get_uri                       (GstPlay    * play);
229 
230 GST_PLAY_API
231 void         gst_play_set_uri                       (GstPlay    * play,
232                                                      const gchar  * uri);
233 
234 GST_PLAY_API
235 gchar *      gst_play_get_subtitle_uri              (GstPlay    * play);
236 
237 GST_PLAY_API
238 void         gst_play_set_subtitle_uri              (GstPlay    * play,
239                                                      const gchar *uri);
240 
241 GST_PLAY_API
242 GstClockTime gst_play_get_position                  (GstPlay    * play);
243 
244 GST_PLAY_API
245 GstClockTime gst_play_get_duration                  (GstPlay    * play);
246 
247 GST_PLAY_API
248 gdouble      gst_play_get_volume                    (GstPlay    * play);
249 
250 GST_PLAY_API
251 void         gst_play_set_volume                    (GstPlay    * play,
252                                                      gdouble        val);
253 
254 GST_PLAY_API
255 gboolean     gst_play_get_mute                      (GstPlay    * play);
256 
257 GST_PLAY_API
258 void         gst_play_set_mute                      (GstPlay    * play,
259                                                      gboolean       val);
260 
261 GST_PLAY_API
262 GstElement * gst_play_get_pipeline                  (GstPlay    * play);
263 
264 GST_PLAY_API
265 void         gst_play_set_video_track_enabled       (GstPlay    * play,
266                                                      gboolean enabled);
267 
268 GST_PLAY_API
269 void         gst_play_set_audio_track_enabled       (GstPlay    * play,
270                                                      gboolean enabled);
271 
272 GST_PLAY_API
273 void         gst_play_set_subtitle_track_enabled    (GstPlay    * play,
274                                                      gboolean enabled);
275 
276 GST_PLAY_API
277 gboolean     gst_play_set_audio_track               (GstPlay    *play,
278                                                      gint stream_index);
279 
280 GST_PLAY_API
281 gboolean     gst_play_set_video_track               (GstPlay    *play,
282                                                      gint stream_index);
283 
284 GST_PLAY_API
285 gboolean     gst_play_set_subtitle_track            (GstPlay    *play,
286                                                      gint stream_index);
287 
288 GST_PLAY_API
289 GstPlayMediaInfo *    gst_play_get_media_info     (GstPlay * play);
290 
291 GST_PLAY_API
292 GstPlayAudioInfo *    gst_play_get_current_audio_track (GstPlay * play);
293 
294 GST_PLAY_API
295 GstPlayVideoInfo *    gst_play_get_current_video_track (GstPlay * play);
296 
297 GST_PLAY_API
298 GstPlaySubtitleInfo * gst_play_get_current_subtitle_track (GstPlay * play);
299 
300 GST_PLAY_API
301 gboolean     gst_play_set_visualization             (GstPlay    * play,
302                                                      const gchar *name);
303 
304 GST_PLAY_API
305 void         gst_play_set_visualization_enabled     (GstPlay    * play,
306                                                      gboolean enabled);
307 
308 GST_PLAY_API
309 gchar *      gst_play_get_current_visualization     (GstPlay    * play);
310 
311 GST_PLAY_API
312 gboolean     gst_play_has_color_balance             (GstPlay    * play);
313 
314 GST_PLAY_API
315 void         gst_play_set_color_balance             (GstPlay    * play,
316                                                      GstPlayColorBalanceType type,
317                                                      gdouble value);
318 
319 GST_PLAY_API
320 gdouble      gst_play_get_color_balance             (GstPlay    * play,
321                                                      GstPlayColorBalanceType type);
322 
323 
324 GST_PLAY_API
325 GstVideoMultiviewFramePacking gst_play_get_multiview_mode (GstPlay    * play);
326 
327 GST_PLAY_API
328 void                     gst_play_set_multiview_mode (GstPlay    * play,
329                                                       GstVideoMultiviewFramePacking mode);
330 
331 GST_PLAY_API
332 GstVideoMultiviewFlags  gst_play_get_multiview_flags  (GstPlay  * play);
333 
334 GST_PLAY_API
335 void                    gst_play_set_multiview_flags  (GstPlay  * play,
336                                                        GstVideoMultiviewFlags flags);
337 
338 GST_PLAY_API
339 gint64       gst_play_get_audio_video_offset        (GstPlay    * play);
340 
341 GST_PLAY_API
342 void         gst_play_set_audio_video_offset        (GstPlay    * play,
343                                                      gint64 offset);
344 
345 GST_PLAY_API
346 gint64       gst_play_get_subtitle_video_offset        (GstPlay    * play);
347 
348 GST_PLAY_API
349 void         gst_play_set_subtitle_video_offset        (GstPlay    * play,
350                                                         gint64 offset);
351 
352 GST_PLAY_API
353 gboolean       gst_play_set_config                  (GstPlay * play,
354                                                      GstStructure * config);
355 
356 GST_PLAY_API
357 GstStructure * gst_play_get_config                  (GstPlay * play);
358 
359 /* helpers for configuring the config structure */
360 
361 GST_PLAY_API
362 void           gst_play_config_set_user_agent       (GstStructure * config,
363                                                      const gchar * agent);
364 
365 GST_PLAY_API
366 gchar *        gst_play_config_get_user_agent       (const GstStructure * config);
367 
368 GST_PLAY_API
369 void           gst_play_config_set_position_update_interval  (GstStructure * config,
370                                                               guint          interval);
371 
372 GST_PLAY_API
373 guint          gst_play_config_get_position_update_interval  (const GstStructure * config);
374 
375 GST_PLAY_API
376 void           gst_play_config_set_seek_accurate (GstStructure * config, gboolean accurate);
377 
378 GST_PLAY_API
379 gboolean       gst_play_config_get_seek_accurate (const GstStructure * config);
380 
381 /**
382  * GstPlaySnapshotFormat:
383  * @GST_PLAY_THUMBNAIL_RAW_NATIVE: raw native format.
384  * @GST_PLAY_THUMBNAIL_RAW_xRGB: raw xRGB format.
385  * @GST_PLAY_THUMBNAIL_RAW_BGRx: raw BGRx format.
386  * @GST_PLAY_THUMBNAIL_JPG: jpeg format.
387  * @GST_PLAY_THUMBNAIL_PNG: png format.
388  *
389  * Since: 1.20
390  */
391 typedef enum
392 {
393   GST_PLAY_THUMBNAIL_RAW_NATIVE = 0,
394   GST_PLAY_THUMBNAIL_RAW_xRGB,
395   GST_PLAY_THUMBNAIL_RAW_BGRx,
396   GST_PLAY_THUMBNAIL_JPG,
397   GST_PLAY_THUMBNAIL_PNG
398 } GstPlaySnapshotFormat;
399 
400 GST_PLAY_API
401 GstSample * gst_play_get_video_snapshot (GstPlay * play,
402     GstPlaySnapshotFormat format, const GstStructure * config);
403 
404 GST_PLAY_API
405 gboolean       gst_play_is_play_message                        (GstMessage *msg);
406 
407 GST_PLAY_API
408 void           gst_play_message_parse_type                       (GstMessage *msg, GstPlayMessage *type);
409 
410 GST_PLAY_API
411 void           gst_play_message_parse_duration_updated           (GstMessage *msg, GstClockTime *duration);
412 
413 GST_PLAY_API
414 void           gst_play_message_parse_position_updated           (GstMessage *msg, GstClockTime *position);
415 
416 GST_PLAY_API
417 void           gst_play_message_parse_state_changed              (GstMessage *msg, GstPlayState *state);
418 
419 GST_PLAY_API
420 void           gst_play_message_parse_buffering_percent          (GstMessage *msg, guint *percent);
421 
422 GST_PLAY_API
423 void           gst_play_message_parse_error                      (GstMessage *msg, GError **error, GstStructure **details);
424 
425 GST_PLAY_API
426 void           gst_play_message_parse_warning                    (GstMessage *msg, GError **error, GstStructure **details);
427 
428 GST_PLAY_API
429 void           gst_play_message_parse_video_dimensions_changed   (GstMessage *msg, guint *width, guint *height);
430 
431 GST_PLAY_API
432 void           gst_play_message_parse_media_info_updated         (GstMessage *msg, GstPlayMediaInfo **info);
433 
434 GST_PLAY_API
435 void           gst_play_message_parse_volume_changed             (GstMessage *msg, gdouble *volume);
436 
437 GST_PLAY_API
438 void           gst_play_message_parse_muted_changed              (GstMessage *msg, gboolean *muted);
439 
440 G_END_DECLS
441 
442 #endif /* __GST_PLAY_H__ */
443