summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2013-11-27 15:14:08 +0100
committerWim Taymans <wtaymans@redhat.com>2013-11-27 15:14:08 +0100
commitbb302c4839d59460184f3c3d43db1fd7f70c162c (patch)
tree262e3f272eaf328b960eab7133119e54c557ed81
parent8f12bd09c94466206384414bc43daadcc126c218 (diff)
media: refactorwork2
-rw-r--r--gst/rtsp-server/rtsp-media.c66
1 files changed, 27 insertions, 39 deletions
diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c
index 7940735..1adb002 100644
--- a/gst/rtsp-server/rtsp-media.c
+++ b/gst/rtsp-server/rtsp-media.c
@@ -1339,6 +1339,24 @@ conversion_failed:
}
}
+static void
+stream_update_blocked (GstRTSPStream * stream, GstRTSPMedia * media)
+{
+ gst_rtsp_stream_set_blocked (stream, media->priv->blocked);
+}
+
+static void
+stream_wait_blocking (GstRTSPStream * stream, GstRTSPMedia * media)
+{
+ gst_rtsp_stream_wait_blocking (stream);
+}
+
+static void
+stream_wakeup (GstRTSPStream * stream, GstRTSPMedia * media)
+{
+ gst_rtsp_stream_wakeup (stream);
+}
+
/**
* gst_rtsp_media_seek:
* @media: a #GstRTSPMedia
@@ -1359,7 +1377,6 @@ gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
GstClockTime start, stop;
GstSeekType start_type, stop_type;
GstQuery *query;
- guint i;
klass = GST_RTSP_MEDIA_GET_CLASS (media);
@@ -1417,14 +1434,8 @@ gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
GST_INFO ("seeking to %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
- if (priv->blocked) {
- for (i = 0; i < priv->streams->len; i++) {
- GstRTSPStream *stream;
-
- stream = g_ptr_array_index (priv->streams, i);
- gst_rtsp_stream_set_blocked (stream, TRUE);
- }
- }
+ if (priv->blocked)
+ g_ptr_array_foreach (priv->streams, (GFunc) stream_update_blocked, media);
res = gst_element_seek (priv->pipeline, 1.0, GST_FORMAT_TIME,
flags, start_type, start, stop_type, stop);
@@ -1433,14 +1444,9 @@ gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range)
GST_INFO ("done seeking %d", res);
/* wait until pipeline is prerolled again */
- if (priv->blocked) {
- for (i = 0; i < priv->streams->len; i++) {
- GstRTSPStream *stream;
-
- stream = g_ptr_array_index (priv->streams, i);
- gst_rtsp_stream_wait_blocking (stream);
- }
- } else
+ if (priv->blocked)
+ g_ptr_array_foreach (priv->streams, (GFunc) stream_wait_blocking, media);
+ else
gst_element_get_state (priv->pipeline, NULL, NULL, -1);
GST_INFO ("prerolled again");
@@ -1482,14 +1488,7 @@ gst_rtsp_media_set_status (GstRTSPMedia * media, GstRTSPMediaStatus status)
g_mutex_lock (&priv->lock);
if (G_UNLIKELY (priv->blocked && status == GST_RTSP_MEDIA_STATUS_ERROR)) {
- guint i;
-
- for (i = 0; i < priv->streams->len; i++) {
- GstRTSPStream *stream;
-
- stream = g_ptr_array_index (priv->streams, i);
- gst_rtsp_stream_wakeup (stream);
- }
+ g_ptr_array_foreach (priv->streams, (GFunc) stream_wakeup, media);
}
priv->status = status;
@@ -2388,7 +2387,6 @@ state_failed:
gboolean
gst_rtsp_media_undo_reset (GstRTSPMedia * media)
{
- guint i;
GstRTSPMediaPrivate *priv = media->priv;
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), FALSE);
@@ -2403,12 +2401,7 @@ gst_rtsp_media_undo_reset (GstRTSPMedia * media)
/* wait until pipeline is prerolled */
if (priv->blocked) {
- for (i = 0; i < priv->streams->len; i++) {
- GstRTSPStream *stream;
-
- stream = g_ptr_array_index (priv->streams, i);
- gst_rtsp_stream_wait_blocking (stream);
- }
+ g_ptr_array_foreach (priv->streams, (GFunc) stream_wait_blocking, media);
priv->status = GST_RTSP_MEDIA_STATUS_PREPARED;
} else {
GstRTSPMediaStatus status;
@@ -2444,6 +2437,7 @@ preroll_failed:
}
}
+
/**
* gst_rtsp_media_streams_set_blocked:
* @media: a #GstRTSPMedia
@@ -2459,7 +2453,6 @@ gboolean
gst_rtsp_media_streams_set_blocked (GstRTSPMedia * media, gboolean blocked)
{
GstRTSPMediaPrivate *priv = media->priv;
- guint i;
g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), FALSE);
@@ -2469,12 +2462,7 @@ gst_rtsp_media_streams_set_blocked (GstRTSPMedia * media, gboolean blocked)
goto wrong_status;
priv->blocked = blocked;
- for (i = 0; i < priv->streams->len; i++) {
- GstRTSPStream *stream;
-
- stream = g_ptr_array_index (priv->streams, i);
- gst_rtsp_stream_set_blocked (stream, blocked);
- }
+ g_ptr_array_foreach (priv->streams, (GFunc) stream_update_blocked, media);
g_rec_mutex_unlock (&priv->state_lock);
return TRUE;