• 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