media: add method to get the base_time of the pipeline
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 12 Apr 2013 10:34:38 +0000 (11:34 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Fri, 12 Apr 2013 10:34:38 +0000 (11:34 +0100)
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.

gst/rtsp-server/rtsp-media.c
gst/rtsp-server/rtsp-media.h
gst/rtsp-server/rtsp-session-media.c
gst/rtsp-server/rtsp-session-media.h

index 0b0d33c..2f7d498 100644 (file)
@@ -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;
+  }
 }
 
 /**
index a103ad2..2a7c3db 100644 (file)
@@ -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);
index d708163..c475f8f 100644 (file)
@@ -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
index b6816b3..167c0aa 100644 (file)
@@ -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);