diff options
author | Edgard Lima <edgard.lima@indt.org.br> | 2007-12-03 16:14:01 +0000 |
---|---|---|
committer | Edgard Lima <edgard.lima@indt.org.br> | 2007-12-03 16:14:01 +0000 |
commit | e415aeeb4f0e0bf7a622328ee9a2b36804c50d29 (patch) | |
tree | ba99c1acb3c9a743c407eee7fce8a7855a703cb4 /ext/metadata/metadatamuxjpeg.c | |
parent | 79b7ae29aa2bdc345496c975b56203fab7af5a00 (diff) | |
download | gst-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.c | 25 |
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); } |