summaryrefslogtreecommitdiffstats
path: root/ext/metadata/metadatamuxjpeg.c
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2007-12-03 16:14:01 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2007-12-03 16:14:01 +0000
commite415aeeb4f0e0bf7a622328ee9a2b36804c50d29 (patch)
treeba99c1acb3c9a743c407eee7fce8a7855a703cb4 /ext/metadata/metadatamuxjpeg.c
parent79b7ae29aa2bdc345496c975b56203fab7af5a00 (diff)
downloadgst-plugins-bad-e415aeeb4f0e0bf7a622328ee9a2b36804c50d29.tar.gz
gst-plugins-bad-e415aeeb4f0e0bf7a622328ee9a2b36804c50d29.tar.bz2
gst-plugins-bad-e415aeeb4f0e0bf7a622328ee9a2b36804c50d29.zip
Muxer writes (in jpeg only) whole IPTC chunk sent as tag. Muxer implemets GstTagSetter interface.
Original commit message from CVS: Muxer writes (in jpeg only) whole IPTC chunk sent as tag. Muxer implemets GstTagSetter interface.
Diffstat (limited to 'ext/metadata/metadatamuxjpeg.c')
-rw-r--r--ext/metadata/metadatamuxjpeg.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/ext/metadata/metadatamuxjpeg.c b/ext/metadata/metadatamuxjpeg.c
index 50844a48..25a9f6b6 100644
--- a/ext/metadata/metadatamuxjpeg.c
+++ b/ext/metadata/metadatamuxjpeg.c
@@ -77,6 +77,7 @@ void
metadatamux_jpeg_lazy_update (JpegMuxData * jpeg_data)
{
gsize i;
+ gboolean has_exif = FALSE;
for (i = 0; i < jpeg_data->inject_chunks->len; ++i) {
if (jpeg_data->inject_chunks->chunk[i].size > 0 &&
@@ -85,6 +86,28 @@ metadatamux_jpeg_lazy_update (JpegMuxData * jpeg_data)
case MD_CHUNK_EXIF:
metadatamux_wrap_chunk (&jpeg_data->inject_chunks->chunk[i], NULL, 0,
0xFF, 0xE1);
+ has_exif = TRUE;
+ break;
+ case MD_CHUNK_IPTC:
+ {
+ unsigned int size = jpeg_data->inject_chunks->chunk[i].size + 256;
+ unsigned char *buf = g_new (guint8, size);
+
+ size = iptc_jpeg_ps3_save_iptc (NULL, 0,
+ jpeg_data->inject_chunks->chunk[i].data,
+ jpeg_data->inject_chunks->chunk[i].size, buf, size);
+ if (size > 0) {
+ g_free (jpeg_data->inject_chunks->chunk[i].data);
+ jpeg_data->inject_chunks->chunk[i].data = buf;
+ jpeg_data->inject_chunks->chunk[i].size = size;
+ metadatamux_wrap_chunk (&jpeg_data->inject_chunks->chunk[i], NULL,
+ 0, 0xFF, 0xED);
+ } else {
+ GST_ERROR ("Invalid IPTC chunk\n");
+ g_free (buf);
+ /* FIXME: remove entry from list */
+ }
+ }
break;
case MD_CHUNK_XMP:
{
@@ -99,7 +122,7 @@ metadatamux_jpeg_lazy_update (JpegMuxData * jpeg_data)
}
}
}
- if (i == jpeg_data->inject_chunks->len) {
+ if (!has_exif) {
/* EXIF not injected so not strip JFIF anymore */
metadata_chunk_array_clear (jpeg_data->strip_chunks);
}