summaryrefslogtreecommitdiff
path: root/gst/rawparse
diff options
context:
space:
mode:
authorMichael Smith <msmith@rdio.com>2012-10-09 23:00:14 -0700
committerMichael Smith <msmith@rdio.com>2012-10-09 23:00:14 -0700
commit080677beef8175ac5960bd112c077860470126b7 (patch)
treecc19c4783a8c617c5d5933e0b3df5f942f096ed7 /gst/rawparse
parent2a18cf41a817832db7997b42fca07820579f7ae3 (diff)
downloadgstreamer-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.c25
-rw-r--r--gst/rawparse/gstaudioparse.h1
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;