summaryrefslogtreecommitdiffstats
path: root/ext/metadata/gstmetadatamux.c
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2009-01-23 14:43:00 +0200
committerStefan Kost <ensonic@users.sf.net>2009-01-23 15:14:24 +0200
commit93df7379e47144261787378fa195cad676b855ad (patch)
treea2b473a74c664b01516d9b49b379655471aa4bbb /ext/metadata/gstmetadatamux.c
parente4e3b44e048ddc1d7499c6108175a5f89c6273d9 (diff)
downloadgst-plugins-bad-93df7379e47144261787378fa195cad676b855ad.tar.gz
gst-plugins-bad-93df7379e47144261787378fa195cad676b855ad.tar.bz2
gst-plugins-bad-93df7379e47144261787378fa195cad676b855ad.zip
Configure byte order for EXIF. Fixes #568704
Exif blocks can be in differnt byte orders. Add an element property to select wich one should be written.
Diffstat (limited to 'ext/metadata/gstmetadatamux.c')
-rw-r--r--ext/metadata/gstmetadatamux.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/ext/metadata/gstmetadatamux.c b/ext/metadata/gstmetadatamux.c
index 657774d6..e6a66fa3 100644
--- a/ext/metadata/gstmetadatamux.c
+++ b/ext/metadata/gstmetadatamux.c
@@ -84,8 +84,6 @@
#include "gstmetadatamux.h"
-#include "metadataexif.h"
-
#include "metadataiptc.h"
#include "metadataxmp.h"
@@ -104,6 +102,7 @@ enum
enum
{
ARG_0,
+ ARG_EXIF_BYTE_ORDER,
};
@@ -121,6 +120,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_metadata_mux_debug);
#define GOTO_DONE_IF_NULL_AND_FAIL(ptr, ret) \
do { if ( NULL == (ptr) ) { (ret) = FALSE; goto done; } } while(FALSE)
+#define DEFAULT_EXIF_BYTE_ORDER GST_META_EXIF_BYTE_ORDER_MOTOROLA
+
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
@@ -292,6 +293,18 @@ gst_metadata_mux_class_init (GstMetadataMuxClass * klass)
gstbasemetadata_class->sink_event =
GST_DEBUG_FUNCPTR (gst_metadata_mux_sink_event);
+ /**
+ * GstMetadataMux:exif-byte-order:
+ *
+ * Set byte-order for exif metadata writing.
+ *
+ * Since: 0.10.11
+ */
+ g_object_class_install_property (gobject_class, ARG_EXIF_BYTE_ORDER,
+ g_param_spec_enum ("exif-byte-order", "Exif byte-order",
+ "Byte-order for exif metadata writing", GST_TYPE_META_EXIF_BYTE_ORDER,
+ DEFAULT_EXIF_BYTE_ORDER, G_PARAM_READWRITE));
+
}
static void
@@ -299,14 +312,18 @@ gst_metadata_mux_init (GstMetadataMux * filter, GstMetadataMuxClass * gclass)
{
gst_base_metadata_set_option_flag (GST_BASE_METADATA (filter),
META_OPT_EXIF | META_OPT_IPTC | META_OPT_XMP | META_OPT_MUX);
-
+ filter->exif_options.byteorder = DEFAULT_EXIF_BYTE_ORDER;
}
static void
gst_metadata_mux_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
+ GstMetadataMux *filter = GST_METADATA_MUX (object);
switch (prop_id) {
+ case ARG_EXIF_BYTE_ORDER:
+ filter->exif_options.byteorder = g_value_get_enum (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -317,7 +334,11 @@ static void
gst_metadata_mux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
+ GstMetadataMux *filter = GST_METADATA_MUX (object);
switch (prop_id) {
+ case ARG_EXIF_BYTE_ORDER:
+ g_value_set_enum (value, filter->exif_options.byteorder);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -400,7 +421,8 @@ gst_metadata_mux_create_chunks_from_tags (GstBaseMetadata * base)
if (taglist) {
if (gst_base_metadata_get_option_flag (base) & META_OPT_EXIF) {
- metadatamux_exif_create_chunk_from_tag_list (&buf, &size, taglist);
+ metadatamux_exif_create_chunk_from_tag_list (&buf, &size, taglist,
+ &filter->exif_options);
gst_base_metadata_update_inject_segment_with_new_data (base, &buf, &size,
MD_CHUNK_EXIF);
}