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