summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 04c5c8c9..2f4aebf7 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -497,6 +497,14 @@ gst_avi_demux_handle_src_query (GstPad *pad,
return res;
}
+static GstCaps *
+gst_avi_demux_src_getcaps (GstPad *pad)
+{
+ avi_stream_context *stream = gst_pad_get_element_private (pad);
+
+ return gst_caps_copy (stream->caps);
+}
+
static gint32
gst_avi_demux_sync_streams (GstAviDemux *avi,
guint64 time)
@@ -884,8 +892,6 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
/* set proper settings and add it */
pad = gst_pad_new_from_template (templ, padname);
g_free (padname);
- if (caps != NULL)
- gst_pad_try_set_caps (pad, caps);
gst_pad_set_formats_function (pad, gst_avi_demux_get_src_formats);
gst_pad_set_event_mask_function (pad, gst_avi_demux_get_event_mask);
@@ -893,8 +899,10 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
gst_pad_set_query_type_function (pad, gst_avi_demux_get_src_query_types);
gst_pad_set_query_function (pad, gst_avi_demux_handle_src_query);
gst_pad_set_convert_function (pad, gst_avi_demux_src_convert);
+ gst_pad_set_getcaps_function (pad, gst_avi_demux_src_getcaps);
stream = &avi->stream[avi->num_streams];
+ stream->caps = caps ? caps : gst_caps_new_empty ();
stream->pad = pad;
stream->strh = strh;
stream->num = avi->num_streams;
@@ -908,6 +916,7 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
gst_pad_set_element_private (pad, stream);
avi->num_streams++;
+ /* auto-negotiates */
gst_element_add_pad (GST_ELEMENT (avi), pad);
return TRUE;