diff options
author | Michael Smith <msmith@rdio.com> | 2012-10-09 23:00:14 -0700 |
---|---|---|
committer | Michael Smith <msmith@rdio.com> | 2012-10-09 23:00:14 -0700 |
commit | 080677beef8175ac5960bd112c077860470126b7 (patch) | |
tree | cc19c4783a8c617c5d5933e0b3df5f942f096ed7 /gst/rawparse | |
parent | 2a18cf41a817832db7997b42fca07820579f7ae3 (diff) | |
download | gstreamer-plugins-bad-080677beef8175ac5960bd112c077860470126b7.tar.gz |
audioparse: add a mode where the caps are taken from the sink pad, and thus audioparse
is only performing timestamping.
Diffstat (limited to 'gst/rawparse')
-rw-r--r-- | gst/rawparse/gstaudioparse.c | 25 | ||||
-rw-r--r-- | gst/rawparse/gstaudioparse.h | 1 |
2 files changed, 25 insertions, 1 deletions
diff --git a/gst/rawparse/gstaudioparse.c b/gst/rawparse/gstaudioparse.c index 58bfe75ec..696fa9626 100644 --- a/gst/rawparse/gstaudioparse.c +++ b/gst/rawparse/gstaudioparse.c @@ -70,7 +70,8 @@ enum PROP_RATE, PROP_CHANNELS, PROP_INTERLEAVED, - PROP_CHANNEL_POSITIONS + PROP_CHANNEL_POSITIONS, + PROP_USE_SINK_CAPS }; #define GST_AUDIO_PARSE_FORMAT (gst_audio_parse_format_get_type ()) @@ -146,6 +147,11 @@ gst_audio_parse_class_init (GstAudioParseClass * klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS), G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_USE_SINK_CAPS, + g_param_spec_boolean ("use-sink-caps", "Use sink caps", + "Use the sink caps for the format, only performing timestamping", + FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gst_element_class_set_metadata (gstelement_class, "Audio Parse", "Filter/Audio", "Converts stream into audio frames", @@ -206,6 +212,9 @@ gst_audio_parse_set_property (GObject * object, guint prop_id, ap->channel_positions = g_value_dup_boxed (value); break; + case PROP_USE_SINK_CAPS: + ap->use_sink_caps = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -243,6 +252,9 @@ gst_audio_parse_get_property (GObject * object, guint prop_id, GValue * value, case PROP_CHANNEL_POSITIONS: g_value_set_boxed (value, ap->channel_positions); break; + case PROP_USE_SINK_CAPS: + g_value_set_boolean (value, ap->use_sink_caps); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -356,6 +368,17 @@ gst_audio_parse_get_caps (GstRawParse * rp) gint fps_n, fps_d; const GValue *val; + if (ap->use_sink_caps) { + gint rate; + GstCaps *caps = gst_pad_get_current_caps (rp->sinkpad); + gst_audio_info_from_caps (&info, caps); + + rate = GST_AUDIO_INFO_RATE (&info); + gst_raw_parse_set_fps (GST_RAW_PARSE (ap), rate, 1); + + return caps; + } + gst_raw_parse_get_fps (rp, &fps_n, &fps_d); gst_audio_parse_setup_channel_positions (ap); diff --git a/gst/rawparse/gstaudioparse.h b/gst/rawparse/gstaudioparse.h index d8dff783e..8252fe3cd 100644 --- a/gst/rawparse/gstaudioparse.h +++ b/gst/rawparse/gstaudioparse.h @@ -48,6 +48,7 @@ struct _GstAudioParse GstRawParse parent; /* properties */ + gboolean use_sink_caps; gint format; GstAudioFormat raw_format; gint channels; |