summaryrefslogtreecommitdiff
path: root/gst/rtp/gstrtpgstdepay.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtp/gstrtpgstdepay.c')
-rw-r--r--gst/rtp/gstrtpgstdepay.c36
1 files changed, 26 insertions, 10 deletions
diff --git a/gst/rtp/gstrtpgstdepay.c b/gst/rtp/gstrtpgstdepay.c
index 42dac7e24..c992abf0b 100644
--- a/gst/rtp/gstrtpgstdepay.c
+++ b/gst/rtp/gstrtpgstdepay.c
@@ -21,9 +21,9 @@
# include "config.h"
#endif
-#include <gst/rtp/gstrtpbuffer.h>
-
#include <string.h>
+#include <stdlib.h>
+
#include "gstrtpgstdepay.h"
GST_DEBUG_CATEGORY_STATIC (rtpgstdepay_debug);
@@ -141,11 +141,9 @@ gst_rtp_gst_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
{
GstRtpGSTDepay *rtpgstdepay;
GstStructure *structure;
- GstCaps *outcaps;
gint clock_rate;
gboolean res;
const gchar *capsenc;
- gchar *capsstr;
rtpgstdepay = GST_RTP_GST_DEPAY (depayload);
@@ -157,21 +155,37 @@ gst_rtp_gst_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
capsenc = gst_structure_get_string (structure, "caps");
if (capsenc) {
+ GstCaps *outcaps;
gsize out_len;
+ gchar *capsstr;
+ const gchar *capsver;
+ guint CV;
+ /* decode caps */
capsstr = (gchar *) g_base64_decode (capsenc, &out_len);
outcaps = gst_caps_from_string (capsstr);
g_free (capsstr);
- /* we have the SDP caps as output caps */
- rtpgstdepay->current_CV = 0;
+ /* parse version */
+ capsver = gst_structure_get_string (structure, "capsversion");
+ if (capsver) {
+ CV = atoi (capsver);
+ } else {
+ /* no version, assume 0 */
+ CV = 0;
+ }
+ /* store in cache */
+ rtpgstdepay->current_CV = CV;
gst_caps_ref (outcaps);
- store_cache (rtpgstdepay, 0, outcaps);
+ store_cache (rtpgstdepay, CV, outcaps);
+
+ res = gst_pad_set_caps (depayload->srcpad, outcaps);
+ gst_caps_unref (outcaps);
} else {
- outcaps = gst_caps_new_any ();
+ GST_WARNING_OBJECT (depayload, "no caps given");
+ rtpgstdepay->current_CV = -1;
+ res = TRUE;
}
- res = gst_pad_set_caps (depayload->srcpad, outcaps);
- gst_caps_unref (outcaps);
return res;
}
@@ -252,6 +266,8 @@ gst_rtp_gst_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
if (size < csize)
goto too_small;
+ GST_DEBUG_OBJECT (rtpgstdepay, "parsing caps %s", &data[offset]);
+
/* parse and store in cache */
outcaps = gst_caps_from_string ((gchar *) & data[offset]);
store_cache (rtpgstdepay, CV, outcaps);