some enhancements for capsnego
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>
Wed, 18 Sep 2002 10:57:56 +0000 (10:57 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Wed, 18 Sep 2002 10:57:56 +0000 (10:57 +0000)
Original commit message from CVS:
some enhancements for capsnego

sys/v4l/gstv4lmjpegsrc.c
sys/v4l/gstv4lsrc.c

index c3534be..1d17a37 100644 (file)
@@ -278,6 +278,7 @@ static GstPadConnectReturn
 gst_v4lmjpegsrc_srcconnect (GstPad  *pad,
                             GstCaps *caps)
 {
+  GstPadConnectReturn ret_val;
   GstV4lMjpegSrc *v4lmjpegsrc;
 
   v4lmjpegsrc = GST_V4LMJPEGSRC (gst_pad_get_parent (pad));
@@ -285,8 +286,14 @@ gst_v4lmjpegsrc_srcconnect (GstPad  *pad,
   /* in case the buffers are active (which means that we already
    * did capsnego before and didn't clean up), clean up anyways */
   if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lmjpegsrc)))
+  {
     if (!gst_v4lmjpegsrc_capture_deinit(v4lmjpegsrc))
       return GST_PAD_CONNECT_REFUSED;
+  }
+  else if (!GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lmjpegsrc)))
+  {
+    return GST_PAD_CONNECT_DELAYED;
+  }
 
   /* Note: basically, we don't give a damn about the opposite caps here.
    * that might seem odd, but it isn't. we know that the opposite caps is
@@ -323,16 +330,15 @@ gst_v4lmjpegsrc_srcconnect (GstPad  *pad,
                         "width",  GST_PROPS_INT(v4lmjpegsrc->end_width),
                         "height", GST_PROPS_INT(v4lmjpegsrc->end_height),
                         NULL       ) );
-  if (gst_pad_try_set_caps(v4lmjpegsrc->srcpad, caps) <= 0)
-  {
-    gst_element_error(GST_ELEMENT(v4lmjpegsrc),
-      "Failed to set new caps");
+  if ((ret_val = gst_pad_try_set_caps(v4lmjpegsrc->srcpad, caps)) == GST_PAD_CONNECT_REFUSED)
     return GST_PAD_CONNECT_REFUSED;
-  }
+  else if (ret_val == GST_PAD_CONNECT_DELAYED)
+    return GST_PAD_CONNECT_DELAYED;
+
   if (!gst_v4lmjpegsrc_capture_init(v4lmjpegsrc))
     return GST_PAD_CONNECT_REFUSED;
 
-  return GST_PAD_CONNECT_OK;
+  return GST_PAD_CONNECT_DONE;
 }
 
 
index c32613e..a087378 100644 (file)
@@ -245,6 +245,7 @@ static GstPadConnectReturn
 gst_v4lsrc_srcconnect (GstPad  *pad,
                        GstCaps *vscapslist)
 {
+  GstPadConnectReturn ret_val;
   GstV4lSrc *v4lsrc;
   GstCaps *caps, *newcaps;
   gint palette;
@@ -254,8 +255,14 @@ gst_v4lsrc_srcconnect (GstPad  *pad,
   /* in case the buffers are active (which means that we already
    * did capsnego before and didn't clean up), clean up anyways */
   if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lsrc)))
+  {
     if (!gst_v4lsrc_capture_deinit(v4lsrc))
       return GST_PAD_CONNECT_REFUSED;
+  }
+  else if (!GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lsrc)))
+  {
+    return GST_PAD_CONNECT_DELAYED;
+  }
 
   palette = v4lsrc->palette;
 
@@ -415,13 +422,15 @@ gst_v4lsrc_srcconnect (GstPad  *pad,
 
     gst_caps_debug (newcaps, "new caps to set on v4lsrc's src pad");
 
-    if (gst_pad_try_set_caps(v4lsrc->srcpad, newcaps) <= 0)
+    if ((ret_val = gst_pad_try_set_caps(v4lsrc->srcpad, newcaps)) == GST_PAD_CONNECT_REFUSED)
       continue;
+    else if (ret_val == GST_PAD_CONNECT_DELAYED)
+      return GST_PAD_CONNECT_DELAYED;
 
     if (!gst_v4lsrc_capture_init(v4lsrc))
       return GST_PAD_CONNECT_REFUSED;
 
-    return GST_PAD_CONNECT_OK;
+    return GST_PAD_CONNECT_DONE;
   }
 
   /* still nothing - no good caps */