gst_v4lmjpegsrc_srcconnect (GstPad *pad,
GstCaps *caps)
{
+ GstPadConnectReturn ret_val;
GstV4lMjpegSrc *v4lmjpegsrc;
v4lmjpegsrc = GST_V4LMJPEGSRC (gst_pad_get_parent (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
"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;
}
gst_v4lsrc_srcconnect (GstPad *pad,
GstCaps *vscapslist)
{
+ GstPadConnectReturn ret_val;
GstV4lSrc *v4lsrc;
GstCaps *caps, *newcaps;
gint palette;
/* 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;
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 */