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> 2007-10-30 Edgard Lima <edgard.lima@indt.org.br>
* configure.ac: * 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", static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK, GST_PAD_SINK,
GST_PAD_ALWAYS, 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", static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC, GST_PAD_SRC,
GST_PAD_ALWAYS, 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, GST_BOILERPLATE (GstMetadataParse, gst_metadata_parse, GstElement,
@ -155,7 +159,7 @@ gst_metadata_parse_base_init (gpointer gclass)
{ {
static GstElementDetails element_details = { static GstElementDetails element_details = {
"Metadata parser", "Metadata parser",
"Image/Extracter/Metadata", "Parser/Extracter/Metadata",
"Send metadata tags (EXIF, IPTC and XMP) while passing throught the contents", "Send metadata tags (EXIF, IPTC and XMP) while passing throught the contents",
"Edgard Lima <edgard.lima@indt.org.br>" "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_DEBUG_FUNCPTR (gst_metadata_parse_get_caps));
gst_pad_set_event_function (filter->srcpad, gst_metadata_parse_src_event); gst_pad_set_event_function (filter->srcpad, gst_metadata_parse_src_event);
gst_pad_use_fixed_caps (filter->srcpad); 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); gst_pad_set_getrange_function (filter->srcpad, gst_metadata_parse_get_range);
#endif
/* addind pads */ /* addind pads */
gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); 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) { for (i = 0; i < caps_size; ++i) {
GstStructure *structure = NULL; GstStructure *structure = NULL;
GstStructure *structure_new = NULL; GstStructure *structure_new = NULL;
GString *mime = NULL; const gchar *mime = NULL;
structure = gst_caps_get_structure (caps_otherpad_peer, i); structure = gst_caps_get_structure (caps_otherpad_peer, i);
mime = g_string_new (gst_structure_get_name (structure)); mime = gst_structure_get_name (structure);
if (otherpad == filter->sinkpad) {
g_string_append (mime, "-metadata"); if (pad == filter->sinkpad) {
structure_new =
gst_structure_new (mime, "tags-extracted", G_TYPE_BOOLEAN, FALSE,
NULL);
} else { } else {
/* strip ou "-metadata" */ structure_new =
mime->str[mime->len - 9] = '\0'; 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); 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) { switch (filter->img_type) {
case IMG_JPEG: case IMG_JPEG:
mime = "image/jpeg-metadata"; mime = "image/jpeg";
break; break;
case IMG_PNG: case IMG_PNG:
mime = "image/png-metadata"; mime = "image/png";
break; break;
default: default:
ret = FALSE;
goto done; goto done;
break; 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); ret = gst_pad_set_caps (filter->srcpad, caps);
@ -573,6 +580,7 @@ gst_metadata_parse_set_caps (GstPad * pad, GstCaps * caps)
GstStructure *structure = NULL; GstStructure *structure = NULL;
const gchar *mime = NULL; const gchar *mime = NULL;
gboolean ret = FALSE; gboolean ret = FALSE;
gboolean parsed = TRUE;
filter = GST_METADATA_PARSE (gst_pad_get_parent (pad)); 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) { } else if (strcmp (mime, "image/png") == 0) {
filter->img_type = IMG_PNG; filter->img_type = IMG_PNG;
} else { } else {
ret = FALSE;
goto done; 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); ret = gst_metadata_parse_configure_srccaps (filter);
done: done:
@ -823,7 +839,7 @@ done:
if (!gst_pad_is_active (filter->sinkpad)) { if (!gst_pad_is_active (filter->sinkpad)) {
ret = gst_pad_activate_push (filter->srcpad, TRUE); 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); } while (FALSE);
@ -910,5 +926,5 @@ gst_metadata_parse_plugin_init (GstPlugin * plugin)
return gst_element_register (plugin, "metadataparse", 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); (guint8 *) buf, &bufsize, &next_start, next_size);
break; break;
case IMG_PNG: case IMG_PNG:
ret = 0;
break; break;
default: default:
/* unexpected */ /* unexpected */
@ -115,6 +116,10 @@ metadataparse_parse (ParseData * parse_data, const guint8 * buf,
done: done:
if (ret == 0) {
parse_data->state = STATE_DONE;
}
return ret; return ret;
} }

View file

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