diff options
author | Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com> | 2011-09-04 06:23:04 +0100 |
---|---|---|
committer | Damien Lespiau <damien.lespiau@intel.com> | 2011-09-26 18:12:45 +0100 |
commit | 0e92eac37f76921281a62def7a4f3cbfee0470c8 (patch) | |
tree | a47ec35b52fd6992992ca91fa7290360e70abd3b | |
parent | b8f71b1a2ad5722e43e83d74943d7e0c0c6dac0d (diff) | |
download | clutter-gst-0e92eac37f76921281a62def7a4f3cbfee0470c8.tar.gz |
player: split interface API from default implementation
This allows to override implementation of the player if need be.
-rw-r--r-- | clutter-gst/clutter-gst-player.c | 458 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-player.h | 68 |
2 files changed, 373 insertions, 153 deletions
diff --git a/clutter-gst/clutter-gst-player.c b/clutter-gst/clutter-gst-player.c index 3e12a55..aa3f0fc 100644 --- a/clutter-gst/clutter-gst-player.c +++ b/clutter-gst/clutter-gst-player.c @@ -1635,6 +1635,257 @@ get_pipeline (void) return pipeline; } +/* ClutterGstPlayerIface implementation */ + +static GstElement * +clutter_gst_player_get_pipeline_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + return priv->pipeline; +} + +static gchar * +clutter_gst_player_get_user_agent_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + GstElement *source; + GParamSpec *pspec; + gchar *user_agent; + + priv = PLAYER_GET_PRIVATE (player); + + /* If the user has set a custom user agent, we just return it even if it is + * not used by the current source element of the pipeline */ + if (priv->user_agent) + return g_strdup (priv->user_agent); + + /* If not, we try to retrieve the user agent used by the current source */ + g_object_get (priv->pipeline, "source", &source, NULL); + if (source == NULL) + return NULL; + + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (source), + "user-agent"); + if (pspec == NULL) + return NULL; + + g_object_get (source, "user-agent", &user_agent, NULL); + + return user_agent; +} + +static void +clutter_gst_player_set_user_agent_impl (ClutterGstPlayer *player, + const gchar *user_agent) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + g_free (priv->user_agent); + if (user_agent) + priv->user_agent = g_strdup (user_agent); + else + priv->user_agent = NULL; + + player_set_user_agent (player, user_agent); +} + +static ClutterGstSeekFlags +clutter_gst_player_get_seek_flags_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + if (priv->seek_flags == GST_SEEK_FLAG_ACCURATE) + return CLUTTER_GST_SEEK_FLAG_ACCURATE; + else + return CLUTTER_GST_SEEK_FLAG_NONE; +} + +static void +clutter_gst_player_set_seek_flags_impl (ClutterGstPlayer *player, + ClutterGstSeekFlags flags) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + if (flags == CLUTTER_GST_SEEK_FLAG_NONE) + priv->seek_flags = GST_SEEK_FLAG_KEY_UNIT; + else if (flags & CLUTTER_GST_SEEK_FLAG_ACCURATE) + priv->seek_flags = GST_SEEK_FLAG_ACCURATE; +} + +static ClutterGstBufferingMode +clutter_gst_player_get_buffering_mode_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + GstPlayFlags flags; + + priv = PLAYER_GET_PRIVATE (player); + + g_object_get (G_OBJECT (priv->pipeline), "flags", &flags, NULL); + + if (flags & GST_PLAY_FLAG_DOWNLOAD) + return CLUTTER_GST_BUFFERING_MODE_DOWNLOAD; + + return CLUTTER_GST_BUFFERING_MODE_STREAM; +} + +static void +clutter_gst_player_set_buffering_mode_impl (ClutterGstPlayer *player, + ClutterGstBufferingMode mode) +{ + ClutterGstPlayerPrivate *priv; + GstPlayFlags flags; + + priv = PLAYER_GET_PRIVATE (player); + + g_object_get (G_OBJECT (priv->pipeline), "flags", &flags, NULL); + + switch (mode) + { + case CLUTTER_GST_BUFFERING_MODE_STREAM: + flags &= ~GST_PLAY_FLAG_DOWNLOAD; + break; + + case CLUTTER_GST_BUFFERING_MODE_DOWNLOAD: + flags |= GST_PLAY_FLAG_DOWNLOAD; + break; + + default: + g_warning ("Unexpected buffering mode %d", mode); + break; + } + + g_object_set (G_OBJECT (priv->pipeline), "flags", flags, NULL); +} + +static GList * +clutter_gst_player_get_audio_streams_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + if (CLUTTER_GST_DEBUG_ENABLED (AUDIO_STREAM)) + { + gchar *streams; + + streams = list_to_string (priv->audio_streams); + CLUTTER_GST_NOTE (AUDIO_STREAM, "audio streams: %s", streams); + g_free (streams); + } + + return priv->audio_streams; +} + +static gint +clutter_gst_player_get_audio_stream_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + gint index_ = -1; + + priv = PLAYER_GET_PRIVATE (player); + + g_object_get (G_OBJECT (priv->pipeline), + "current-audio", &index_, + NULL); + + CLUTTER_GST_NOTE (AUDIO_STREAM, "audio stream is #%d", index_); + + return index_; +} + +static void +clutter_gst_player_set_audio_stream_impl (ClutterGstPlayer *player, + gint index_) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + g_return_if_fail (index_ >= 0 && + index_ < (gint) g_list_length (priv->audio_streams)); + + CLUTTER_GST_NOTE (AUDIO_STREAM, "set audio audio stream to #%d", index_); + + g_object_set (G_OBJECT (priv->pipeline), + "current-audio", index_, + NULL); +} + +static GList * +clutter_gst_player_get_subtitle_tracks_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + if (CLUTTER_GST_DEBUG_ENABLED (SUBTITLES)) + { + gchar *tracks; + + tracks = list_to_string (priv->subtitle_tracks); + CLUTTER_GST_NOTE (SUBTITLES, "subtitle tracks: %s", tracks); + g_free (tracks); + } + + return priv->subtitle_tracks; +} + +static gint +clutter_gst_player_get_subtitle_track_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + gint index_ = -1; + + priv = PLAYER_GET_PRIVATE (player); + + g_object_get (G_OBJECT (priv->pipeline), + "current-text", &index_, + NULL); + + CLUTTER_GST_NOTE (SUBTITLES, "text track is #%d", index_); + + return index_; +} + +static void +clutter_gst_player_set_subtitle_track_impl (ClutterGstPlayer *player, + gint index_) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + g_return_if_fail (index_ >= -1 && + index_ < (gint) g_list_length (priv->subtitle_tracks)); + + CLUTTER_GST_NOTE (SUBTITLES, "set subtitle track to #%d", index_); + + g_object_set (G_OBJECT (priv->pipeline), + "current-text", index_, + NULL); +} + +static gboolean +clutter_gst_player_get_idle_impl (ClutterGstPlayer *player) +{ + ClutterGstPlayerPrivate *priv; + + priv = PLAYER_GET_PRIVATE (player); + + return priv->is_idle; +} + +/**/ + /** * clutter_gst_player_init: * @player: a #ClutterGstPlayer @@ -1655,6 +1906,7 @@ gboolean clutter_gst_player_init (ClutterGstPlayer *player) { ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), FALSE); @@ -1662,6 +1914,23 @@ clutter_gst_player_init (ClutterGstPlayer *player) if (priv) return TRUE; + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); + + iface->get_pipeline = clutter_gst_player_get_pipeline_impl; + iface->get_user_agent = clutter_gst_player_get_user_agent_impl; + iface->set_user_agent = clutter_gst_player_set_user_agent_impl; + iface->get_seek_flags = clutter_gst_player_get_seek_flags_impl; + iface->set_seek_flags = clutter_gst_player_set_seek_flags_impl; + iface->get_buffering_mode = clutter_gst_player_get_buffering_mode_impl; + iface->set_buffering_mode = clutter_gst_player_set_buffering_mode_impl; + iface->get_audio_streams = clutter_gst_player_get_audio_streams_impl; + iface->get_audio_stream = clutter_gst_player_get_audio_stream_impl; + iface->set_audio_stream = clutter_gst_player_set_audio_stream_impl; + iface->get_subtitle_tracks = clutter_gst_player_get_subtitle_tracks_impl; + iface->get_subtitle_track = clutter_gst_player_get_subtitle_track_impl; + iface->set_subtitle_track = clutter_gst_player_set_subtitle_track_impl; + iface->get_idle = clutter_gst_player_get_idle_impl; + priv = g_slice_new0 (ClutterGstPlayerPrivate); PLAYER_SET_PRIVATE (player, priv); @@ -1901,6 +2170,8 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface) } } +/* ClutterGstIface */ + /** * clutter_gst_player_get_pipeline: * @player: a #ClutterGstPlayer @@ -1915,13 +2186,13 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface) GstElement * clutter_gst_player_get_pipeline (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), NULL); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - return priv->pipeline; + return iface->get_pipeline (player); } /** @@ -1938,33 +2209,13 @@ clutter_gst_player_get_pipeline (ClutterGstPlayer *player) gchar * clutter_gst_player_get_user_agent (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; - GstElement *source; - GParamSpec *pspec; - gchar *user_agent; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), NULL); - priv = PLAYER_GET_PRIVATE (player); - - /* If the user has set a custom user agent, we just return it even if it is - * not used by the current source element of the pipeline */ - if (priv->user_agent) - return g_strdup (priv->user_agent); - - /* If not, we try to retrieve the user agent used by the current source */ - g_object_get (priv->pipeline, "source", &source, NULL); - if (source == NULL) - return NULL; + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (source), - "user-agent"); - if (pspec == NULL) - return NULL; - - g_object_get (source, "user-agent", &user_agent, NULL); - - return user_agent; + return iface->get_user_agent (player); } /** @@ -1984,19 +2235,13 @@ void clutter_gst_player_set_user_agent (ClutterGstPlayer *player, const gchar *user_agent) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_if_fail (CLUTTER_GST_IS_PLAYER (player)); - priv = PLAYER_GET_PRIVATE (player); - - g_free (priv->user_agent); - if (user_agent) - priv->user_agent = g_strdup (user_agent); - else - priv->user_agent = NULL; + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - player_set_user_agent (player, user_agent); + iface->set_user_agent (player, user_agent); } /** @@ -2012,17 +2257,14 @@ clutter_gst_player_set_user_agent (ClutterGstPlayer *player, ClutterGstSeekFlags clutter_gst_player_get_seek_flags (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), CLUTTER_GST_SEEK_FLAG_NONE); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - if (priv->seek_flags == GST_SEEK_FLAG_ACCURATE) - return CLUTTER_GST_SEEK_FLAG_ACCURATE; - else - return CLUTTER_GST_SEEK_FLAG_NONE; + return iface->get_seek_flags (player); } /** @@ -2039,16 +2281,13 @@ void clutter_gst_player_set_seek_flags (ClutterGstPlayer *player, ClutterGstSeekFlags flags) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_if_fail (CLUTTER_GST_IS_PLAYER (player)); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - if (flags == CLUTTER_GST_SEEK_FLAG_NONE) - priv->seek_flags = GST_SEEK_FLAG_KEY_UNIT; - else if (flags & CLUTTER_GST_SEEK_FLAG_ACCURATE) - priv->seek_flags = GST_SEEK_FLAG_ACCURATE; + iface->set_seek_flags (player, flags); } /** @@ -2062,20 +2301,14 @@ clutter_gst_player_set_seek_flags (ClutterGstPlayer *player, ClutterGstBufferingMode clutter_gst_player_get_buffering_mode (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; - GstPlayFlags flags; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), CLUTTER_GST_BUFFERING_MODE_STREAM); - priv = PLAYER_GET_PRIVATE (player); - - g_object_get (G_OBJECT (priv->pipeline), "flags", &flags, NULL); - - if (flags & GST_PLAY_FLAG_DOWNLOAD) - return CLUTTER_GST_BUFFERING_MODE_DOWNLOAD; + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - return CLUTTER_GST_BUFFERING_MODE_STREAM; + return iface->get_buffering_mode (player); } /** @@ -2089,31 +2322,13 @@ void clutter_gst_player_set_buffering_mode (ClutterGstPlayer *player, ClutterGstBufferingMode mode) { - ClutterGstPlayerPrivate *priv; - GstPlayFlags flags; + ClutterGstPlayerIface *iface; g_return_if_fail (CLUTTER_GST_IS_PLAYER (player)); - priv = PLAYER_GET_PRIVATE (player); - - g_object_get (G_OBJECT (priv->pipeline), "flags", &flags, NULL); - - switch (mode) - { - case CLUTTER_GST_BUFFERING_MODE_STREAM: - flags &= ~GST_PLAY_FLAG_DOWNLOAD; - break; - - case CLUTTER_GST_BUFFERING_MODE_DOWNLOAD: - flags |= GST_PLAY_FLAG_DOWNLOAD; - break; - - default: - g_warning ("Unexpected buffering mode %d", mode); - break; - } + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - g_object_set (G_OBJECT (priv->pipeline), "flags", flags, NULL); + iface->set_buffering_mode (player, mode); } /** @@ -2130,22 +2345,13 @@ clutter_gst_player_set_buffering_mode (ClutterGstPlayer *player, GList * clutter_gst_player_get_audio_streams (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), NULL); - priv = PLAYER_GET_PRIVATE (player); - - if (CLUTTER_GST_DEBUG_ENABLED (AUDIO_STREAM)) - { - gchar *streams; - - streams = list_to_string (priv->audio_streams); - CLUTTER_GST_NOTE (AUDIO_STREAM, "audio streams: %s", streams); - g_free (streams); - } + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - return priv->audio_streams; + return iface->get_audio_streams (player); } /** @@ -2164,20 +2370,13 @@ clutter_gst_player_get_audio_streams (ClutterGstPlayer *player) gint clutter_gst_player_get_audio_stream (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; - gint index_ = -1; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), -1); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - g_object_get (G_OBJECT (priv->pipeline), - "current-audio", &index_, - NULL); - - CLUTTER_GST_NOTE (AUDIO_STREAM, "audio stream is #%d", index_); - - return index_; + return iface->get_audio_stream (player); } /** @@ -2194,20 +2393,13 @@ void clutter_gst_player_set_audio_stream (ClutterGstPlayer *player, gint index_) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_if_fail (CLUTTER_GST_IS_PLAYER (player)); - priv = PLAYER_GET_PRIVATE (player); - - g_return_if_fail (index_ >= 0 && - index_ < (gint) g_list_length (priv->audio_streams)); - - CLUTTER_GST_NOTE (AUDIO_STREAM, "set audio audio stream to #%d", index_); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - g_object_set (G_OBJECT (priv->pipeline), - "current-audio", index_, - NULL); + iface->set_audio_stream (player, index_); } /** @@ -2224,22 +2416,13 @@ clutter_gst_player_set_audio_stream (ClutterGstPlayer *player, GList * clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), NULL); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - if (CLUTTER_GST_DEBUG_ENABLED (SUBTITLES)) - { - gchar *tracks; - - tracks = list_to_string (priv->subtitle_tracks); - CLUTTER_GST_NOTE (SUBTITLES, "subtitle tracks: %s", tracks); - g_free (tracks); - } - - return priv->subtitle_tracks; + return iface->get_subtitle_tracks (player); } /** @@ -2258,21 +2441,13 @@ clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer *player) gint clutter_gst_player_get_subtitle_track (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; - gint index_ = -1; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), -1); - priv = PLAYER_GET_PRIVATE (player); - - g_object_get (G_OBJECT (priv->pipeline), - "current-text", &index_, - NULL); - - CLUTTER_GST_NOTE (SUBTITLES, "text track is #%d", index_); - - return index_; + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); + return iface->get_subtitle_track (player); } /** @@ -2291,20 +2466,13 @@ void clutter_gst_player_set_subtitle_track (ClutterGstPlayer *player, gint index_) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_if_fail (CLUTTER_GST_IS_PLAYER (player)); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - g_return_if_fail (index_ >= -1 && - index_ < (gint) g_list_length (priv->subtitle_tracks)); - - CLUTTER_GST_NOTE (SUBTITLES, "set subtitle track to #%d", index_); - - g_object_set (G_OBJECT (priv->pipeline), - "current-text", index_, - NULL); + iface->set_subtitle_track (player, index_); } /** @@ -2320,11 +2488,11 @@ clutter_gst_player_set_subtitle_track (ClutterGstPlayer *player, gboolean clutter_gst_player_get_idle (ClutterGstPlayer *player) { - ClutterGstPlayerPrivate *priv; + ClutterGstPlayerIface *iface; g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player), TRUE); - priv = PLAYER_GET_PRIVATE (player); + iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player); - return priv->is_idle; + return iface->get_idle (player); } diff --git a/clutter-gst/clutter-gst-player.h b/clutter-gst/clutter-gst-player.h index bee442c..38ac23d 100644 --- a/clutter-gst/clutter-gst-player.h +++ b/clutter-gst/clutter-gst-player.h @@ -81,15 +81,67 @@ struct _ClutterGstPlayerIface ClutterGstPlayerIfacePrivate *priv; /*< public >*/ + GstElement * (* get_pipeline) (ClutterGstPlayer *player); + + gchar * (* get_user_agent) (ClutterGstPlayer *player); + void (* set_user_agent) (ClutterGstPlayer *player, + const gchar *user_agent); + + ClutterGstSeekFlags (* get_seek_flags) (ClutterGstPlayer *player); + void (* set_seek_flags) (ClutterGstPlayer *player, + ClutterGstSeekFlags flags); + + ClutterGstBufferingMode (* get_buffering_mode) (ClutterGstPlayer *player); + void (* set_buffering_mode) (ClutterGstPlayer *player, + ClutterGstBufferingMode mode); + + GList * (* get_audio_streams) (ClutterGstPlayer *player); + gint (* get_audio_stream) (ClutterGstPlayer *player); + void (* set_audio_stream) (ClutterGstPlayer *player, + gint index_); + + GList * (* get_subtitle_tracks) (ClutterGstPlayer *player); + gint (* get_subtitle_track) (ClutterGstPlayer *player); + void (* set_subtitle_track) (ClutterGstPlayer *player, + gint index_); + + gboolean (*get_idle) (ClutterGstPlayer *player); + + void (* _iface_reserved15) (void); + void (* _iface_reserved16) (void); + void (* _iface_reserved17) (void); + void (* _iface_reserved18) (void); + void (* _iface_reserved19) (void); + void (* _iface_reserved20) (void); + void (* _iface_reserved21) (void); + void (* _iface_reserved22) (void); + void (* _iface_reserved23) (void); + void (* _iface_reserved24) (void); + void (* _iface_reserved25) (void); + void (* _iface_reserved26) (void); + void (* _iface_reserved27) (void); + void (* _iface_reserved28) (void); + void (* _iface_reserved29) (void); + void (* _iface_reserved30) (void); + void (* _iface_reserved31) (void); + void (* _iface_reserved32) (void); + void (* _iface_reserved33) (void); + void (* _iface_reserved34) (void); + void (* _iface_reserved35) (void); + /* signals */ - void (* download_buffering) (ClutterGstPlayer *player, - gdouble start, - gdouble stop); - void (* _clutter_reserved2) (void); - void (* _clutter_reserved3) (void); - void (* _clutter_reserved4) (void); - void (* _clutter_reserved5) (void); - void (* _clutter_reserved6) (void); + void (* download_buffering) (ClutterGstPlayer *player, + gdouble start, + gdouble stop); + void (* _clutter_reserved2) (void); + void (* _clutter_reserved3) (void); + void (* _clutter_reserved4) (void); + void (* _clutter_reserved5) (void); + void (* _clutter_reserved6) (void); + void (* _clutter_reserved7) (void); + void (* _clutter_reserved8) (void); + void (* _clutter_reserved9) (void); + void (* _clutter_reserved10) (void); }; GType clutter_gst_player_get_type (void) G_GNUC_CONST; |