diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/base/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/base/gstadapter.c | 93 | ||||
-rw-r--r-- | libs/gst/base/gstadapter.h | 1 | ||||
-rw-r--r-- | libs/gst/base/gstbaseparse.c | 51 | ||||
-rw-r--r-- | libs/gst/base/gstbasesink.c | 31 | ||||
-rw-r--r-- | libs/gst/base/gstbasesrc.c | 42 | ||||
-rw-r--r-- | libs/gst/check/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/check/libcheck/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/check/libcheck/check_print.c | 40 | ||||
-rw-r--r-- | libs/gst/controller/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/helpers/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/net/Makefile.in | 2 | ||||
-rw-r--r-- | libs/gst/net/gstnettimeprovider.c | 4 |
15 files changed, 238 insertions, 40 deletions
diff --git a/libs/Makefile.in b/libs/Makefile.in index bd7a5c8..a39f876 100644 --- a/libs/Makefile.in +++ b/libs/Makefile.in @@ -316,6 +316,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@ @@ -326,7 +327,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/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 ("<", file); + break; + case '>': + fputs (">", file); + break; + case '&': + fputs ("&", 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. |