summaryrefslogtreecommitdiffstats
path: root/ext/annodex/gstcmmldec.c
diff options
context:
space:
mode:
authorJulien Moutte <julien@moutte.net>2006-02-25 19:07:41 +0000
committerJulien Moutte <julien@moutte.net>2006-02-25 19:07:41 +0000
commit675a5afed05aa4a67f8eb1ac7ee4b6db96923a7e (patch)
tree07c36573a2f154805b4b1ec11c2d8d5387a0427f /ext/annodex/gstcmmldec.c
parent36e55fc8582b7c256ddf606ff096eafd10c237ab (diff)
Fix a memleak in gst_cmml_track_list_add_clip.
Original commit message from CVS: 2006-02-25 Alessandro Decina <alessandro@nnva.org> * ext/annodex/Makefile.am: * ext/annodex/gstannodex.c: * ext/annodex/gstcmmldec.c: * ext/annodex/gstcmmlenc.c: * ext/annodex/gstcmmlparser.c: * ext/annodex/gstcmmlparser.h: * ext/annodex/gstcmmlutils.c: * tests/check/elements/cmmldec.c: * tests/check/elements/cmmlenc.c: Fix a memleak in gst_cmml_track_list_add_clip. Handle overflows in clip's start and end times. Add the "encoded" parameter to cmmldec and cmmlenc caps. Do not parse junk at the end of a CMML preamble buffer. Register a libxml error handler to not print stuff on stderr. Check for bad clip start and end times in the testsuites.
Diffstat (limited to 'ext/annodex/gstcmmldec.c')
-rw-r--r--ext/annodex/gstcmmldec.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/ext/annodex/gstcmmldec.c b/ext/annodex/gstcmmldec.c
index 54ea2134..a2bb67b3 100644
--- a/ext/annodex/gstcmmldec.c
+++ b/ext/annodex/gstcmmldec.c
@@ -79,14 +79,14 @@ static GstStaticPadTemplate gst_cmml_dec_src_factory =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/xml")
+ GST_STATIC_CAPS ("text/x-cmml, encoded = (boolean) false")
);
static GstStaticPadTemplate gst_cmml_dec_sink_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/x-cmml")
+ GST_STATIC_CAPS ("text/x-cmml, encoded = (boolean) true")
);
/* GstCmmlDec */
@@ -449,6 +449,9 @@ gst_cmml_dec_new_buffer (GstCmmlDec * dec,
if (data)
memcpy (GST_BUFFER_DATA (*buffer), data, size);
GST_BUFFER_TIMESTAMP (*buffer) = dec->timestamp;
+ } else {
+ GST_WARNING_OBJECT (dec, "alloc function returned error %s",
+ gst_flow_get_name (res));
}
return res;
@@ -505,8 +508,11 @@ gst_cmml_dec_parse_first_header (GstCmmlDec * dec, GstBuffer * buffer)
* will be triggered. Otherwise we need to call it manually.
*/
if (!GST_FLOW_IS_FATAL (dec->flow_return) && !dec->sent_root) {
- gst_cmml_dec_parse_preamble (dec, GST_BUFFER_DATA (buffer),
- (guchar *) "<cmml>");
+ guchar *preamble = (guchar *) g_strndup ((gchar *) GST_BUFFER_DATA (buffer),
+ GST_BUFFER_SIZE (buffer));
+
+ gst_cmml_dec_parse_preamble (dec, preamble, (guchar *) "<cmml>");
+ g_free (preamble);
}
}
@@ -536,6 +542,7 @@ gst_cmml_dec_parse_preamble (GstCmmlDec * dec, guchar * preamble,
/* send the root element to the internal parser */
gst_cmml_dec_parse_xml (dec, root_element, strlen ((gchar *) root_element));
+ dec->sent_root = TRUE;
/* push the root element */
dec->flow_return = gst_cmml_dec_new_buffer (dec,
@@ -546,7 +553,6 @@ gst_cmml_dec_parse_preamble (GstCmmlDec * dec, guchar * preamble,
dec->flow_return = gst_pad_push (dec->srcpad, buffer);
if (!GST_FLOW_IS_FATAL (dec->flow_return)) {
GST_INFO_OBJECT (dec, "preamble parsed");
- dec->sent_root = TRUE;
}
done: