summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/libs/gst-plugins-bad-libs-sections.txt6
-rw-r--r--gst-libs/gst/player/gstplayer.c135
-rw-r--r--gst-libs/gst/player/gstplayer.h4
-rw-r--r--tests/check/libs/player.c27
-rw-r--r--win32/common/libgstplayer.def4
5 files changed, 79 insertions, 97 deletions
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index 8e519361e..a14bfc207 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -1708,9 +1708,6 @@ gst_player_get_pipeline
gst_player_set_config
gst_player_get_config
-gst_player_set_position_update_interval
-gst_player_get_position_update_interval
-
GstPlayerState
gst_player_state_get_name
@@ -1767,6 +1764,9 @@ GstPlayerVideoRenderer
GstPlayerVideoRendererInterface
<SUBSECTION config>
+gst_player_config_set_position_update_interval
+gst_player_config_get_position_update_interval
+
gst_player_config_set_user_agent
gst_player_config_get_user_agent
diff --git a/gst-libs/gst/player/gstplayer.c b/gst-libs/gst/player/gstplayer.c
index 01f00e33e..a23d26b08 100644
--- a/gst-libs/gst/player/gstplayer.c
+++ b/gst-libs/gst/player/gstplayer.c
@@ -84,12 +84,14 @@ static GQuark QUARK_CONFIG;
typedef enum
{
CONFIG_QUARK_USER_AGENT = 0,
+ CONFIG_QUARK_POSITION_INTERVAL_UPDATE,
CONFIG_QUARK_MAX
} ConfigQuarkId;
static const gchar *_config_quark_strings[] = {
"user-agent",
+ "position-interval-update",
};
GQuark _config_quark_table[CONFIG_QUARK_MAX];
@@ -113,7 +115,6 @@ enum
PROP_MUTE,
PROP_RATE,
PROP_PIPELINE,
- PROP_POSITION_UPDATE_INTERVAL,
PROP_VIDEO_MULTIVIEW_MODE,
PROP_VIDEO_MULTIVIEW_FLAGS,
PROP_AUDIO_VIDEO_OFFSET,
@@ -169,7 +170,6 @@ struct _GstPlayer
GSource *tick_source, *ready_timeout_source;
gdouble rate;
- guint position_update_interval_ms;
GstPlayerState app_state;
gint buffering;
@@ -218,8 +218,6 @@ static gboolean gst_player_stop_internal (gpointer user_data);
static gboolean gst_player_pause_internal (gpointer user_data);
static gboolean gst_player_play_internal (gpointer user_data);
static gboolean gst_player_set_rate_internal (gpointer user_data);
-static gboolean gst_player_set_position_update_interval_internal (gpointer
- user_data);
static void change_state (GstPlayer * self, GstPlayerState state);
static GstPlayerMediaInfo *gst_player_media_info_create (GstPlayer * self);
@@ -263,9 +261,12 @@ gst_player_init (GstPlayer * self)
self->context = g_main_context_new ();
self->loop = g_main_loop_new (self->context, FALSE);
- self->config = gst_structure_new_id_empty (QUARK_CONFIG);
+ /* *INDENT-OFF* */
+ self->config = gst_structure_new_id (QUARK_CONFIG,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, DEFAULT_POSITION_UPDATE_INTERVAL_MS,
+ NULL);
+ /* *INDENT-ON* */
- self->position_update_interval_ms = DEFAULT_POSITION_UPDATE_INTERVAL_MS;
self->seek_pending = FALSE;
self->seek_position = GST_CLOCK_TIME_NONE;
self->last_seek_time = GST_CLOCK_TIME_NONE;
@@ -367,13 +368,6 @@ gst_player_class_init (GstPlayerClass * klass)
g_param_spec_double ("rate", "rate", "Playback rate",
-64.0, 64.0, DEFAULT_RATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- param_specs[PROP_POSITION_UPDATE_INTERVAL] =
- g_param_spec_uint ("position-update-interval", "Position update interval",
- "Interval in milliseconds between two position-updated signals."
- "Pass 0 to stop updating the position.",
- 0, 10000, DEFAULT_POSITION_UPDATE_INTERVAL_MS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
param_specs[PROP_VIDEO_MULTIVIEW_MODE] =
g_param_spec_enum ("video-multiview-mode",
"Multiview Mode Override",
@@ -672,15 +666,6 @@ gst_player_set_property (GObject * object, guint prop_id,
GST_DEBUG_OBJECT (self, "Set mute=%d", g_value_get_boolean (value));
g_object_set_property (G_OBJECT (self->playbin), "mute", value);
break;
- case PROP_POSITION_UPDATE_INTERVAL:
- g_mutex_lock (&self->lock);
- self->position_update_interval_ms = g_value_get_uint (value);
- GST_DEBUG_OBJECT (self, "Set position update interval=%u ms",
- g_value_get_uint (value));
- g_mutex_unlock (&self->lock);
-
- gst_player_set_position_update_interval_internal (self);
- break;
case PROP_VIDEO_MULTIVIEW_MODE:
GST_DEBUG_OBJECT (self, "Set multiview mode=%u",
g_value_get_enum (value));
@@ -783,11 +768,6 @@ gst_player_get_property (GObject * object, guint prop_id,
case PROP_PIPELINE:
g_value_set_object (value, self->playbin);
break;
- case PROP_POSITION_UPDATE_INTERVAL:
- g_mutex_lock (&self->lock);
- g_value_set_uint (value, gst_player_get_position_update_interval (self));
- g_mutex_unlock (&self->lock);
- break;
case PROP_VIDEO_MULTIVIEW_MODE:{
g_object_get_property (G_OBJECT (self->playbin), "video-multiview-mode",
value);
@@ -932,13 +912,17 @@ tick_cb (gpointer user_data)
static void
add_tick_source (GstPlayer * self)
{
+ guint position_update_interval_ms;
+
if (self->tick_source)
return;
- if (!self->position_update_interval_ms)
+ position_update_interval_ms =
+ gst_player_config_get_position_update_interval (self->config);
+ if (!position_update_interval_ms)
return;
- self->tick_source = g_timeout_source_new (self->position_update_interval_ms);
+ self->tick_source = g_timeout_source_new (position_update_interval_ms);
g_source_set_callback (self->tick_source, (GSourceFunc) tick_cb, self, NULL);
g_source_attach (self->tick_source, self->context);
}
@@ -3092,59 +3076,6 @@ gst_player_get_rate (GstPlayer * self)
return self->rate;
}
-static gboolean
-gst_player_set_position_update_interval_internal (gpointer user_data)
-{
- GstPlayer *self = user_data;
-
- g_mutex_lock (&self->lock);
-
- if (self->tick_source) {
- remove_tick_source (self);
- add_tick_source (self);
- }
-
- g_mutex_unlock (&self->lock);
-
- return G_SOURCE_REMOVE;
-}
-
-/**
- * gst_player_set_position_update_interval:
- * @player: #GstPlayer instance
- * @interval: interval in ms
- *
- * Set interval in milliseconds between two position-updated signals.
- * Pass 0 to stop updating the position.
- */
-void
-gst_player_set_position_update_interval (GstPlayer * self, guint interval)
-{
- g_return_if_fail (GST_IS_PLAYER (self));
- g_return_if_fail (interval <= 10000);
-
- g_mutex_lock (&self->lock);
- self->position_update_interval_ms = interval;
- g_mutex_unlock (&self->lock);
-
- gst_player_set_position_update_interval_internal (self);
-}
-
-/**
- * gst_player_get_position_update_interval:
- * @player: #GstPlayer instance
- *
- * Returns: current position update interval in milliseconds
- */
-guint
-gst_player_get_position_update_interval (GstPlayer * self)
-{
- g_return_val_if_fail (GST_IS_PLAYER (self),
- DEFAULT_POSITION_UPDATE_INTERVAL_MS);
-
- return self->position_update_interval_ms;
-}
-
/**
* gst_player_seek:
* @player: #GstPlayer instance
@@ -4227,3 +4158,43 @@ gst_player_config_get_user_agent (GstStructure * config)
return agent;
}
+
+/**
+ * gst_player_config_set_position_update_interval:
+ * @config: a #GstPlayer configuration
+ * @interval: interval in ms
+ *
+ * set interval in milliseconds between two position-updated signals.
+ * pass 0 to stop updating the position.
+ * Since 1.10
+ */
+void
+gst_player_config_set_position_update_interval (GstStructure * config,
+ guint interval)
+{
+ g_return_if_fail (config != NULL);
+ g_return_if_fail (interval <= 10000);
+
+ gst_structure_id_set (config,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, interval, NULL);
+}
+
+/**
+ * gst_player_config_get_position_update_interval:
+ * @player: #GstPlayer instance
+ *
+ * Returns: current position update interval in milliseconds
+ * Since 1.10
+ */
+guint
+gst_player_config_get_position_update_interval (GstStructure * config)
+{
+ guint interval = DEFAULT_POSITION_UPDATE_INTERVAL_MS;
+
+ g_return_val_if_fail (config != NULL, DEFAULT_POSITION_UPDATE_INTERVAL_MS);
+
+ gst_structure_id_get (config,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, &interval, NULL);
+
+ return interval;
+}
diff --git a/gst-libs/gst/player/gstplayer.h b/gst-libs/gst/player/gstplayer.h
index 93b6d7294..641af21b4 100644
--- a/gst-libs/gst/player/gstplayer.h
+++ b/gst-libs/gst/player/gstplayer.h
@@ -202,6 +202,10 @@ void gst_player_config_set_user_agent (GstStructure * config,
const gchar * agent);
gchar * gst_player_config_get_user_agent (GstStructure * config);
+void gst_player_config_set_position_update_interval (GstStructure * config,
+ guint interval);
+guint gst_player_config_get_position_update_interval (GstStructure * config);
+
G_END_DECLS
#endif /* __GST_PLAYER_H__ */
diff --git a/tests/check/libs/player.c b/tests/check/libs/player.c
index e0fcf9266..e4c83fc70 100644
--- a/tests/check/libs/player.c
+++ b/tests/check/libs/player.c
@@ -100,20 +100,17 @@ START_TEST (test_set_and_get_position_update_interval)
{
GstPlayer *player;
guint interval = 0;
+ GstStructure *config;
player = gst_player_new (NULL, NULL);
fail_unless (player != NULL);
- gst_player_set_position_update_interval (player, 500);
- interval = gst_player_get_position_update_interval (player);
-
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 500);
+ interval = gst_player_config_get_position_update_interval (config);
fail_unless (interval == 500);
-
- g_object_set (player, "position-update-interval", 1000, NULL);
- g_object_get (player, "position-update-interval", &interval, NULL);
-
- fail_unless_equals_int (interval, 1000);
+ gst_player_set_config (player, config);
g_object_unref (player);
}
@@ -1476,7 +1473,6 @@ test_play_position_update_interval_cb (GstPlayer * player,
if (do_quit && position >= 2000 * GST_MSECOND) {
do_quit = FALSE;
- gst_player_set_position_update_interval (player, 0);
g_main_loop_quit (new_state->loop);
}
} else if (change == STATE_CHANGE_END_OF_STREAM ||
@@ -1499,6 +1495,7 @@ START_TEST (test_play_position_update_interval)
GstPlayer *player;
TestPlayerState state;
gchar *uri;
+ GstStructure *config;
memset (&state, 0, sizeof (state));
state.loop = g_main_loop_new (NULL, FALSE);
@@ -1506,7 +1503,10 @@ START_TEST (test_play_position_update_interval)
state.test_data = GINT_TO_POINTER (0);
player = test_player_new (&state);
- gst_player_set_position_update_interval (player, 600);
+
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 600);
+ gst_player_set_config (player, config);
fail_unless (player != NULL);
@@ -1520,6 +1520,13 @@ START_TEST (test_play_position_update_interval)
fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 5);
+ /* Disable position updates */
+ gst_player_stop (player);
+
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 0);
+ gst_player_set_config (player, config);
+
g_timeout_add (2000, quit_loop_cb, state.loop);
g_main_loop_run (state.loop);
diff --git a/win32/common/libgstplayer.def b/win32/common/libgstplayer.def
index 09b74fb98..ccc32ed69 100644
--- a/win32/common/libgstplayer.def
+++ b/win32/common/libgstplayer.def
@@ -7,7 +7,9 @@ EXPORTS
gst_player_audio_info_get_type
gst_player_color_balance_type_get_name
gst_player_color_balance_type_get_type
+ gst_player_config_get_position_update_interval
gst_player_config_get_user_agent
+ gst_player_config_set_position_update_interval
gst_player_config_set_user_agent
gst_player_error_get_name
gst_player_error_get_type
@@ -29,7 +31,6 @@ EXPORTS
gst_player_get_mute
gst_player_get_pipeline
gst_player_get_position
- gst_player_get_position_update_interval
gst_player_get_rate
gst_player_get_subtitle_streams
gst_player_get_subtitle_uri
@@ -60,7 +61,6 @@ EXPORTS
gst_player_set_multiview_flags
gst_player_set_multiview_mode
gst_player_set_mute
- gst_player_set_position_update_interval
gst_player_set_rate
gst_player_set_subtitle_track
gst_player_set_subtitle_track_enabled