}
static gboolean
-npt_time_string (const GstRTSPTime * time, GString * string)
+time_to_string (const GstRTSPTime * t1, const GstRTSPTime2 * t2,
+ GString * string)
{
gchar dstrbuf[G_ASCII_DTOSTR_BUF_SIZE] = { 0, };
gboolean res = TRUE;;
- switch (time->type) {
+ switch (t1->type) {
case GST_RTSP_TIME_SECONDS:
/* need to format floating point value strings as in C locale */
- g_ascii_dtostr (dstrbuf, G_ASCII_DTOSTR_BUF_SIZE, time->seconds);
+ g_ascii_dtostr (dstrbuf, G_ASCII_DTOSTR_BUF_SIZE, t1->seconds);
g_string_append (string, dstrbuf);
break;
case GST_RTSP_TIME_NOW:
break;
case GST_RTSP_TIME_END:
break;
+ case GST_RTSP_TIME_FRAMES:
+ {
+ gint64 sec = t1->seconds;
+
+ /* need to format floating point value strings as in C locale */
+ g_string_append_printf (string, "%d:%02d:%02d:", (gint) sec / 60 * 60,
+ (gint) sec / 60, (gint) sec % 60);
+
+ if (t2->frames > 0.0) {
+ g_ascii_dtostr (dstrbuf, G_ASCII_DTOSTR_BUF_SIZE, t2->frames);
+ g_string_append (string, dstrbuf);
+ }
+ break;
+ }
+ case GST_RTSP_TIME_UTC:
+ {
+ gint64 sec = t1->seconds;
+
+ g_ascii_dtostr (dstrbuf, G_ASCII_DTOSTR_BUF_SIZE, t1->seconds - sec);
+ g_string_append_printf (string, "%04d%02d%02dT%02d%02d%02d%sZ",
+ t2->year, t2->month, t2->day, (gint) sec / 60 * 60,
+ (gint) sec / 60, (gint) sec % 60, dstrbuf);
+ break;
+ }
default:
res = FALSE;
break;
}
static gboolean
-npt_range_string (const GstRTSPTimeRange * range, GString * string)
+range_to_string (const GstRTSPTimeRange * range, GString * string)
{
gboolean res;
- if (!(res = npt_time_string (&range->min, string)))
+ if (!(res = time_to_string (&range->min, &range->min2, string)))
goto done;
g_string_append (string, "-");
- if (!(res = npt_time_string (&range->max, string)))
+ if (!(res = time_to_string (&range->max, &range->max2, string)))
goto done;
done:
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;
- }
+ string = g_string_new ("npt=");
break;
case GST_RTSP_RANGE_SMPTE:
case GST_RTSP_RANGE_SMPTE_30_DROP:
+ string = g_string_new ("smpte=");
+ break;
case GST_RTSP_RANGE_SMPTE_25:
+ string = g_string_new ("smpte-25=");
+ break;
case GST_RTSP_RANGE_CLOCK:
- default:
- g_warning ("time range unit not yet implemented");
- g_string_free (string, TRUE);
- string = NULL;
+ string = g_string_new ("clock=");
break;
+ default:
+ goto not_implemented;
}
- if (string)
- result = g_string_free (string, FALSE);
- return result;
+ if (!range_to_string (range, string))
+ goto format_failed;
+
+ return g_string_free (string, FALSE);
+
+ /* ERRORS */
+not_implemented:
+ {
+ g_warning ("time range unit not yet implemented");
+ return NULL;
+ }
+format_failed:
+ {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
}
/**
{
GstRTSPTimeRange *range;
GstClockTime min, max;
+ gchar *str;
fail_unless (gst_rtsp_range_parse ("npt=", &range) == GST_RTSP_EINVAL);
fail_unless (gst_rtsp_range_parse ("npt=0", &range) == GST_RTSP_EINVAL);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == GST_CLOCK_TIME_NONE);
fail_unless (max == GST_CLOCK_TIME_NONE);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=now-now", &range) == GST_RTSP_OK);
fail_unless (range->unit == GST_RTSP_RANGE_NPT);
fail_unless (range->min.type == GST_RTSP_TIME_NOW);
fail_unless (range->max.type == GST_RTSP_TIME_NOW);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=now-", &range) == GST_RTSP_OK);
fail_unless (range->unit == GST_RTSP_RANGE_NPT);
fail_unless (range->min.type == GST_RTSP_TIME_NOW);
fail_unless (range->max.type == GST_RTSP_TIME_END);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=now-34.12", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == GST_CLOCK_TIME_NONE);
fail_unless (max == 34120000000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=23,89-now", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 23890000000);
fail_unless (max == GST_CLOCK_TIME_NONE);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=-12.09", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == GST_CLOCK_TIME_NONE);
fail_unless (max == 12090000000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=0-", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 0);
fail_unless (max == GST_CLOCK_TIME_NONE);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 1123000000);
fail_unless (max == GST_CLOCK_TIME_NONE);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=10,20-20.10", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 10200000000);
fail_unless (max == 20100000000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=500-15.001", &range) == GST_RTSP_OK);
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 500000000000);
fail_unless (max == 15001000000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("npt=20:34.23-",
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 72754230000000);
fail_unless (max == 78300010000000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
}
{
GstClockTime min, max;
GstRTSPTimeRange *range;
+ gchar *str;
fail_unless (gst_rtsp_range_parse ("smpte=", &range) == GST_RTSP_EINVAL);
fail_unless (gst_rtsp_range_parse ("smpte=10:34:23",
fail_unless (gst_rtsp_range_get_times (range, &min, &max));
fail_unless (min == 0);
fail_unless (max == GST_CLOCK_TIME_NONE);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("smpte=10:34:23-20:12:09:20.89",
fail_unless (min == 38063000000000);
/* 20.89 * GST_SECOND * 1001 / 30003 */
fail_unless (max == 72729000000000 + 696959970);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse ("smpte-25=10:34:23-20:12:09:20.89",
GST_DEBUG ("%" GST_TIME_FORMAT, GST_TIME_ARGS (max));
/* 20.89 * GST_SECOND * 1 / 25 */
fail_unless (max == 72729000000000 + 835600000);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
}
GST_START_TEST (test_rtsp_range_clock)
{
GstRTSPTimeRange *range;
+ gchar *str;
fail_unless (gst_rtsp_range_parse ("clock=", &range) == GST_RTSP_EINVAL);
fail_unless (gst_rtsp_range_parse ("clock=20001010T120023Z",
fail_unless (range->min2.day == 10);
fail_unless (range->min.seconds == 44625.0);
fail_unless (range->max.type == GST_RTSP_TIME_END);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
fail_unless (gst_rtsp_range_parse
fail_unless (range->max2.month == 12);
fail_unless (range->max2.day == 30);
fail_unless (range->max.seconds == 72729.89);
+ str = gst_rtsp_range_to_string (range);
+ GST_DEBUG ("%s", str);
+ g_free (str);
gst_rtsp_range_free (range);
}