Changed kclass to "Parser/Extracter/Metadata", changed caps to "image/jpeg, tags-extract=true/false" and changed prio...

Original commit message from CVS:
Changed kclass to "Parser/Extracter/Metadata", changed caps to "image/jpeg, tags-extract=true/false" and changed priority to GST_RANK_PRIMARY+1. Also, srcpad can only work in push mode until fixed to also work in pull mode.
This commit is contained in:
Edgard Lima 2007-10-30 18:21:22 +00:00
parent 6836fdea83
commit fb4dbf8ae5
5 changed files with 62 additions and 22 deletions

View file

@ -1,3 +1,18 @@
2007-10-30 Edgard Lima <edgard.lima@indt.org.br>
* ext/metadata/.cvsignore:
* ext/metadata/gstmetadataparse.c: (gst_metadata_parse_base_init),
(gst_metadata_parse_init), (gst_metadata_parse_get_caps),
(gst_metadata_parse_configure_srccaps),
(gst_metadata_parse_set_caps), (gst_metadata_parse_activate),
(gst_metadata_parse_plugin_init):
* ext/metadata/metadataparse.c: (metadataparse_parse):
* ext/metadata/metadataparse.h:
Changed kclass to "Parser/Extracter/Metadata", changed caps to
"image/jpeg, tags-extract=true/false" and changed priority to
GST_RANK_PRIMARY+1. Also, srcpad can only work in push mode until
fixed to also work in pull mode.
2007-10-30 Edgard Lima <edgard.lima@indt.org.br>
* configure.ac:

7
ext/metadata/.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
Makefile
Makefile.in
*.o
*.lo
*.la
.deps
.libs

View file

@ -99,13 +99,17 @@ enum
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("image/jpeg;" "image/png")
GST_STATIC_CAPS ("image/jpeg, "
"tags-extracted = (bool) false;"
"image/png, " "tags-extracted = (bool) false")
);
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("image/jpeg-metadata;" "image/png-metadata")
GST_STATIC_CAPS ("image/jpeg, "
"tags-extracted = (bool) true;"
"image/png, " "tags-extracted = (bool) true")
);
GST_BOILERPLATE (GstMetadataParse, gst_metadata_parse, GstElement,
@ -155,7 +159,7 @@ gst_metadata_parse_base_init (gpointer gclass)
{
static GstElementDetails element_details = {
"Metadata parser",
"Image/Extracter/Metadata",
"Parser/Extracter/Metadata",
"Send metadata tags (EXIF, IPTC and XMP) while passing throught the contents",
"Edgard Lima <edgard.lima@indt.org.br>"
};
@ -236,8 +240,9 @@ gst_metadata_parse_init (GstMetadataParse * filter,
GST_DEBUG_FUNCPTR (gst_metadata_parse_get_caps));
gst_pad_set_event_function (filter->srcpad, gst_metadata_parse_src_event);
gst_pad_use_fixed_caps (filter->srcpad);
#if 0 /* FIXME it should also work with it */
gst_pad_set_getrange_function (filter->srcpad, gst_metadata_parse_get_range);
#endif
/* addind pads */
gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
@ -342,24 +347,24 @@ gst_metadata_parse_get_caps (GstPad * pad)
for (i = 0; i < caps_size; ++i) {
GstStructure *structure = NULL;
GstStructure *structure_new = NULL;
GString *mime = NULL;
const gchar *mime = NULL;
structure = gst_caps_get_structure (caps_otherpad_peer, i);
mime = g_string_new (gst_structure_get_name (structure));
if (otherpad == filter->sinkpad) {
g_string_append (mime, "-metadata");
mime = gst_structure_get_name (structure);
if (pad == filter->sinkpad) {
structure_new =
gst_structure_new (mime, "tags-extracted", G_TYPE_BOOLEAN, FALSE,
NULL);
} else {
/* strip ou "-metadata" */
mime->str[mime->len - 9] = '\0';
structure_new =
gst_structure_new (mime, "tags-extracted", G_TYPE_BOOLEAN, TRUE,
NULL);
}
structure_new = gst_structure_empty_new (mime->str);
gst_caps_append_structure (caps_new, structure_new);
g_string_free (mime, TRUE);
}
}
@ -494,17 +499,19 @@ gst_metadata_parse_configure_srccaps (GstMetadataParse * filter)
switch (filter->img_type) {
case IMG_JPEG:
mime = "image/jpeg-metadata";
mime = "image/jpeg";
break;
case IMG_PNG:
mime = "image/png-metadata";
mime = "image/png";
break;
default:
ret = FALSE;
goto done;
break;
}
caps = gst_caps_new_simple (mime, NULL);
caps =
gst_caps_new_simple (mime, "tags-extracted", G_TYPE_BOOLEAN, TRUE, NULL);
ret = gst_pad_set_caps (filter->srcpad, caps);
@ -573,6 +580,7 @@ gst_metadata_parse_set_caps (GstPad * pad, GstCaps * caps)
GstStructure *structure = NULL;
const gchar *mime = NULL;
gboolean ret = FALSE;
gboolean parsed = TRUE;
filter = GST_METADATA_PARSE (gst_pad_get_parent (pad));
@ -585,9 +593,17 @@ gst_metadata_parse_set_caps (GstPad * pad, GstCaps * caps)
} else if (strcmp (mime, "image/png") == 0) {
filter->img_type = IMG_PNG;
} else {
ret = FALSE;
goto done;
}
if (gst_structure_get_boolean (structure, "tags-extracted", &parsed)) {
if (parsed == TRUE) {
ret = FALSE;
goto done;
}
}
ret = gst_metadata_parse_configure_srccaps (filter);
done:
@ -823,7 +839,7 @@ done:
if (!gst_pad_is_active (filter->sinkpad)) {
ret = gst_pad_activate_push (filter->srcpad, TRUE);
ret &= gst_pad_activate_push (filter->sinkpad, TRUE);
ret = ret && gst_pad_activate_push (filter->sinkpad, TRUE);
}
} while (FALSE);
@ -910,5 +926,5 @@ gst_metadata_parse_plugin_init (GstPlugin * plugin)
return gst_element_register (plugin, "metadataparse",
GST_RANK_PRIMARY, GST_TYPE_METADATA_PARSE);
GST_RANK_PRIMARY + 1, GST_TYPE_METADATA_PARSE);
}

View file

@ -103,6 +103,7 @@ metadataparse_parse (ParseData * parse_data, const guint8 * buf,
(guint8 *) buf, &bufsize, &next_start, next_size);
break;
case IMG_PNG:
ret = 0;
break;
default:
/* unexpected */
@ -115,6 +116,10 @@ metadataparse_parse (ParseData * parse_data, const guint8 * buf,
done:
if (ret == 0) {
parse_data->state = STATE_DONE;
}
return ret;
}

View file

@ -60,9 +60,6 @@ typedef enum _tag_ParseOption {
typedef enum _tag_ParseState {
STATE_NULL,
STATE_READING,
STATE_EXIF,
STATE_IPTC,
STATE_XMP,
STATE_DONE
} ParseState;