media: make method to retrieve the play range
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 28 Dec 2010 17:35:01 +0000 (18:35 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 28 Dec 2010 17:35:01 +0000 (18:35 +0100)
Make a method to retrieve the playback range so that we can conditionally create
a different range for the SDP and the PLAY requests.

gst/rtsp-server/rtsp-client.c
gst/rtsp-server/rtsp-media.c
gst/rtsp-server/rtsp-media.h
gst/rtsp-server/rtsp-sdp.c

index 2294564..b352378 100644 (file)
@@ -708,7 +708,7 @@ handle_play_request (GstRTSPClient * client, GstRTSPUrl * uri,
   }
 
   /* add the range */
-  str = gst_rtsp_range_to_string (&media->media->range);
+  str = gst_rtsp_media_get_range_string (media->media, TRUE);
   gst_rtsp_message_take_header (&response, GST_RTSP_HDR_RANGE, str);
 
   send_response (client, session, &response);
index 45843b4..21dfa45 100644 (file)
@@ -353,7 +353,7 @@ collect_media_stats (GstRTSPMedia * media)
     GST_INFO ("stats: position %" GST_TIME_FORMAT ", duration %"
         GST_TIME_FORMAT, GST_TIME_ARGS (position), GST_TIME_ARGS (duration));
 
-    if (position == -1 || media->active > 0) {
+    if (position == -1) {
       media->range.min.type = GST_RTSP_TIME_NOW;
       media->range.min.seconds = -1;
     } else {
@@ -561,6 +561,34 @@ gst_rtsp_media_get_stream (GstRTSPMedia * media, guint idx)
 }
 
 /**
+ * gst_rtsp_media_get_range_string:
+ * @media: a #GstRTSPMedia
+ * @play: for the PLAY request
+ *
+ * Get the current range as a string.
+ *
+ * Returns: The range as a string, g_free() after usage.
+ */
+gchar *
+gst_rtsp_media_get_range_string (GstRTSPMedia * media, gboolean play)
+{
+  gchar *result;
+  GstRTSPTimeRange range;
+
+  /* make copy */
+  range = media->range;
+
+  if (!play && media->active > 0) {
+    range.min.type = GST_RTSP_TIME_NOW;
+    range.min.seconds = -1;
+  }
+
+  result = gst_rtsp_range_to_string (&range);
+
+  return result;
+}
+
+/**
  * gst_rtsp_media_seek:
  * @media: a #GstRTSPMedia
  * @range: a #GstRTSPTimeRange
index fc4b159..2c83f76 100644 (file)
@@ -283,6 +283,7 @@ guint                 gst_rtsp_media_n_streams        (GstRTSPMedia *media);
 GstRTSPMediaStream *  gst_rtsp_media_get_stream       (GstRTSPMedia *media, guint idx);
 
 gboolean              gst_rtsp_media_seek             (GstRTSPMedia *media, GstRTSPTimeRange *range);
+gchar *               gst_rtsp_media_get_range_string (GstRTSPMedia *media, gboolean play);
 
 GstFlowReturn         gst_rtsp_media_stream_rtp       (GstRTSPMediaStream *stream, GstBuffer *buffer);
 GstFlowReturn         gst_rtsp_media_stream_rtcp      (GstRTSPMediaStream *stream, GstBuffer *buffer);
index 2db7e6f..c6b379b 100644 (file)
@@ -43,7 +43,7 @@ gst_rtsp_sdp_from_media (GstSDPMessage * sdp, GstSDPInfo * info,
 
   n_streams = gst_rtsp_media_n_streams (media);
 
-  rangestr = gst_rtsp_range_to_string (&media->range);
+  rangestr = gst_rtsp_media_get_range_string (media, FALSE);
   gst_sdp_message_add_attribute (sdp, "range", rangestr);
   g_free (rangestr);