Proxy the ts-offset property in the audio*sink elements.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679343
#include "gstautoaudiosink.h"
#include "gstautodetect.h"
+#define DEFAULT_TS_OFFSET 0
+
/* Properties */
enum
{
PROP_0,
PROP_CAPS,
+ PROP_TS_OFFSET,
};
static GstStateChangeReturn
"Filter sink candidates using these caps.", GST_TYPE_CAPS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+ g_param_spec_int64 ("ts-offset", "TS Offset",
+ "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+ DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (eklass,
gst_static_pad_template_get (&sink_template));
/* set the default raw audio caps */
sink->filter_caps = gst_static_caps_get (&raw_caps);
+ sink->ts_offset = DEFAULT_TS_OFFSET;
/* mark as sink */
GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
if (!(esink = gst_auto_audio_sink_find_best (sink)))
goto no_sink;
+ g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
sink->kid = esink;
/* Ensure the child is brought up to the right state to match the parent
* although it's currently always in READY and
gst_caps_unref (sink->filter_caps);
sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
break;
+ case PROP_TS_OFFSET:
+ sink->ts_offset = g_value_get_int64 (value);
+ if (sink->kid)
+ g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
gst_value_set_caps (value, sink->filter_caps);
break;
}
+ case PROP_TS_OFFSET:
+ g_value_set_int64 (value, sink->ts_offset);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
GstPad *pad;
GstElement *kid;
GstCaps *filter_caps;
+ GstClockTimeDiff ts_offset;
} GstAutoAudioSink;
typedef struct _GstAutoAudioSinkClass {
#include "gstautovideosink.h"
#include "gstautodetect.h"
+#define DEFAULT_TS_OFFSET 0
+
/* Properties */
enum
{
PROP_0,
PROP_CAPS,
+ PROP_TS_OFFSET,
};
static GstStateChangeReturn
"Filter sink candidates using these caps.", GST_TYPE_CAPS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+ g_param_spec_int64 ("ts-offset", "TS Offset",
+ "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+ DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (eklass,
gst_static_pad_template_get (&sink_template));
gst_element_class_set_static_metadata (eklass, "Auto video sink",
/* set the default raw video caps */
sink->filter_caps = gst_static_caps_get (&raw_caps);
+ sink->ts_offset = DEFAULT_TS_OFFSET;
/* mark as sink */
GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
if (!(esink = gst_auto_video_sink_find_best (sink)))
goto no_sink;
+ g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
sink->kid = esink;
gst_bin_add (GST_BIN (sink), esink);
gst_caps_unref (sink->filter_caps);
sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
break;
+ case PROP_TS_OFFSET:
+ sink->ts_offset = g_value_get_int64 (value);
+ if (sink->kid)
+ g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
gst_value_set_caps (value, sink->filter_caps);
break;
}
+ case PROP_TS_OFFSET:
+ g_value_set_int64 (value, sink->ts_offset);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
GstPad *pad;
GstElement *kid;
GstCaps *filter_caps;
+ GstClockTimeDiff ts_offset;
} GstAutoVideoSink;
typedef struct _GstAutoVideoSinkClass {