diff options
author | Wim Taymans <wtaymans@redhat.com> | 2013-11-27 15:14:08 +0100 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2013-11-27 15:14:08 +0100 |
commit | bb302c4839d59460184f3c3d43db1fd7f70c162c (patch) | |
tree | 262e3f272eaf328b960eab7133119e54c557ed81 | |
parent | 8f12bd09c94466206384414bc43daadcc126c218 (diff) |
media: refactorwork2
-rw-r--r-- | gst/rtsp-server/rtsp-media.c | 66 |
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; |