tcp/multihandlesink: Handle the case of no caps
authorJan Schmidt <jan@centricular.com>
Fri, 26 Jan 2018 11:44:24 +0000 (22:44 +1100)
committerJan Schmidt <jan@centricular.com>
Fri, 9 Feb 2018 07:07:59 +0000 (18:07 +1100)
Pass data with no caps and no streamheaders without
throwing a bunch of criticals

gst/tcp/gstmultihandlesink.c

index c8268e2..38af70a 100644 (file)
@@ -1038,11 +1038,13 @@ gst_multi_handle_sink_client_queue_buffer (GstMultiHandleSink * mhsink,
   caps = gst_pad_get_current_caps (GST_BASE_SINK_PAD (sink));
 
   if (!mhclient->caps) {
-    GST_DEBUG_OBJECT (sink,
-        "%s no previous caps for this client, send streamheader",
-        mhclient->debug);
-    send_streamheader = TRUE;
-    mhclient->caps = gst_caps_ref (caps);
+    if (caps) {
+      GST_DEBUG_OBJECT (sink,
+          "%s no previous caps for this client, send streamheader",
+          mhclient->debug);
+      send_streamheader = TRUE;
+      mhclient->caps = gst_caps_ref (caps);
+    }
   } else {
     /* there were previous caps recorded, so compare */
     if (!gst_caps_is_equal (caps, mhclient->caps)) {
@@ -1086,8 +1088,7 @@ gst_multi_handle_sink_client_queue_buffer (GstMultiHandleSink * mhsink,
       }
     }
     /* Replace the old caps */
-    gst_caps_unref (mhclient->caps);
-    mhclient->caps = gst_caps_ref (caps);
+    gst_caps_replace (&mhclient->caps, caps);
   }
 
   if (G_UNLIKELY (send_streamheader)) {
@@ -1127,7 +1128,8 @@ gst_multi_handle_sink_client_queue_buffer (GstMultiHandleSink * mhsink,
     }
   }
 
-  gst_caps_unref (caps);
+  if (caps)
+    gst_caps_unref (caps);
   caps = NULL;
 
   GST_LOG_OBJECT (sink, "%s queueing buffer of length %" G_GSIZE_FORMAT,