From 7bc241beb0b6dd22f0b6e722174779221ceec5de Mon Sep 17 00:00:00 2001 From: Edgard Lima Date: Thu, 13 Dec 2007 17:19:54 +0000 Subject: Code documentation. Original commit message from CVS: Code documentation. --- ext/metadata/gstmetadataparse.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'ext/metadata/gstmetadataparse.c') diff --git a/ext/metadata/gstmetadataparse.c b/ext/metadata/gstmetadataparse.c index a8ded250..d95a9399 100644 --- a/ext/metadata/gstmetadataparse.c +++ b/ext/metadata/gstmetadataparse.c @@ -932,10 +932,11 @@ gst_metadata_parse_calculate_offsets (GstMetadataParse * filter) } /* + * Do parsing step-by-step and reconfigure caps if need * return: - * -1 -> error - * 0 -> succeded - * 1 -> need more data + * META_PARSING_ERROR + * META_PARSING_DONE + * META_PARSING_NEED_MORE_DATA */ static int @@ -943,7 +944,7 @@ gst_metadata_parse_parse (GstMetadataParse * filter, const guint8 * buf, guint32 size) { - int ret = -1; + int ret = META_PARSING_ERROR; filter->next_offset = 0; filter->next_size = 0; @@ -951,14 +952,14 @@ gst_metadata_parse_parse (GstMetadataParse * filter, const guint8 * buf, ret = metadata_parse (&filter->parse_data, buf, size, &filter->next_offset, &filter->next_size); - if (ret < 0) { + if (ret == META_PARSING_ERROR) { if (META_DATA_IMG_TYPE (filter->parse_data) == IMG_NONE) { /* image type not recognized */ GST_ELEMENT_ERROR (filter, STREAM, TYPE_NOT_FOUND, (NULL), ("Only jpeg and png are supported")); goto done; } - } else if (ret > 0) { + } else if (ret == META_PARSING_NEED_MORE_DATA) { filter->need_more_data = TRUE; } else { gst_metadata_parse_calculate_offsets (filter); @@ -968,13 +969,14 @@ gst_metadata_parse_parse (GstMetadataParse * filter, const guint8 * buf, filter->need_send_tag = TRUE; } + /* reconfigure caps if it is different from type detected by 'metadata_parse' function */ if (filter->img_type != META_DATA_IMG_TYPE (filter->parse_data)) { filter->img_type = META_DATA_IMG_TYPE (filter->parse_data); if (!gst_metadata_parse_configure_caps (filter)) { GST_ELEMENT_ERROR (filter, STREAM, FORMAT, (NULL), ("Couldn't reconfigure caps for %s", gst_metadata_parse_get_type_name (filter->img_type))); - ret = -1; + ret = META_PARSING_ERROR; goto done; } } @@ -1047,8 +1049,11 @@ gst_metadata_parse_chain (GstPad * pad, GstBuffer * buf) const guint8 *new_buf = gst_adapter_peek (filter->adapter_parsing, adpt_size); - if (gst_metadata_parse_parse (filter, new_buf, adpt_size) < 0) + if (gst_metadata_parse_parse (filter, new_buf, + adpt_size) == META_PARSING_ERROR) { + ret = GST_FLOW_ERROR; goto done; + } } } @@ -1151,8 +1156,13 @@ gst_metadata_parse_pull_range_parse (GstMetadataParse * filter) offset += filter->next_offset; + /* 'filter->next_size' only says the minimum required number of bytes. + We try provided more bytes (4096) just to avoid a lot of calls to 'metadata_parse' + returning META_PARSING_NEED_MORE_DATA */ if (filter->next_size < 4096) { if (duration - offset < 4096) { + /* In case there is no 4096 bytes available upstream. + It should be done upstream but we do here for safety */ filter->next_size = duration - offset; } else { filter->next_size = 4096; @@ -1169,14 +1179,14 @@ gst_metadata_parse_pull_range_parse (GstMetadataParse * filter) res = gst_metadata_parse_parse (filter, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); - if (res < 0) { + if (res == META_PARSING_ERROR) { ret = FALSE; goto done; } gst_buffer_unref (buf); - } while (res > 0); + } while (res == META_PARSING_NEED_MORE_DATA); done: -- cgit v1.2.1