summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--configure.ac13
-rw-r--r--ext/celt/gstceltenc.c10
-rw-r--r--ext/jack/gstjack.c3
-rw-r--r--ext/jack/gstjack.h6
-rw-r--r--ext/jack/gstjackaudiosink.c3
-rw-r--r--ext/jack/gstjackaudiosrc.c7
-rw-r--r--ext/ladspa/gstsignalprocessor.c97
-rw-r--r--ext/ladspa/gstsignalprocessor.h2
-rw-r--r--ext/metadata/metadata.c15
-rw-r--r--ext/metadata/metadataexif.h12
-rw-r--r--ext/metadata/metadataiptc.h12
-rw-r--r--ext/metadata/metadatamuxjpeg.c66
-rw-r--r--ext/metadata/metadatamuxpng.c18
-rw-r--r--ext/metadata/metadataparsejpeg.c60
-rw-r--r--ext/metadata/metadataparsepng.c5
-rw-r--r--ext/metadata/metadataxmp.h11
-rw-r--r--gst/aacparse/gstaacparse.c23
-rw-r--r--gst/autoconvert/Makefile.am2
-rw-r--r--gst/camerabin/Makefile.am2
-rw-r--r--gst/dtmf/Makefile.am1
-rw-r--r--gst/liveadder/Makefile.am1
-rw-r--r--gst/mxf/Makefile.am1
-rw-r--r--gst/nuvdemux/Makefile.am2
-rw-r--r--gst/qtmux/Makefile.am1
-rw-r--r--gst/qtmux/gstqtmux.c24
-rw-r--r--gst/rtpmux/Makefile.am1
-rw-r--r--gst/selector/gstinputselector.c18
-rw-r--r--gst/siren/Makefile.am2
-rw-r--r--gst/valve/Makefile.am2
-rw-r--r--tests/check/Makefile.am9
31 files changed, 255 insertions, 176 deletions
diff --git a/NEWS b/NEWS
index 257a4e1f..90bd44ca 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer Bad Plug-insĀ 0.10.10, "A precious stone"
+This is GStreamer Bad Plug-insĀ 0.10.11, "A precious stone"
Changes since 0.10.10:
diff --git a/configure.ac b/configure.ac
index beedeb9d..245e3e87 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.52)
dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
-AC_INIT(GStreamer Bad Plug-ins, 0.10.11,
+AC_INIT(GStreamer Bad Plug-ins, 0.10.11.1,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-plugins-bad)
@@ -531,10 +531,15 @@ AG_GST_CHECK_FEATURE(CDAUDIO, [cdaudio], cdaudio, [
dnl *** celt ***
translit(dnm, m, l) AM_CONDITIONAL(USE_CELT, true)
AG_GST_CHECK_FEATURE(CELT, [celt], celt, [
- PKG_CHECK_MODULES(CELT, celt >= 0.4.0, [
+ PKG_CHECK_MODULES(CELT, celt >= 0.5.0, [
HAVE_CELT="yes"], [
- HAVE_CELT="no"
- AC_MSG_RESULT(no)
+ PKG_CHECK_MODULES(CELT, celt >= 0.4.0, [
+ HAVE_CELT="yes"
+ AC_DEFINE([HAVE_CELT_0_4], 1, [Define if libcelt 0.4 is installed])
+ ],[
+ HAVE_CELT="no"
+ AC_MSG_RESULT(no)
+ ])
])
AC_SUBST(CELT_CFLAGS)
AC_SUBST(CELT_LIBS)
diff --git a/ext/celt/gstceltenc.c b/ext/celt/gstceltenc.c
index d76fd886..11b57e55 100644
--- a/ext/celt/gstceltenc.c
+++ b/ext/celt/gstceltenc.c
@@ -738,9 +738,15 @@ gst_celt_enc_encode (GstCeltEnc * enc, gboolean flush)
GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)", frame_size, bytes);
+#ifdef HAVE_CELT_0_4
outsize =
- celt_encode (enc->state, data, GST_BUFFER_DATA (outbuf),
- bytes_per_packet);
+ celt_encode (enc->state, data,
+ GST_BUFFER_DATA (outbuf), bytes_per_packet);
+#else
+ outsize =
+ celt_encode (enc->state, data, NULL,
+ GST_BUFFER_DATA (outbuf), bytes_per_packet);
+#endif
g_free (data);
diff --git a/ext/jack/gstjack.c b/ext/jack/gstjack.c
index 96afd06e..08302501 100644
--- a/ext/jack/gstjack.c
+++ b/ext/jack/gstjack.c
@@ -33,6 +33,9 @@ gst_jack_connect_get_type (void)
"Don't automatically connect ports to physical ports", "none"},
{GST_JACK_CONNECT_AUTO,
"Automatically connect ports to physical ports", "auto"},
+ {GST_JACK_CONNECT_AUTO_FORCED,
+ "Automatically connect ports to as many physical ports as possible",
+ "auto-forced"},
{0, NULL, NULL},
};
diff --git a/ext/jack/gstjack.h b/ext/jack/gstjack.h
index 585b72ea..fc26b713 100644
--- a/ext/jack/gstjack.h
+++ b/ext/jack/gstjack.h
@@ -31,13 +31,17 @@
* @GST_JACK_CONNECT_AUTO: In this mode, the element will try to connect each
* output port to a random physical jack input pin. The sink will
* expose the number of physical channels on its pad caps.
+ * @GST_JACK_CONNECT_AUTO_FORCED: In this mode, the element will try to connect each
+ * output port to a random physical jack input pin. The element will accept any number
+ * of input channels.
*
* Specify how the output ports will be connected.
*/
typedef enum {
GST_JACK_CONNECT_NONE,
- GST_JACK_CONNECT_AUTO
+ GST_JACK_CONNECT_AUTO,
+ GST_JACK_CONNECT_AUTO_FORCED
} GstJackConnect;
typedef jack_default_audio_sample_t sample_t;
diff --git a/ext/jack/gstjackaudiosink.c b/ext/jack/gstjackaudiosink.c
index 228a2297..01383cbb 100644
--- a/ext/jack/gstjackaudiosink.c
+++ b/ext/jack/gstjackaudiosink.c
@@ -454,7 +454,8 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
/* if we need to automatically connect the ports, do so now. We must do this
* after activating the client. */
- if (sink->connect == GST_JACK_CONNECT_AUTO) {
+ if (sink->connect == GST_JACK_CONNECT_AUTO
+ || sink->connect == GST_JACK_CONNECT_AUTO_FORCED) {
/* find all the physical input ports. A physical input port is a port
* associated with a hardware device. Someone needs connect to a physical
* port in order to hear something. */
diff --git a/ext/jack/gstjackaudiosrc.c b/ext/jack/gstjackaudiosrc.c
index 682a684a..ca4bf73f 100644
--- a/ext/jack/gstjackaudiosrc.c
+++ b/ext/jack/gstjackaudiosrc.c
@@ -233,7 +233,6 @@ jack_process_cb (jack_nframes_t nframes, void *arg)
/* the samples in the jack input buffers have to be interleaved into the
* ringbuffer
*/
-
for (i = 0; i < nframes; ++i)
for (j = 0; j < channels; ++j)
*data++ = buffers[j][i];
@@ -458,7 +457,8 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
/* if we need to automatically connect the ports, do so now. We must do this
* after activating the client. */
- if (src->connect == GST_JACK_CONNECT_AUTO) {
+ if (src->connect == GST_JACK_CONNECT_AUTO
+ || src->connect == GST_JACK_CONNECT_AUTO_FORCED) {
/* find all the physical output ports. A physical output port is a port
* associated with a hardware device. Someone needs connect to a physical
* port in order to capture something. */
@@ -483,10 +483,9 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
}
GST_DEBUG_OBJECT (src, "try connecting to %s",
jack_port_name (src->ports[i]));
- /* connect the physical port to a port */
+ /* connect the physical port to a port */
res = jack_connect (client, ports[i], jack_port_name (src->ports[i]));
- g_print ("connecting to %s\n", jack_port_name (src->ports[i]));
if (res != 0 && res != EEXIST)
goto cannot_connect;
}
diff --git a/ext/ladspa/gstsignalprocessor.c b/ext/ladspa/gstsignalprocessor.c
index 5098edaf..c46ae7a8 100644
--- a/ext/ladspa/gstsignalprocessor.c
+++ b/ext/ladspa/gstsignalprocessor.c
@@ -21,6 +21,21 @@
* Boston, MA 02111-1307, USA.
*/
+/*
+ * SECTION:gstsignalprocessor
+ *
+ * This baseclass allows to write elements that need data on all pads before
+ * their processing function can run.
+ *
+ * In push mode (gst_signal_processor_chain) it operates as follows:
+ * 1. store each received buffer on the pad and decrement pending_in
+ * 2. when pending_in==0, process as much as we can and push outputs
+ *
+ * In pull mode (gst_signal_processor_getrange) is operates as follows:
+ * 1. if there is an output ready, deliver
+ * 2. otherwise pull from each sink-pad, process requested frames and deliver
+ * the buffer
+ */
#include <stdlib.h>
@@ -71,26 +86,33 @@ gst_signal_processor_pad_template_get_type (void)
return type;
}
-/* FIXME: better allow the caller to pass on the template, right now this can
- * only create mono pads */
+/*
+ * gst_signal_processor_class_add_pad_template:
+ * @klass: element class
+ * @name: pad name
+ * @direction: pad direction (src/sink)
+ * @index: index for the pad per direction (starting from 0)
+ *
+ */
void
gst_signal_processor_class_add_pad_template (GstSignalProcessorClass * klass,
const gchar * name, GstPadDirection direction, guint index)
{
GstPadTemplate *new;
+ GstCaps *caps;
g_return_if_fail (GST_IS_SIGNAL_PROCESSOR_CLASS (klass));
g_return_if_fail (name != NULL);
g_return_if_fail (direction == GST_PAD_SRC || direction == GST_PAD_SINK);
+ /* FIXME: would be nice to have the template as a parameter, right now this can
+ * only create mono pads */
+ caps = gst_caps_copy (gst_static_caps_get (&template_caps));
+
new = g_object_new (gst_signal_processor_pad_template_get_type (),
- "name", name, NULL);
+ "name", name, "name-template", name,
+ "direction", direction, "presence", GST_PAD_ALWAYS, "caps", caps, NULL);
- GST_PAD_TEMPLATE_NAME_TEMPLATE (new) = g_strdup (name);
- GST_PAD_TEMPLATE_DIRECTION (new) = direction;
- GST_PAD_TEMPLATE_PRESENCE (new) = GST_PAD_ALWAYS;
- GST_PAD_TEMPLATE_CAPS (new) = gst_caps_copy (gst_static_caps_get
- (&template_caps));
GST_SIGNAL_PROCESSOR_PAD_TEMPLATE (new)->index = index;
gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), new);
@@ -110,11 +132,12 @@ struct _GstSignalProcessorPad
GstBuffer *pen;
+ /* index for the pad per direction (starting from 0) */
guint index;
/* these are only used for sink pads */
- guint samples_avail;
- gfloat *data;
+ guint samples_avail; /* available mono sample frames */
+ gfloat *data; /* data pointer to read from / write to */
};
static GType
@@ -140,10 +163,6 @@ GST_BOILERPLATE (GstSignalProcessor, gst_signal_processor, GstElement,
static void gst_signal_processor_finalize (GObject * object);
-static void gst_signal_processor_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_signal_processor_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
static gboolean gst_signal_processor_src_activate_pull (GstPad * pad,
gboolean active);
static gboolean gst_signal_processor_sink_activate_push (GstPad * pad,
@@ -176,10 +195,6 @@ gst_signal_processor_class_init (GstSignalProcessorClass * klass)
gstelement_class = GST_ELEMENT_CLASS (klass);
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_signal_processor_finalize);
- gobject_class->set_property =
- GST_DEBUG_FUNCPTR (gst_signal_processor_set_property);
- gobject_class->get_property =
- GST_DEBUG_FUNCPTR (gst_signal_processor_get_property);
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_signal_processor_change_state);
@@ -345,7 +360,7 @@ gst_signal_processor_stop (GstSignalProcessor * self)
klass->stop (self);
for (sinks = elem->sinkpads; sinks; sinks = sinks->next)
- /* force set_caps when going to RUNNING, see note in set_caps */
+ /* force set_caps when going to RUNNING, see note in _setcaps () */
gst_pad_set_caps (GST_PAD (sinks->data), NULL);
/* should also flush our buffers perhaps? */
@@ -449,7 +464,7 @@ gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps)
gst_signal_processor_cleanup (self);
if (!gst_signal_processor_setup (self, sample_rate))
- goto start_failed;
+ goto start_or_setup_failed;
self->sample_rate = sample_rate;
gst_caps_replace (&self->caps, caps);
@@ -464,16 +479,16 @@ gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps)
when we leave that the processor is RUNNING. */
if (!GST_SIGNAL_PROCESSOR_IS_INITIALIZED (self)
&& !gst_signal_processor_setup (self, self->sample_rate))
- goto start_failed;
+ goto start_or_setup_failed;
if (!GST_SIGNAL_PROCESSOR_IS_RUNNING (self)
&& !gst_signal_processor_start (self))
- goto start_failed;
+ goto start_or_setup_failed;
gst_object_unref (self);
return TRUE;
-start_failed:
+start_or_setup_failed:
{
gst_object_unref (self);
return FALSE;
@@ -501,8 +516,8 @@ gst_signal_processor_event (GstPad * pad, GstEvent * event)
self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
bclass = GST_SIGNAL_PROCESSOR_GET_CLASS (self);
- /* FIXME, this probably isn't the correct interface: what about return values, what
- * about overriding event_default
+ /* FIXME, this probably isn't the correct interface: what about return values,
+ * what about overriding event_default
* Sync with GstBaseTransform::gst_base_transform_sink_event */
if (bclass->event)
bclass->event (self, event);
@@ -545,6 +560,8 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
self->audio_in[sinkpad->index] = sinkpad->data;
}
+ /* FIXME: return if samples_avail==0 ? */
+
/* now assign output buffers. we can avoid allocation by reusing input
buffers, but only if process() can work in place, and if the input buffer
is the exact size of the number of samples we are processing. */
@@ -637,11 +654,13 @@ gst_signal_processor_process (GstSignalProcessor * self, guint nframes)
GstElement *elem;
GstSignalProcessorClass *klass;
+ /* check if we have buffers enqueued */
g_return_if_fail (self->pending_in == 0);
g_return_if_fail (self->pending_out == 0);
elem = GST_ELEMENT (self);
+ /* check how much input is available and prepare output buffers */
nframes = gst_signal_processor_prepare (self, nframes);
if (G_UNLIKELY (nframes == 0))
goto flow_error;
@@ -704,6 +723,7 @@ gst_signal_processor_flush (GstSignalProcessor * self)
GST_INFO_OBJECT (self, "flush()");
+ /* release enqueued buffers */
for (pads = GST_ELEMENT (self)->pads; pads; pads = pads->next) {
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pads->data;
@@ -715,6 +735,7 @@ gst_signal_processor_flush (GstSignalProcessor * self)
}
}
+ /* no outputs prepared and inputs for each pad needed */
self->pending_out = 0;
self->pending_in = klass->num_audio_in;
}
@@ -863,32 +884,6 @@ gst_signal_processor_chain (GstPad * pad, GstBuffer * buffer)
return self->flow_state;
}
-static void
-gst_signal_processor_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- /* GstSignalProcessor *self = GST_SIGNAL_PROCESSOR (object); */
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_signal_processor_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- /* GstSignalProcessor *self = GST_SIGNAL_PROCESSOR (object); */
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
static gboolean
gst_signal_processor_sink_activate_push (GstPad * pad, gboolean active)
{
diff --git a/ext/ladspa/gstsignalprocessor.h b/ext/ladspa/gstsignalprocessor.h
index eb9cd40e..d6f0d0b0 100644
--- a/ext/ladspa/gstsignalprocessor.h
+++ b/ext/ladspa/gstsignalprocessor.h
@@ -79,7 +79,9 @@ struct _GstSignalProcessor {
GstActivateMode mode;
+ /* pending inputs before processing can take place */
guint pending_in;
+ /* panding outputs to be filled */
guint pending_out;
gfloat *control_in;
diff --git a/ext/metadata/metadata.c b/ext/metadata/metadata.c
index 55510515..91293741 100644
--- a/ext/metadata/metadata.c
+++ b/ext/metadata/metadata.c
@@ -125,7 +125,7 @@ metadata_init (MetaData ** meta_data, const MetaOptions options)
/* when parsing we will probably strip only 3 chunk (exif, iptc and xmp)
so we use 4 just in case there is more than one chunk of them.
But this is just for convinience, 'cause the chunk_array increases
- dinamically */
+ dynamically */
metadata_chunk_array_init (&(*meta_data)->strip_chunks, 4);
/* at most 1 chunk will be injected (JPEG JFIF) */
metadata_chunk_array_init (&(*meta_data)->inject_chunks, 1);
@@ -304,15 +304,14 @@ done:
* This function must be called after #metadata_parse and after the element
* has modified the segments (chunks)
* Data written to #META_DATA_INJECT_CHUNKS will be properly wrapped
- * This function is really importante in case o muxing 'cause:
- * 1- 'cause gives the oportunity to muxers to wrapper new segments with
- * apropriate bytes
+ * This function is really important in case of muxing because it gives the
+ * oportunity to muxers:
+ * 1: to frame new segments
* ex: in case of JPEG it can wrap the EXIF chunk (created using tags) with
- * chunk id and chunk size
- * 2- 'cause gives the oportunity to muxer to decide if some chunks should
- * still be striped/injected
+ * chunk id and chunk size
+ * 2: to decide if some chunks should still be striped/injected
* ex: if there is no EXIF chunk to be inserted, the muxer decides to not
- * strip JFIF anymore
+ * strip JFIF anymore
* @see_also: #metadata_parse #META_DATA_INJECT_CHUNKS
*
* Returns: nothing
diff --git a/ext/metadata/metadataexif.h b/ext/metadata/metadataexif.h
index 4b775314..6040ef4d 100644
--- a/ext/metadata/metadataexif.h
+++ b/ext/metadata/metadataexif.h
@@ -41,8 +41,8 @@
* Boston, MA 02111-1307, USA.
*/
-#ifndef __GST_METADATAPARSE_EXIF_H__
-#define __GST_METADATAPARSE_EXIF_H__
+#ifndef __GST_METADATA_EXIF_H__
+#define __GST_METADATA_EXIF_H__
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
@@ -50,6 +50,12 @@
G_BEGIN_DECLS
+/*
+ * defines
+ */
+
+#define EXIF_HEADER "Exif\0"
+
typedef enum {
GST_META_EXIF_BYTE_ORDER_MOTOROLA,
GST_META_EXIF_BYTE_ORDER_INTEL
@@ -84,4 +90,4 @@ metadatamux_exif_create_chunk_from_tag_list (guint8 ** buf, guint32 *size,
const GstTagList * taglist, const MetaExifWriteOptions *opts);
G_END_DECLS
-#endif /* __GST_METADATAPARSE_EXIF_H__ */
+#endif /* __GST_METADATA_EXIF_H__ */
diff --git a/ext/metadata/metadataiptc.h b/ext/metadata/metadataiptc.h
index e13bb0ca..843a4925 100644
--- a/ext/metadata/metadataiptc.h
+++ b/ext/metadata/metadataiptc.h
@@ -41,8 +41,8 @@
* Boston, MA 02111-1307, USA.
*/
-#ifndef __GST_METADATAPARSE_IPTC_H__
-#define __GST_METADATAPARSE_IPTC_H__
+#ifndef __GST_METADATA_IPTC_H__
+#define __GST_METADATA_IPTC_H__
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
@@ -51,6 +51,12 @@
G_BEGIN_DECLS
/*
+ * defines
+ */
+#define PHOTOSHOP_HEADER "Photoshop 3.0"
+
+
+/*
* external function prototypes
*/
@@ -63,4 +69,4 @@ metadatamux_iptc_create_chunk_from_tag_list (guint8 ** buf, guint32 *size,
const GstTagList * taglist);
G_END_DECLS
-#endif /* __GST_METADATAPARSE_IPTC_H__ */
+#endif /* __GST_METADATA_IPTC_H__ */
diff --git a/ext/metadata/metadatamuxjpeg.c b/ext/metadata/metadatamuxjpeg.c
index 3a418a44..cec049b2 100644
--- a/ext/metadata/metadatamuxjpeg.c
+++ b/ext/metadata/metadatamuxjpeg.c
@@ -77,6 +77,7 @@
*/
#include "metadatamuxjpeg.h"
+#include "metadataxmp.h"
#include <string.h>
@@ -203,12 +204,12 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
{
int ret = META_PARSING_DONE;
- guint8 mark[2] = { 0x00, 0x00 };
const guint8 *step_buf = buf;
*next_start = buf;
if (jpeg_data->state == JPEG_MUX_NULL) {
+ guint8 mark[2];
if (*bufsize < 2) {
GST_INFO ("need more data");
@@ -249,9 +250,8 @@ metadatamux_jpeg_parse (JpegMuxData * jpeg_data, guint8 * buf,
}
done:
-
+ GST_INFO ("finishing: %d", ret);
return ret;
-
}
/*
@@ -268,46 +268,43 @@ done:
void
metadatamux_jpeg_lazy_update (JpegMuxData * jpeg_data)
{
- gint i = 0;
+ gsize i;
gboolean has_exif = FALSE;
+ MetadataChunkArray *chunks = jpeg_data->inject_chunks;
+
+ GST_INFO ("checking %d chunks", chunks->len);
- while (i < jpeg_data->inject_chunks->len) {
- if (jpeg_data->inject_chunks->chunk[i].size > 0 &&
- jpeg_data->inject_chunks->chunk[i].data) {
- switch (jpeg_data->inject_chunks->chunk[i].type) {
+ for (i = 0; i < chunks->len; ++i) {
+
+ GST_INFO ("checking chunk[%" G_GSIZE_FORMAT "], type=%d, len=%u",
+ i, chunks->chunk[i].type, chunks->chunk[i].size);
+
+ if (chunks->chunk[i].size > 0 && chunks->chunk[i].data) {
+ switch (chunks->chunk[i].type) {
case MD_CHUNK_EXIF:
- metadatamux_wrap_chunk (&jpeg_data->inject_chunks->chunk[i], NULL, 0,
- 0xFF, 0xE1);
+ metadatamux_wrap_chunk (&chunks->chunk[i], NULL, 0, 0xFF, 0xE1);
has_exif = TRUE;
break;
case MD_CHUNK_IPTC:
#ifdef HAVE_IPTC
- {
- if (metadatamux_wrap_iptc_with_ps3 (&jpeg_data->inject_chunks->
- chunk[i].data, &jpeg_data->inject_chunks->chunk[i].size)) {
- metadatamux_wrap_chunk (&jpeg_data->inject_chunks->chunk[i], NULL,
- 0, 0xFF, 0xED);
+ if (metadatamux_wrap_iptc_with_ps3 (&chunks->chunk[i].data,
+ &chunks->chunk[i].size)) {
+ metadatamux_wrap_chunk (&chunks->chunk[i], NULL, 0, 0xFF, 0xED);
} else {
GST_ERROR ("Invalid IPTC chunk\n");
- metadata_chunk_array_remove_by_index (jpeg_data->inject_chunks, i);
+ metadata_chunk_array_remove_by_index (chunks, i);
continue;
}
- }
#endif /* #ifdef HAVE_IPTC */
break;
case MD_CHUNK_XMP:
- {
- static const char XmpHeader[] = "http://ns.adobe.com/xap/1.0/";
-
- metadatamux_wrap_chunk (&jpeg_data->inject_chunks->chunk[i],
- (guint8 *) XmpHeader, sizeof (XmpHeader), 0xFF, 0xE1);
- }
+ metadatamux_wrap_chunk (&chunks->chunk[i],
+ (guint8 *) XMP_HEADER, sizeof (XMP_HEADER), 0xFF, 0xE1);
break;
default:
break;
}
}
- ++i;
}
if (!has_exif) {
@@ -392,22 +389,28 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
mark[0] = READ (*buf, *bufsize);
mark[1] = READ (*buf, *bufsize);
+ GST_DEBUG ("parsing JPEG marker : 0x%02x%02x", mark[0], mark[1]);
+
if (mark[0] == 0xFF) {
chunk_size = READ (*buf, *bufsize) << 8;
chunk_size += READ (*buf, *bufsize);
- if (mark[1] == 0xE0) { /* may be JFIF */
+ if (mark[1] == 0xE0) { /* APP0 - may be JFIF */
- if (chunk_size >= 16) {
- if (*bufsize < 5) {
+ /* FIXME: whats the 14 ? according to
+ * http://en.wikipedia.org/wiki/JFIF#JFIF_segment_format
+ * its the jfif segment without thumbnails
+ */
+ if (chunk_size >= 14 + 2) {
+ if (*bufsize < sizeof (JfifHeader)) {
GST_INFO ("need more data");
- *next_size = (*buf - *next_start) + 5;
+ *next_size = (*buf - *next_start) + sizeof (JfifHeader);
ret = META_PARSING_NEED_MORE_DATA;
goto done;
}
- if (0 == memcmp (JfifHeader, *buf, 5)) {
+ if (0 == memcmp (JfifHeader, *buf, sizeof (JfifHeader))) {
jfif_found = TRUE;
}
} else {
@@ -416,11 +419,8 @@ metadatamux_jpeg_reading (JpegMuxData * jpeg_data, guint8 ** buf,
}
}
-
if (!jfif_found) {
- GST_INFO ("no jfif found");
- ret = META_PARSING_ERROR;
- goto done;
+ GST_INFO ("no jfif found, will insert it as needed");
}
new_chunk_offset = 2;
diff --git a/ext/metadata/metadatamuxpng.c b/ext/metadata/metadatamuxpng.c
index 3223b34e..008acc6f 100644
--- a/ext/metadata/metadatamuxpng.c
+++ b/ext/metadata/metadatamuxpng.c
@@ -344,15 +344,19 @@ void
metadatamux_png_lazy_update (PngMuxData * png_data)
{
gsize i;
+ MetadataChunkArray *chunks = png_data->inject_chunks;
- for (i = 0; i < png_data->inject_chunks->len; ++i) {
- if (png_data->inject_chunks->chunk[i].size > 0 &&
- png_data->inject_chunks->chunk[i].data) {
- switch (png_data->inject_chunks->chunk[i].type) {
+ GST_INFO ("checking %d chunks", chunks->len);
+
+ for (i = 0; i < chunks->len; ++i) {
+
+ GST_INFO ("checking chunk[%" G_GSIZE_FORMAT "], type=%d, len=%u",
+ i, chunks->chunk[i].type, chunks->chunk[i].size);
+
+ if (chunks->chunk[i].size > 0 && chunks->chunk[i].data) {
+ switch (chunks->chunk[i].type) {
case MD_CHUNK_XMP:
- {
- metadatamux_wrap_xmp_chunk (&png_data->inject_chunks->chunk[i]);
- }
+ metadatamux_wrap_xmp_chunk (&chunks->chunk[i]);
break;
default:
GST_ERROR ("Unexpected chunk for PNG muxer.");
diff --git a/ext/metadata/metadataparsejpeg.c b/ext/metadata/metadataparsejpeg.c
index 8e90b5c7..0fe52017 100644
--- a/ext/metadata/metadataparsejpeg.c
+++ b/ext/metadata/metadataparsejpeg.c
@@ -82,9 +82,12 @@
#include "metadataparsejpeg.h"
#include "metadataparseutil.h"
+#include "metadataexif.h"
+#include "metadataxmp.h"
#ifdef HAVE_IPTC
#include <libiptcdata/iptc-jpeg.h>
+#include "metadataiptc.h"
#endif
/*
@@ -226,9 +229,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
guint32 * bufsize, const guint32 offset, guint8 ** next_start,
guint32 * next_size)
{
-
int ret = META_PARSING_DONE;
- guint8 mark[2] = { 0x00, 0x00 };
const guint8 *step_buf = buf;
/* step_buf holds where buf starts. this const value will be passed to
@@ -240,6 +241,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
*next_start = buf;
if (jpeg_data->state == JPEG_PARSE_NULL) {
+ guint8 mark[2];
/* only the first time this function is called it will verify the stream
type to be sure it is a JPEG */
@@ -259,9 +261,7 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
ret = META_PARSING_ERROR;
goto done;
}
-
jpeg_data->state = JPEG_PARSE_READING;
-
}
while (ret == META_PARSING_DONE) {
@@ -309,9 +309,8 @@ metadataparse_jpeg_parse (JpegParseData * jpeg_data, guint8 * buf,
}
done:
-
+ GST_INFO ("finishing: %d", ret);
return ret;
-
}
/*
@@ -389,12 +388,6 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
guint16 chunk_size = 0;
static const char JfifHeader[] = "JFIF";
- static const unsigned char ExifHeader[] =
- { 0x45, 0x78, 0x69, 0x66, 0x00, 0x00 };
-#ifdef HAVE_IPTC
- static const char PhotoshopHeader[] = "Photoshop 3.0";
-#endif
- static const char XmpHeader[] = "http://ns.adobe.com/xap/1.0/";
*next_start = *buf;
@@ -407,12 +400,14 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
mark[0] = READ (*buf, *bufsize);
mark[1] = READ (*buf, *bufsize);
+ GST_DEBUG ("parsing JPEG marker : 0x%02x%02x", mark[0], mark[1]);
+
if (mark[0] == 0xFF) {
- if (mark[1] == 0xD9) { /* end of image */
+ if (mark[1] == 0xD9) { /* EOI - end of image */
ret = META_PARSING_DONE;
jpeg_data->state = JPEG_PARSE_DONE;
goto done;
- } else if (mark[1] == 0xDA) {
+ } else if (mark[1] == 0xDA) { /* SOS - start of scan */
/* start of scan image, lets not look behind of this */
ret = META_PARSING_DONE;
jpeg_data->state = JPEG_PARSE_DONE;
@@ -428,30 +423,34 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
chunk_size = READ (*buf, *bufsize) << 8;
chunk_size += READ (*buf, *bufsize);
- if (mark[1] == 0xE0) { /* may be JFIF */
+ if (mark[1] == 0xE0) { /* APP0 - may be JFIF */
- if (chunk_size >= 16) {
+ /* FIXME: whats the 14 ? according to
+ * http://en.wikipedia.org/wiki/JFIF#JFIF_segment_format
+ * its the jfif segment without thumbnails
+ */
+ if (chunk_size >= 14 + 2) {
if (*bufsize < 14) {
*next_size = (*buf - *next_start) + 14;
ret = META_PARSING_NEED_MORE_DATA;
goto done;
}
- if (0 == memcmp (JfifHeader, *buf, 5)) {
+ if (0 == memcmp (JfifHeader, *buf, sizeof (JfifHeader))) {
jpeg_data->jfif_found = TRUE;
}
}
- } else if (mark[1] == 0xE1) { /* may be it is Exif or XMP */
+ } else if (mark[1] == 0xE1) { /* APP1 - may be it is Exif or XMP */
- if (chunk_size >= 8) { /* size2 'EXIF' 0x00 0x00 */
- if (*bufsize < 6) {
- *next_size = (*buf - *next_start) + 6;
+ if (chunk_size >= sizeof (EXIF_HEADER) + 2) {
+ if (*bufsize < sizeof (EXIF_HEADER)) {
+ *next_size = (*buf - *next_start) + sizeof (EXIF_HEADER);
ret = META_PARSING_NEED_MORE_DATA;
goto done;
}
- if (0 == memcmp (ExifHeader, *buf, 6)) {
+ if (0 == memcmp (EXIF_HEADER, *buf, sizeof (EXIF_HEADER))) {
MetadataChunk chunk;
if (!jpeg_data->parse_only) {
@@ -502,14 +501,14 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
goto done;
}
}
- if (chunk_size >= 31) { /* size2 "http://ns.adobe.com/xap/1.0/" */
- if (*bufsize < 29) {
- *next_size = (*buf - *next_start) + 29;
+ if (chunk_size >= sizeof (XMP_HEADER) + 2) {
+ if (*bufsize < sizeof (XMP_HEADER)) {
+ *next_size = (*buf - *next_start) + sizeof (XMP_HEADER);
ret = META_PARSING_NEED_MORE_DATA;
goto done;
}
- if (0 == memcmp (XmpHeader, *buf, 29)) {
+ if (0 == memcmp (XMP_HEADER, *buf, sizeof (XMP_HEADER))) {
if (!jpeg_data->parse_only) {
@@ -527,9 +526,9 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
/* if adapter has been provided, prepare to hold chunk */
if (jpeg_data->xmp_adapter) {
- *buf += 29;
- *bufsize -= 29;
- jpeg_data->read = chunk_size - 2 - 29;
+ *buf += sizeof (XMP_HEADER);
+ *bufsize -= sizeof (XMP_HEADER);
+ jpeg_data->read = chunk_size - 2 - sizeof (XMP_HEADER);
jpeg_data->state = JPEG_PARSE_XMP;
ret = META_PARSING_DONE;
goto done;
@@ -550,8 +549,7 @@ metadataparse_jpeg_reading (JpegParseData * jpeg_data, guint8 ** buf,
goto done;
}
-
- if (0 == memcmp (PhotoshopHeader, *buf, 14)) {
+ if (0 == memcmp (PHOTOSHOP_HEADER, *buf, sizeof (PHOTOSHOP_HEADER))) {
if (!jpeg_data->parse_only) {
diff --git a/ext/metadata/metadataparsepng.c b/ext/metadata/metadataparsepng.c
index 520ef204..45c8da4b 100644
--- a/ext/metadata/metadataparsepng.c
+++ b/ext/metadata/metadataparsepng.c
@@ -363,6 +363,11 @@ metadataparse_png_reading (PngParseData * png_data, guint8 ** buf,
mark[2] = READ (*buf, *bufsize);
mark[3] = READ (*buf, *bufsize);
+ /* FIXME: use FOURCECC macros */
+
+ GST_DEBUG ("parsing png : 0x%02x%02x%02x%02x",
+ mark[0], mark[1], mark[2], mark[3]);
+
if (mark[0] == 'I' && mark[1] == 'E' && mark[2] == 'N' && mark[3] == 'D') {
ret = META_PARSING_DONE;
png_data->state = PNG_PARSE_DONE;
diff --git a/ext/metadata/metadataxmp.h b/ext/metadata/metadataxmp.h
index 831b563f..47e4f116 100644
--- a/ext/metadata/metadataxmp.h
+++ b/ext/metadata/metadataxmp.h
@@ -41,8 +41,8 @@
* Boston, MA 02111-1307, USA.
*/
-#ifndef __GST_METADATAPARSE_XMP_H__
-#define __GST_METADATAPARSE_XMP_H__
+#ifndef __GST_METADATA_XMP_H__
+#define __GST_METADATA_XMP_H__
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
@@ -51,6 +51,11 @@
G_BEGIN_DECLS
/*
+ * defines
+ */
+#define XMP_HEADER "http://ns.adobe.com/xap/1.0/"
+
+/*
* external function prototypes
*/
@@ -67,4 +72,4 @@ metadatamux_xmp_create_chunk_from_tag_list (guint8 ** buf, guint32 *size,
const GstTagList * taglist);
G_END_DECLS
-#endif /* __GST_METADATAPARSE_XMP_H__ */
+#endif /* __GST_METADATA_XMP_H__ */
diff --git a/gst/aacparse/gstaacparse.c b/gst/aacparse/gstaacparse.c
index fdbcfb56..c9ad0b5f 100644
--- a/gst/aacparse/gstaacparse.c
+++ b/gst/aacparse/gstaacparse.c
@@ -585,7 +585,6 @@ gst_aacparse_check_valid_frame (GstBaseParse * parse,
{
const guint8 *data;
GstAacParse *aacparse;
- guint needed_data = 1024;
gboolean ret = FALSE;
aacparse = GST_AACPARSE (parse);
@@ -601,22 +600,30 @@ gst_aacparse_check_valid_frame (GstBaseParse * parse,
/* There is nothing to parse */
*framesize = GST_BUFFER_SIZE (buffer);
ret = TRUE;
- }
- else if (aacparse->header_type == DSPAAC_HEADER_NOT_PARSED ||
+ } else if (aacparse->header_type == DSPAAC_HEADER_NOT_PARSED ||
aacparse->sync == FALSE) {
+
ret = gst_aacparse_detect_stream (aacparse, data, GST_BUFFER_SIZE (buffer),
framesize, skipsize);
+
} else if (aacparse->header_type == DSPAAC_HEADER_ADTS) {
+ guint needed_data = 1024;
+
ret = gst_aacparse_check_adts_frame (aacparse, data,
GST_BUFFER_SIZE (buffer), framesize, &needed_data);
- }
- if (!ret) {
- /* Increase the block size, we want to find the header by ourselves */
- GST_DEBUG ("buffer didn't contain valid frame, skip = %d", *skipsize);
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse), needed_data);
+ if (!ret) {
+ GST_DEBUG ("buffer didn't contain valid frame");
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse),
+ needed_data);
+ }
+
+ } else {
+ GST_DEBUG ("buffer didn't contain valid frame");
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse), 1024);
}
+
return ret;
}
diff --git a/gst/autoconvert/Makefile.am b/gst/autoconvert/Makefile.am
index 5c799bde..22e8a676 100644
--- a/gst/autoconvert/Makefile.am
+++ b/gst/autoconvert/Makefile.am
@@ -5,3 +5,5 @@ libgstautoconvert_la_SOURCES = gstautoconvert.c gstautoconvert.h
libgstautoconvert_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS)
libgstautoconvert_la_LIBADD = $(GST_LIBS_LIBS)
libgstautoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS)
+libgstautoconvert_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/gst/camerabin/Makefile.am b/gst/camerabin/Makefile.am
index 1f060b78..3691af85 100644
--- a/gst/camerabin/Makefile.am
+++ b/gst/camerabin/Makefile.am
@@ -30,7 +30,7 @@ libgstcamerabin_la_LIBADD = \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-$(GST_MAJORMINOR).la
libgstcamerabin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstcamerabin__la_LIBTOOLFLAGS = --tag=disable-static
+libgstcamerabin_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstcamerabin.h \
gstcamerabinxoverlay.h \
diff --git a/gst/dtmf/Makefile.am b/gst/dtmf/Makefile.am
index c96a3a41..3bdabbb4 100644
--- a/gst/dtmf/Makefile.am
+++ b/gst/dtmf/Makefile.am
@@ -13,4 +13,5 @@ noinst_HEADERS = gstdtmfsrc.h \
libgstdtmf_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS) -DEXTERN_BUF -DRTP_SUPPORT
libgstdtmf_la_LIBADD = $(GST_LIBS_LIBS) -lm
libgstdtmf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstrtp-@GST_MAJORMINOR@
+libgstdtmf_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/liveadder/Makefile.am b/gst/liveadder/Makefile.am
index 3db27f48..e2783332 100644
--- a/gst/liveadder/Makefile.am
+++ b/gst/liveadder/Makefile.am
@@ -4,5 +4,6 @@ libgstliveadder_la_SOURCES = liveadder.c
libgstliveadder_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS)
libgstliveadder_la_LIBADD = $(GST_LIBS_LIBS)
libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10
+libgstliveadder_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = liveadder.h
diff --git a/gst/mxf/Makefile.am b/gst/mxf/Makefile.am
index 617ab685..96534c4b 100644
--- a/gst/mxf/Makefile.am
+++ b/gst/mxf/Makefile.am
@@ -23,6 +23,7 @@ libgstmxf_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS
libgstmxf_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-@GST_MAJORMINOR@
libgstmxf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstmxf_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = \
mxfquark.h \
diff --git a/gst/nuvdemux/Makefile.am b/gst/nuvdemux/Makefile.am
index 9a5b7e53..ef19fb63 100644
--- a/gst/nuvdemux/Makefile.am
+++ b/gst/nuvdemux/Makefile.am
@@ -5,6 +5,6 @@ libgstnuvdemux_la_CFLAGS = ${GST_CFLAGS}
libgstnuvdemux_la_LIBADD = $(GST_BASE_LIBS)
libgstnuvdemux_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstnuvdemux_la_SOURCES = gstnuvdemux.c
-libgstnuvdemuxla_LIBTOOLFLAGS = --tag=disable-static
+libgstnuvdemux_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstnuvdemux.h
diff --git a/gst/qtmux/Makefile.am b/gst/qtmux/Makefile.am
index e93ff67b..6bf65577 100644
--- a/gst/qtmux/Makefile.am
+++ b/gst/qtmux/Makefile.am
@@ -14,6 +14,7 @@ libgstqtmux_la_SOURCES = gstqtmux.c \
libgstqtmux_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
libgstqtmux_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
libgstqtmux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstqtmux_la_LIBTOOLFLAGS = --tag=disable-static
# headers we need but don't want installed
noinst_HEADERS = gstqtmux.h \
diff --git a/gst/qtmux/gstqtmux.c b/gst/qtmux/gstqtmux.c
index c3ac67fb..4b4344b0 100644
--- a/gst/qtmux/gstqtmux.c
+++ b/gst/qtmux/gstqtmux.c
@@ -75,6 +75,19 @@
#include <gst/gst.h>
#include <gst/base/gstcollectpads.h>
+#include <sys/types.h>
+#ifdef G_OS_WIN32
+#include <io.h> /* lseek, open, close, read */
+#undef lseek
+#define lseek _lseeki64
+#undef off_t
+#define off_t guint64
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
#include "gstqtmux.h"
GST_DEBUG_CATEGORY_STATIC (gst_qt_mux_debug);
@@ -603,8 +616,17 @@ gst_qt_mux_send_buffered_data (GstQTMux * qtmux, guint64 * offset)
if (fflush (qtmux->fast_start_file))
goto flush_failed;
- if (fseek (qtmux->fast_start_file, 0, SEEK_SET))
+#ifdef HAVE_FSEEKO
+ if (fseeko (qtmux->fast_start_file, (off_t) 0, SEEK_SET) != 0)
goto seek_failed;
+#elif defined (G_OS_UNIX) || defined (G_OS_WIN32)
+ if (lseek (fileno (qtmux->fast_start_file), (off_t) 0,
+ SEEK_SET) == (off_t) - 1)
+ goto seek_failed;
+#else
+ if (fseek (qtmux->fast_start_file, (long) 0, SEEK_SET) != 0)
+ goto seek_failed;
+#endif
/* hm, this could all take a really really long time,
* but there may not be another way to get moov atom first
diff --git a/gst/rtpmux/Makefile.am b/gst/rtpmux/Makefile.am
index be9bc080..17447ba6 100644
--- a/gst/rtpmux/Makefile.am
+++ b/gst/rtpmux/Makefile.am
@@ -5,6 +5,7 @@ libgstrtpmux_la_SOURCES = gstrtpmuxer.c gstrtpmux.c gstrtpdtmfmux.c
libgstrtpmux_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS) -DEXTERN_BUF -DRTP_SUPPORT
libgstrtpmux_la_LIBADD = $(GST_LIBS_LIBS)
libgstrtpmux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstrtp-@GST_MAJORMINOR@
+libgstrtpmux_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstrtpmux.h gstrtpdtmfmux.h
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index ec1ae542..7a458b0f 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -402,16 +402,18 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_TAG:
{
- GstTagList *tags;
+ GstTagList *tags, *oldtags, *newtags;
- GST_OBJECT_LOCK (selpad);
- if (selpad->tags)
- gst_tag_list_free (selpad->tags);
gst_event_parse_tag (event, &tags);
- if (tags)
- tags = gst_tag_list_copy (tags);
- selpad->tags = tags;
- GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, selpad->tags);
+
+ GST_OBJECT_LOCK (selpad);
+ oldtags = selpad->tags;
+
+ newtags = gst_tag_list_merge (oldtags, tags, GST_TAG_MERGE_REPLACE);
+ selpad->tags = newtags;
+ if (oldtags)
+ gst_tag_list_free (oldtags);
+ GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, newtags);
GST_OBJECT_UNLOCK (selpad);
break;
}
diff --git a/gst/siren/Makefile.am b/gst/siren/Makefile.am
index 1d81b3ff..56b6a3de 100644
--- a/gst/siren/Makefile.am
+++ b/gst/siren/Makefile.am
@@ -12,3 +12,5 @@ libgstsiren_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS)
libgstsiren_la_LIBADD = $(GST_LIBS_LIBS) $(GST_BASE_LIBS) \
-lgstrtp-@GST_MAJORMINOR@ -lm
libgstsiren_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS)
+libgstsiren_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/gst/valve/Makefile.am b/gst/valve/Makefile.am
index 0e78b5ac..09ffadf2 100644
--- a/gst/valve/Makefile.am
+++ b/gst/valve/Makefile.am
@@ -5,3 +5,5 @@ libgstvalve_la_SOURCES = gstvalve.c gstvalve.h
libgstvalve_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(ERROR_CFLAGS)
libgstvalve_la_LIBADD = $(GST_LIBS_LIBS)
libgstvalve_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS)
+libgstvalve_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 91becc32..79c9f684 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -27,12 +27,11 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp
clean-local: clean-local-check
-# disabling metadata test until #574401 is fixed
-#if USE_METADATA
-#check_metadata = pipelines/metadata
-#else
+if USE_METADATA
+check_metadata = pipelines/metadata
+else
check_metadata =
-#endif
+endif
if USE_MPEG2ENC
check_mpeg2enc = elements/mpeg2enc