mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 04:36:20 +00:00
session-media: add locking
This commit is contained in:
parent
11cf3f3ccb
commit
883cf794e4
2 changed files with 13 additions and 0 deletions
|
@ -53,6 +53,7 @@ gst_rtsp_session_media_class_init (GstRTSPSessionMediaClass * klass)
|
||||||
static void
|
static void
|
||||||
gst_rtsp_session_media_init (GstRTSPSessionMedia * media)
|
gst_rtsp_session_media_init (GstRTSPSessionMedia * media)
|
||||||
{
|
{
|
||||||
|
g_mutex_init (&media->lock);
|
||||||
media->state = GST_RTSP_STATE_INIT;
|
media->state = GST_RTSP_STATE_INIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ gst_rtsp_session_media_finalize (GObject * obj)
|
||||||
|
|
||||||
gst_rtsp_url_free (media->url);
|
gst_rtsp_url_free (media->url);
|
||||||
g_object_unref (media->media);
|
g_object_unref (media->media);
|
||||||
|
g_mutex_clear (&media->lock);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gst_rtsp_session_media_parent_class)->finalize (obj);
|
G_OBJECT_CLASS (gst_rtsp_session_media_parent_class)->finalize (obj);
|
||||||
}
|
}
|
||||||
|
@ -136,13 +138,17 @@ gst_rtsp_session_media_set_transport (GstRTSPSessionMedia * media,
|
||||||
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
|
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
|
||||||
g_return_val_if_fail (stream->idx < media->transports->len, NULL);
|
g_return_val_if_fail (stream->idx < media->transports->len, NULL);
|
||||||
|
|
||||||
|
g_mutex_lock (&media->lock);
|
||||||
result = g_ptr_array_index (media->transports, stream->idx);
|
result = g_ptr_array_index (media->transports, stream->idx);
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
result = gst_rtsp_stream_transport_new (stream, tr);
|
result = gst_rtsp_stream_transport_new (stream, tr);
|
||||||
g_ptr_array_index (media->transports, stream->idx) = result;
|
g_ptr_array_index (media->transports, stream->idx) = result;
|
||||||
|
g_mutex_unlock (&media->lock);
|
||||||
} else {
|
} else {
|
||||||
gst_rtsp_stream_transport_set_transport (result, tr);
|
gst_rtsp_stream_transport_set_transport (result, tr);
|
||||||
|
g_mutex_unlock (&media->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +170,9 @@ gst_rtsp_session_media_get_transport (GstRTSPSessionMedia * media, guint idx)
|
||||||
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), NULL);
|
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), NULL);
|
||||||
g_return_val_if_fail (idx < media->transports->len, NULL);
|
g_return_val_if_fail (idx < media->transports->len, NULL);
|
||||||
|
|
||||||
|
g_mutex_lock (&media->lock);
|
||||||
result = g_ptr_array_index (media->transports, idx);
|
result = g_ptr_array_index (media->transports, idx);
|
||||||
|
g_mutex_unlock (&media->lock);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -185,8 +193,10 @@ gst_rtsp_session_media_alloc_channels (GstRTSPSessionMedia * media,
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), FALSE);
|
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), FALSE);
|
||||||
|
|
||||||
|
g_mutex_lock (&media->lock);
|
||||||
range->min = media->counter++;
|
range->min = media->counter++;
|
||||||
range->max = media->counter++;
|
range->max = media->counter++;
|
||||||
|
g_mutex_unlock (&media->lock);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -207,7 +217,9 @@ gst_rtsp_session_media_set_state (GstRTSPSessionMedia * media, GstState state)
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), FALSE);
|
g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), FALSE);
|
||||||
|
|
||||||
|
g_mutex_lock (&media->lock);
|
||||||
ret = gst_rtsp_media_set_state (media->media, state, media->transports);
|
ret = gst_rtsp_media_set_state (media->media, state, media->transports);
|
||||||
|
g_mutex_unlock (&media->lock);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ struct _GstRTSPSessionMedia
|
||||||
{
|
{
|
||||||
GObject parent;
|
GObject parent;
|
||||||
|
|
||||||
|
GMutex lock;
|
||||||
GstRTSPUrl *url;
|
GstRTSPUrl *url;
|
||||||
GstRTSPMedia *media;
|
GstRTSPMedia *media;
|
||||||
GstRTSPState state;
|
GstRTSPState state;
|
||||||
|
|
Loading…
Reference in a new issue