summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2009-04-20 20:00:15 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2009-04-22 16:29:44 -0400
commit74e0724acf5f0c8c1093925fbdd8d2d4ef6edac2 (patch)
treea57c00a93fa1d30ab91a2dcd751e3b33dce68ba9
parent098b75c2f2adf18a764758f344924d2299214bd1 (diff)
rtpmux: Set different caps depending on the input
-rw-r--r--gst/rtpmux/gstrtpmux.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c
index e5bc995ba..2a045b945 100644
--- a/gst/rtpmux/gstrtpmux.c
+++ b/gst/rtpmux/gstrtpmux.c
@@ -67,6 +67,8 @@ typedef struct
{
gboolean have_clock_base;
guint clock_base;
+
+ GstCaps *out_caps;
} GstRTPMuxPadPrivate;
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
@@ -248,6 +250,7 @@ free_pad_private (gpointer data, GObject * where_the_object_was)
{
GstRTPMuxPadPrivate *padpriv = data;
+ gst_caps_replace (&padpriv->out_caps, NULL);
g_slice_free (GstRTPMuxPadPrivate, padpriv);
}
@@ -326,6 +329,7 @@ gst_rtp_mux_chain (GstPad * pad, GstBuffer * buffer)
{
GstRTPMux *rtp_mux;
GstFlowReturn ret;
+ GstRTPMuxPadPrivate *padpriv = gst_pad_get_element_private (pad);
rtp_mux = GST_RTP_MUX (gst_pad_get_parent (pad));
@@ -347,7 +351,7 @@ gst_rtp_mux_chain (GstPad * pad, GstBuffer * buffer)
GST_BUFFER_SIZE (buffer), rtp_mux->seqnum,
gst_rtp_buffer_get_timestamp (buffer));
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (rtp_mux->srcpad));
+ gst_buffer_set_caps (buffer, padpriv->out_caps);
ret = gst_pad_push (rtp_mux->srcpad, buffer);
@@ -383,7 +387,11 @@ gst_rtp_mux_setcaps (GstPad * pad, GstCaps * caps)
GST_DEBUG_OBJECT (rtp_mux,
"setting caps %" GST_PTR_FORMAT " on src pad..", caps);
ret = gst_pad_set_caps (rtp_mux->srcpad, caps);
- gst_caps_unref (caps);
+
+ if (ret)
+ gst_caps_replace (&padpriv->out_caps, caps);
+ else
+ gst_caps_unref (caps);
out:
gst_object_unref (rtp_mux);