mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 04:36:20 +00:00
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:
parent
6836fdea83
commit
fb4dbf8ae5
5 changed files with 62 additions and 22 deletions
15
ChangeLog
15
ChangeLog
|
@ -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
7
ext/metadata/.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.la
|
||||||
|
.deps
|
||||||
|
.libs
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue