From: Wim Taymans Date: Fri, 12 Apr 2013 10:34:38 +0000 (+0100) Subject: media: add method to get the base_time of the pipeline X-Git-Tag: 1.6.0~556 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a64cb68164c91d4bcc5a25a22ed9cec8bf947346;p=platform%2Fupstream%2Fgst-rtsp-server.git media: add method to get the base_time of the pipeline Together with a shared clock, this base-time could eventually be sent to the client so that it can reconstruct the exact running-time of the clock on the server. --- diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c index 0b0d33c..2f7d498 100644 --- a/gst/rtsp-server/rtsp-media.c +++ b/gst/rtsp-server/rtsp-media.c @@ -1745,7 +1745,44 @@ gst_rtsp_media_get_clock (GstRTSPMedia * media) g_rec_mutex_unlock (&priv->state_lock); return clock; +} + +/** + * gst_rtsp_media_get_base_time: + * @media: a #GstRTSPMedia + * + * Get the base_time that is used by the pipeline in @media. + * + * @media must be prepared before this method returns a valid base_time. + * + * Returns: the base_time used by @media. + */ +GstClockTime +gst_rtsp_media_get_base_time (GstRTSPMedia * media) +{ + GstClockTime result; + GstRTSPMediaPrivate *priv; + + g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), GST_CLOCK_TIME_NONE); + + priv = media->priv; + g_rec_mutex_lock (&priv->state_lock); + if (media->priv->status != GST_RTSP_MEDIA_STATUS_PREPARED) + goto not_prepared; + + result = gst_element_get_base_time (media->priv->pipeline); + g_rec_mutex_unlock (&priv->state_lock); + + return result; + + /* ERRORS */ +not_prepared: + { + g_rec_mutex_unlock (&priv->state_lock); + GST_DEBUG_OBJECT (media, "media was not prepared"); + return GST_CLOCK_TIME_NONE; + } } /** diff --git a/gst/rtsp-server/rtsp-media.h b/gst/rtsp-server/rtsp-media.h index a103ad2..2a7c3db 100644 --- a/gst/rtsp-server/rtsp-media.h +++ b/gst/rtsp-server/rtsp-media.h @@ -157,6 +157,7 @@ GstRTSPStream * gst_rtsp_media_create_stream (GstRTSPMedia *media, /* dealing with the media */ GstClock * gst_rtsp_media_get_clock (GstRTSPMedia *media); +GstClockTime gst_rtsp_media_get_base_time (GstRTSPMedia *media); guint gst_rtsp_media_n_streams (GstRTSPMedia *media); GstRTSPStream * gst_rtsp_media_get_stream (GstRTSPMedia *media, guint idx); diff --git a/gst/rtsp-server/rtsp-session-media.c b/gst/rtsp-server/rtsp-session-media.c index d708163..c475f8f 100644 --- a/gst/rtsp-server/rtsp-session-media.c +++ b/gst/rtsp-server/rtsp-session-media.c @@ -177,6 +177,22 @@ gst_rtsp_session_media_get_media (GstRTSPSessionMedia * media) } /** + * gst_rtsp_session_media_get_base_time: + * @media: a #GstRTSPSessionMedia + * + * Get the base_time of the #GstRTSPMedia in @media + * + * Returns: the base_time of the media. + */ +GstClockTime +gst_rtsp_session_media_get_base_time (GstRTSPSessionMedia * media) +{ + g_return_val_if_fail (GST_IS_RTSP_SESSION_MEDIA (media), GST_CLOCK_TIME_NONE); + + return gst_rtsp_media_get_base_time (media->priv->media); +} + +/** * gst_rtsp_session_media_set_transport: * @media: a #GstRTSPSessionMedia * @stream: a #GstRTSPStream diff --git a/gst/rtsp-server/rtsp-session-media.h b/gst/rtsp-server/rtsp-session-media.h index b6816b3..167c0aa 100644 --- a/gst/rtsp-server/rtsp-session-media.h +++ b/gst/rtsp-server/rtsp-session-media.h @@ -71,6 +71,7 @@ gboolean gst_rtsp_session_media_matches_url (GstRTSPSessionMe const GstRTSPUrl *url); GstRTSPMedia * gst_rtsp_session_media_get_media (GstRTSPSessionMedia *media); +GstClockTime gst_rtsp_session_media_get_base_time (GstRTSPSessionMedia *media); /* control media */ gboolean gst_rtsp_session_media_set_state (GstRTSPSessionMedia *media, GstState state);