aboutsummaryrefslogtreecommitdiff
path: root/libs/gst
diff options
context:
space:
mode:
Diffstat (limited to 'libs/gst')
-rw-r--r--libs/gst/Makefile.in2
-rw-r--r--libs/gst/base/Makefile.in2
-rw-r--r--libs/gst/base/gstadapter.c93
-rw-r--r--libs/gst/base/gstadapter.h1
-rw-r--r--libs/gst/base/gstbaseparse.c51
-rw-r--r--libs/gst/base/gstbasesink.c31
-rw-r--r--libs/gst/base/gstbasesrc.c42
-rw-r--r--libs/gst/check/Makefile.in2
-rw-r--r--libs/gst/check/libcheck/Makefile.in2
-rw-r--r--libs/gst/check/libcheck/check_print.c40
-rw-r--r--libs/gst/controller/Makefile.in2
-rw-r--r--libs/gst/helpers/Makefile.in2
-rw-r--r--libs/gst/net/Makefile.in2
-rw-r--r--libs/gst/net/gstnettimeprovider.c4
14 files changed, 237 insertions, 39 deletions
diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in
index 20ca40a..ebf67c0 100644
--- a/libs/gst/Makefile.in
+++ b/libs/gst/Makefile.in
@@ -315,6 +315,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -325,7 +326,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in
index 9675a87..02e20ba 100644
--- a/libs/gst/base/Makefile.in
+++ b/libs/gst/base/Makefile.in
@@ -362,6 +362,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -372,7 +373,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index 935fa20..4c3e730 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -709,15 +709,102 @@ gst_adapter_take (GstAdapter * adapter, gsize nbytes)
}
/**
+ * gst_adapter_take_buffer_fast:
+ * @adapter: a #GstAdapter
+ * @nbytes: the number of bytes to take
+ *
+ * Returns a #GstBuffer containing the first @nbytes of the @adapter.
+ * The returned bytes will be flushed from the adapter. This function
+ * is potentially more performant than gst_adapter_take_buffer() since
+ * it can reuse the memory in pushed buffers by subbuffering or
+ * merging. Unlike gst_adapter_take_buffer(), the returned buffer may
+ * be composed of multiple non-contiguous #GstMemory objects, no
+ * copies are made.
+ *
+ * Note that no assumptions should be made as to whether certain buffer
+ * flags such as the DISCONT flag are set on the returned buffer, or not.
+ * The caller needs to explicitly set or unset flags that should be set or
+ * unset.
+ *
+ * This function can return buffer up to the return value of
+ * gst_adapter_available() without making copies if possible.
+ *
+ * Caller owns a reference to the returned buffer. gst_buffer_unref() after
+ * usage.
+ *
+ * Free-function: gst_buffer_unref
+ *
+ * Returns: (transfer full): a #GstBuffer containing the first @nbytes of
+ * the adapter, or #NULL if @nbytes bytes are not available.
+ * gst_buffer_unref() when no longer needed.
+ *
+ * Since: 1.2
+ */
+
+GstBuffer *
+gst_adapter_take_buffer_fast (GstAdapter * adapter, gsize nbytes)
+{
+ GstBuffer *buffer = NULL;
+ GstBuffer *cur;
+ GSList *item;
+ gsize skip;
+ gsize left = nbytes;
+
+ g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
+ g_return_val_if_fail (nbytes > 0, NULL);
+
+ GST_LOG_OBJECT (adapter, "taking buffer of %" G_GSIZE_FORMAT " bytes",
+ nbytes);
+
+ /* we don't have enough data, return NULL. This is unlikely
+ * as one usually does an _available() first instead of grabbing a
+ * random size. */
+ if (G_UNLIKELY (nbytes > adapter->size))
+ return NULL;
+
+ skip = adapter->skip;
+ cur = adapter->buflist->data;
+
+ if (skip == 0 && gst_buffer_get_size (cur) == nbytes) {
+ GST_LOG_OBJECT (adapter, "providing buffer of %" G_GSIZE_FORMAT " bytes"
+ " as head buffer", nbytes);
+ buffer = gst_buffer_ref (cur);
+ goto done;
+ }
+
+ for (item = adapter->buflist; item && left > 0; item = item->next) {
+ gsize size;
+
+ cur = item->data;
+ size = MIN (gst_buffer_get_size (cur) - skip, left);
+
+ GST_LOG_OBJECT (adapter, "appending %" G_GSIZE_FORMAT " bytes"
+ " via region copy", size);
+ if (buffer)
+ gst_buffer_copy_into (buffer, cur, GST_BUFFER_COPY_MEMORY, skip, size);
+ else
+ buffer = gst_buffer_copy_region (cur, GST_BUFFER_COPY_ALL, skip, size);
+ skip = 0;
+ left -= size;
+ }
+
+done:
+ gst_adapter_flush_unchecked (adapter, nbytes);
+
+ return buffer;
+}
+
+/**
* gst_adapter_take_buffer:
* @adapter: a #GstAdapter
* @nbytes: the number of bytes to take
*
* Returns a #GstBuffer containing the first @nbytes bytes of the
* @adapter. The returned bytes will be flushed from the adapter.
- * This function is potentially more performant than gst_adapter_take()
- * since it can reuse the memory in pushed buffers by subbuffering
- * or merging.
+ * This function is potentially more performant than
+ * gst_adapter_take() since it can reuse the memory in pushed buffers
+ * by subbuffering or merging. This function will always return a
+ * buffer with a single memory region.
*
* Note that no assumptions should be made as to whether certain buffer
* flags such as the DISCONT flag are set on the returned buffer, or not.
diff --git a/libs/gst/base/gstadapter.h b/libs/gst/base/gstadapter.h
index 9625a01..9683f3b 100644
--- a/libs/gst/base/gstadapter.h
+++ b/libs/gst/base/gstadapter.h
@@ -60,6 +60,7 @@ void gst_adapter_flush (GstAdapter *adapter, gs
gpointer gst_adapter_take (GstAdapter *adapter, gsize nbytes);
GstBuffer* gst_adapter_take_buffer (GstAdapter *adapter, gsize nbytes);
GList* gst_adapter_take_list (GstAdapter *adapter, gsize nbytes);
+GstBuffer * gst_adapter_take_buffer_fast (GstAdapter *adapter, gsize nbytes);
gsize gst_adapter_available (GstAdapter *adapter);
gsize gst_adapter_available_fast (GstAdapter *adapter);
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index 5152d03..a57fdc9 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -934,6 +934,7 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
const GstSegment *in_segment;
GstSegment out_segment;
gint64 offset = 0, next_dts;
+ guint32 seqnum = gst_event_get_seqnum (event);
gst_event_parse_segment (event, &in_segment);
gst_segment_init (&out_segment, GST_FORMAT_TIME);
@@ -989,6 +990,7 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
gst_event_unref (event);
event = gst_event_new_segment (&out_segment);
+ gst_event_set_seqnum (event, seqnum);
GST_DEBUG_OBJECT (parse, "Converted incoming segment to TIME. %"
GST_SEGMENT_FORMAT, in_segment);
@@ -1003,6 +1005,7 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
out_segment.time = 0;
event = gst_event_new_segment (&out_segment);
+ gst_event_set_seqnum (event, seqnum);
next_dts = 0;
} else {
@@ -3019,13 +3022,17 @@ gst_base_parse_loop (GstPad * pad)
if (G_UNLIKELY (parse->priv->push_stream_start)) {
gchar *stream_id;
+ GstEvent *event;
stream_id =
gst_pad_create_stream_id (parse->srcpad, GST_ELEMENT_CAST (parse),
NULL);
+ event = gst_event_new_stream_start (stream_id);
+ gst_event_set_group_id (event, gst_util_group_id_next ());
+
GST_DEBUG_OBJECT (parse, "Pushing STREAM_START");
- gst_pad_push_event (parse->srcpad, gst_event_new_stream_start (stream_id));
+ gst_pad_push_event (parse->srcpad, event);
parse->priv->push_stream_start = FALSE;
g_free (stream_id);
}
@@ -3674,6 +3681,25 @@ gst_base_parse_src_query_default (GstBaseParse * parse, GstQuery * query)
}
break;
}
+ case GST_QUERY_SEGMENT:
+ {
+ GstFormat format;
+ gint64 start, stop;
+
+ format = parse->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&parse->segment, format,
+ parse->segment.start);
+ if ((stop = parse->segment.stop) == -1)
+ stop = parse->segment.duration;
+ else
+ stop = gst_segment_to_stream_time (&parse->segment, format, stop);
+
+ gst_query_set_segment (query, parse->segment.rate, format, start, stop);
+ res = TRUE;
+ break;
+ }
default:
res = gst_pad_query_default (pad, GST_OBJECT_CAST (parse), query);
break;
@@ -3955,6 +3981,8 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
gint64 start, stop, seekpos, seekstop;
GstSegment seeksegment = { 0, };
GstClockTime start_ts;
+ guint32 seqnum;
+ GstEvent *segment_event;
/* try upstream first, unless we're driving the streaming thread ourselves */
if (parse->priv->pad_mode != GST_PAD_MODE_PULL) {
@@ -3965,6 +3993,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
gst_event_parse_seek (event, &rate, &format, &flags,
&start_type, &start, &stop_type, &stop);
+ seqnum = gst_event_get_seqnum (event);
GST_DEBUG_OBJECT (parse, "seek to format %s, rate %f, "
"start type %d at %" GST_TIME_FORMAT ", end type %d at %"
@@ -4055,10 +4084,14 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
if (flush) {
if (parse->srcpad) {
+ GstEvent *fevent = gst_event_new_flush_start ();
GST_DEBUG_OBJECT (parse, "sending flush start");
- gst_pad_push_event (parse->srcpad, gst_event_new_flush_start ());
+
+ gst_event_set_seqnum (fevent, seqnum);
+
+ gst_pad_push_event (parse->srcpad, gst_event_ref (fevent));
/* unlock upstream pull_range */
- gst_pad_push_event (parse->sinkpad, gst_event_new_flush_start ());
+ gst_pad_push_event (parse->sinkpad, fevent);
}
} else {
gst_pad_pause_task (parse->sinkpad);
@@ -4077,9 +4110,11 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
/* prepare for streaming again */
if (flush) {
+ GstEvent *fevent = gst_event_new_flush_stop (TRUE);
GST_DEBUG_OBJECT (parse, "sending flush stop");
- gst_pad_push_event (parse->srcpad, gst_event_new_flush_stop (TRUE));
- gst_pad_push_event (parse->sinkpad, gst_event_new_flush_stop (TRUE));
+ gst_event_set_seqnum (fevent, seqnum);
+ gst_pad_push_event (parse->srcpad, gst_event_ref (fevent));
+ gst_pad_push_event (parse->sinkpad, fevent);
gst_base_parse_clear_queues (parse);
} else {
/* keep track of our position */
@@ -4092,9 +4127,10 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
/* store the newsegment event so it can be sent from the streaming thread. */
/* This will be sent later in _loop() */
parse->priv->pending_segment = TRUE;
+ segment_event = gst_event_new_segment (&parse->segment);
+ gst_event_set_seqnum (segment_event, seqnum);
parse->priv->pending_events =
- g_list_prepend (parse->priv->pending_events,
- gst_event_new_segment (&parse->segment));
+ g_list_prepend (parse->priv->pending_events, segment_event);
GST_DEBUG_OBJECT (parse, "Created newseg format %d, "
"start = %" GST_TIME_FORMAT ", stop = %" GST_TIME_FORMAT
@@ -4158,6 +4194,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
seekstop = seekpos;
new_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
GST_SEEK_TYPE_SET, seekpos, stop_type, seekstop);
+ gst_event_set_seqnum (new_event, seqnum);
/* store segment info so its precise details can be reconstructed when
* receiving newsegment;
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index 9e97550..64c0b77 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -3008,11 +3008,19 @@ gst_base_sink_default_event (GstBaseSink * basesink, GstEvent * event)
{
GstMessage *message;
guint32 seqnum;
+ guint group_id;
seqnum = gst_event_get_seqnum (event);
GST_DEBUG_OBJECT (basesink, "Now posting STREAM_START (seqnum:%d)",
seqnum);
message = gst_message_new_stream_start (GST_OBJECT_CAST (basesink));
+ if (gst_event_parse_group_id (event, &group_id)) {
+ gst_message_set_group_id (message, group_id);
+ } else {
+ GST_FIXME_OBJECT (basesink, "stream-start event without group-id. "
+ "Consider implementing group-id handling in the upstream "
+ "elements");
+ }
gst_message_set_seqnum (message, seqnum);
gst_element_post_message (GST_ELEMENT_CAST (basesink), message);
break;
@@ -3290,11 +3298,13 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
}
if (bclass->prepare || bclass->prepare_list) {
- gboolean late = FALSE;
- gboolean do_sync = TRUE, stepped = FALSE, step_end = FALSE, syncable = TRUE;
+ gboolean do_sync = TRUE, stepped = FALSE, syncable = TRUE;
GstClockTime sstart, sstop, rstart, rstop, rnext;
GstStepInfo *current;
+ late = FALSE;
+ step_end = FALSE;
+
current = &priv->current_step;
syncable =
gst_base_sink_get_sync_times (basesink, obj, &sstart, &sstop, &rstart,
@@ -4704,8 +4714,21 @@ default_element_query (GstElement * element, GstQuery * query)
case GST_QUERY_SEGMENT:
{
if (basesink->pad_mode == GST_PAD_MODE_PULL) {
- gst_query_set_segment (query, basesink->segment.rate,
- GST_FORMAT_TIME, basesink->segment.start, basesink->segment.stop);
+ GstFormat format;
+ gint64 start, stop;
+
+ format = basesink->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&basesink->segment, format,
+ basesink->segment.start);
+ if ((stop = basesink->segment.stop) == -1)
+ stop = basesink->segment.duration;
+ else
+ stop = gst_segment_to_stream_time (&basesink->segment, format, stop);
+
+ gst_query_set_segment (query, basesink->segment.rate, format, start,
+ stop);
res = TRUE;
} else {
res = gst_pad_peer_query (basesink->sinkpad, query);
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index a692b6f..4f05845 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -840,14 +840,16 @@ gst_base_src_send_stream_start (GstBaseSrc * src)
if (src->priv->stream_start_pending) {
gchar *stream_id;
+ GstEvent *event;
stream_id =
gst_pad_create_stream_id (src->srcpad, GST_ELEMENT_CAST (src), NULL);
GST_DEBUG_OBJECT (src, "Pushing STREAM_START");
- ret =
- gst_pad_push_event (src->srcpad,
- gst_event_new_stream_start (stream_id));
+ event = gst_event_new_stream_start (stream_id);
+ gst_event_set_group_id (event, gst_util_group_id_next ());
+
+ ret = gst_pad_push_event (src->srcpad, event);
src->priv->stream_start_pending = FALSE;
g_free (stream_id);
}
@@ -1076,23 +1078,23 @@ gst_base_src_default_query (GstBaseSrc * src, GstQuery * query)
}
case GST_QUERY_SEGMENT:
{
+ GstFormat format;
gint64 start, stop;
GST_OBJECT_LOCK (src);
- /* no end segment configured, current duration then */
+
+ format = src->segment.format;
+
+ start =
+ gst_segment_to_stream_time (&src->segment, format,
+ src->segment.start);
if ((stop = src->segment.stop) == -1)
stop = src->segment.duration;
- start = src->segment.start;
+ else
+ stop = gst_segment_to_stream_time (&src->segment, format, stop);
- /* adjust to stream time */
- if (src->segment.time != -1) {
- start -= src->segment.time;
- if (stop != -1)
- stop -= src->segment.time;
- }
+ gst_query_set_segment (query, src->segment.rate, format, start, stop);
- gst_query_set_segment (query, src->segment.rate, src->segment.format,
- start, stop);
GST_OBJECT_UNLOCK (src);
res = TRUE;
break;
@@ -2573,8 +2575,20 @@ gst_base_src_loop (GstPad * pad)
src = GST_BASE_SRC (GST_OBJECT_PARENT (pad));
+ /* Just leave immediately if we're flushing */
+ GST_LIVE_LOCK (src);
+ if (G_UNLIKELY (src->priv->flushing || GST_PAD_IS_FLUSHING (pad)))
+ goto flushing;
+ GST_LIVE_UNLOCK (src);
+
gst_base_src_send_stream_start (src);
+ /* The stream-start event could've caused something to flush us */
+ GST_LIVE_LOCK (src);
+ if (G_UNLIKELY (src->priv->flushing || GST_PAD_IS_FLUSHING (pad)))
+ goto flushing;
+ GST_LIVE_UNLOCK (src);
+
/* check if we need to renegotiate */
if (gst_pad_check_reconfigure (pad)) {
if (!gst_base_src_negotiate (src)) {
@@ -2588,7 +2602,7 @@ gst_base_src_loop (GstPad * pad)
GST_LIVE_LOCK (src);
- if (G_UNLIKELY (src->priv->flushing))
+ if (G_UNLIKELY (src->priv->flushing || GST_PAD_IS_FLUSHING (pad)))
goto flushing;
blocksize = src->blocksize;
diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in
index 07201ac..444a04c 100644
--- a/libs/gst/check/Makefile.in
+++ b/libs/gst/check/Makefile.in
@@ -395,6 +395,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -405,7 +406,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in
index cb3bccc..17a95df 100644
--- a/libs/gst/check/libcheck/Makefile.in
+++ b/libs/gst/check/libcheck/Makefile.in
@@ -324,6 +324,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -334,7 +335,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/check/libcheck/check_print.c b/libs/gst/check/libcheck/check_print.c
index f170d60..e29aa7b 100644
--- a/libs/gst/check/libcheck/check_print.c
+++ b/libs/gst/check/libcheck/check_print.c
@@ -106,6 +106,38 @@ tr_fprint (FILE * file, TestResult * tr, enum print_output print_mode)
}
}
+static void
+fprint_xml_esc (FILE * file, const char *str)
+{
+ for (; *str != '\0'; str++) {
+
+ switch (*str) {
+
+ /* handle special characters that must be escaped */
+ case '"':
+ fputs (""", file);
+ break;
+ case '\'':
+ fputs ("'", file);
+ break;
+ case '<':
+ fputs ("&lt;", file);
+ break;
+ case '>':
+ fputs ("&gt;", file);
+ break;
+ case '&':
+ fputs ("&amp;", file);
+ break;
+
+ /* regular characters, print as is */
+ default:
+ fputc (*str, file);
+ break;
+ }
+ }
+}
+
void
tr_xmlprint (FILE * file, TestResult * tr,
enum print_output print_mode CK_ATTRIBUTE_UNUSED)
@@ -147,8 +179,12 @@ tr_xmlprint (FILE * file, TestResult * tr,
fprintf (file, " <fn>%s:%d</fn>\n", file_name, tr->line);
fprintf (file, " <id>%s</id>\n", tr->tname);
fprintf (file, " <iteration>%d</iteration>\n", tr->iter);
- fprintf (file, " <description>%s</description>\n", tr->tcname);
- fprintf (file, " <message>%s</message>\n", tr->msg);
+ fprintf (file, " <description>");
+ fprint_xml_esc (file, tr->tcname);
+ fprintf (file, "</description>\n");
+ fprintf (file, " <message>");
+ fprint_xml_esc (file, tr->msg);
+ fprintf (file, "</message>\n");
fprintf (file, " </test>\n");
if (slash != NULL) {
diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in
index 72dae4a..5d28280 100644
--- a/libs/gst/controller/Makefile.in
+++ b/libs/gst/controller/Makefile.in
@@ -337,6 +337,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -347,7 +348,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in
index f55da45..473a4ac 100644
--- a/libs/gst/helpers/Makefile.in
+++ b/libs/gst/helpers/Makefile.in
@@ -314,6 +314,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -324,7 +325,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in
index 7083f0d..3cb8c26 100644
--- a/libs/gst/net/Makefile.in
+++ b/libs/gst/net/Makefile.in
@@ -335,6 +335,7 @@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
@@ -345,7 +346,6 @@ HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
-HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
diff --git a/libs/gst/net/gstnettimeprovider.c b/libs/gst/net/gstnettimeprovider.c
index a31171d..202b6c7 100644
--- a/libs/gst/net/gstnettimeprovider.c
+++ b/libs/gst/net/gstnettimeprovider.c
@@ -394,8 +394,8 @@ gst_net_time_provider_stop (GstNetTimeProvider * self)
/**
* gst_net_time_provider_new:
* @clock: a #GstClock to export over the network
- * @address: an address to bind on as a dotted quad (xxx.xxx.xxx.xxx), IPv6 address, or NULL
- * to bind to all addresses
+ * @address: (allow-none): an address to bind on as a dotted quad
+ * (xxx.xxx.xxx.xxx), IPv6 address, or NULL to bind to all addresses
* @port: a port to bind on, or 0 to let the kernel choose
*
* Allows network clients to get the current time of @clock.