--- a/gst_plugins_base/gst-libs/gst/rtsp/gstrtsprange.c Wed Mar 24 17:58:42 2010 -0500
+++ b/gst_plugins_base/gst-libs/gst/rtsp/gstrtsprange.c Wed Mar 24 18:04:17 2010 -0500
@@ -69,7 +69,7 @@
static GstRTSPResult
parse_npt_time (const gchar * str, GstRTSPTime * time)
{
- if (strcmp (str, "now") == 0) {
+ if (strncmp (str, "now", 3) == 0) {
time->type = GST_RTSP_TIME_NOW;
} else if (str[0] == '\0') {
time->type = GST_RTSP_TIME_END;
@@ -167,9 +167,10 @@
} else
goto invalid;
- if (ret == GST_RTSP_OK)
- *range = res;
+ if (ret != GST_RTSP_OK)
+ goto invalid;
+ *range = res;
return ret;
/* ERRORS */
@@ -180,6 +181,88 @@
}
}
+static gboolean
+npt_time_string (const GstRTSPTime * time, GString * string)
+{
+ gboolean res = TRUE;;
+
+ switch (time->type) {
+ case GST_RTSP_TIME_SECONDS:
+ g_string_append_printf (string, "%f", time->seconds);
+ break;
+ case GST_RTSP_TIME_NOW:
+ g_string_append (string, "now");
+ break;
+ case GST_RTSP_TIME_END:
+ break;
+ default:
+ res = FALSE;
+ break;
+ }
+ return res;
+}
+
+static gboolean
+npt_range_string (const GstRTSPTimeRange * range, GString * string)
+{
+ gboolean res;
+
+ if (!(res = npt_time_string (&range->min, string)))
+ goto done;
+
+ g_string_append (string, "-");
+
+ if (!(res = npt_time_string (&range->max, string)))
+ goto done;
+
+done:
+ return res;
+}
+
+/**
+ * gst_rtsp_range_to_string:
+ * @range: a #GstRTSPTimeRange
+ *
+ * Convert @range into a string representation.
+ *
+ * Returns: The string representation of @range. g_free() after usage.
+ *
+ * Since: 0.10.23
+ */
+gchar *
+gst_rtsp_range_to_string (const GstRTSPTimeRange * range)
+{
+ gchar *result = NULL;
+ GString *string;
+
+ g_return_val_if_fail (range != NULL, NULL);
+
+ string = g_string_new ("");
+
+ switch (range->unit) {
+ case GST_RTSP_RANGE_NPT:
+ g_string_append (string, "npt=");
+ if (!npt_range_string (range, string)) {
+ g_string_free (string, TRUE);
+ string = NULL;
+ }
+ break;
+ case GST_RTSP_RANGE_SMPTE:
+ case GST_RTSP_RANGE_SMPTE_30_DROP:
+ case GST_RTSP_RANGE_SMPTE_25:
+ case GST_RTSP_RANGE_CLOCK:
+ default:
+ g_warning ("time range unit not yet implemented");
+ g_string_free (string, TRUE);
+ string = NULL;
+ break;
+ }
+ if (string)
+ result = g_string_free (string, FALSE);
+
+ return result;
+}
+
/**
* gst_rtsp_range_free:
* @range: a #GstRTSPTimeRange
@@ -189,8 +272,5 @@
void
gst_rtsp_range_free (GstRTSPTimeRange * range)
{
- if (range == NULL)
- return;
-
g_free (range);
}