mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-23 09:04:15 +00:00
some enhancements for capsnego
Original commit message from CVS: some enhancements for capsnego
This commit is contained in:
parent
8801c9bdea
commit
9f7340b4a4
2 changed files with 23 additions and 8 deletions
|
@ -278,6 +278,7 @@ static GstPadConnectReturn
|
||||||
gst_v4lmjpegsrc_srcconnect (GstPad *pad,
|
gst_v4lmjpegsrc_srcconnect (GstPad *pad,
|
||||||
GstCaps *caps)
|
GstCaps *caps)
|
||||||
{
|
{
|
||||||
|
GstPadConnectReturn ret_val;
|
||||||
GstV4lMjpegSrc *v4lmjpegsrc;
|
GstV4lMjpegSrc *v4lmjpegsrc;
|
||||||
|
|
||||||
v4lmjpegsrc = GST_V4LMJPEGSRC (gst_pad_get_parent (pad));
|
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
|
/* in case the buffers are active (which means that we already
|
||||||
* did capsnego before and didn't clean up), clean up anyways */
|
* did capsnego before and didn't clean up), clean up anyways */
|
||||||
if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lmjpegsrc)))
|
if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lmjpegsrc)))
|
||||||
|
{
|
||||||
if (!gst_v4lmjpegsrc_capture_deinit(v4lmjpegsrc))
|
if (!gst_v4lmjpegsrc_capture_deinit(v4lmjpegsrc))
|
||||||
return GST_PAD_CONNECT_REFUSED;
|
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.
|
/* 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
|
* 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),
|
"width", GST_PROPS_INT(v4lmjpegsrc->end_width),
|
||||||
"height", GST_PROPS_INT(v4lmjpegsrc->end_height),
|
"height", GST_PROPS_INT(v4lmjpegsrc->end_height),
|
||||||
NULL ) );
|
NULL ) );
|
||||||
if (gst_pad_try_set_caps(v4lmjpegsrc->srcpad, caps) <= 0)
|
if ((ret_val = gst_pad_try_set_caps(v4lmjpegsrc->srcpad, caps)) == GST_PAD_CONNECT_REFUSED)
|
||||||
{
|
|
||||||
gst_element_error(GST_ELEMENT(v4lmjpegsrc),
|
|
||||||
"Failed to set new caps");
|
|
||||||
return 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))
|
if (!gst_v4lmjpegsrc_capture_init(v4lmjpegsrc))
|
||||||
return GST_PAD_CONNECT_REFUSED;
|
return GST_PAD_CONNECT_REFUSED;
|
||||||
|
|
||||||
return GST_PAD_CONNECT_OK;
|
return GST_PAD_CONNECT_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -245,6 +245,7 @@ static GstPadConnectReturn
|
||||||
gst_v4lsrc_srcconnect (GstPad *pad,
|
gst_v4lsrc_srcconnect (GstPad *pad,
|
||||||
GstCaps *vscapslist)
|
GstCaps *vscapslist)
|
||||||
{
|
{
|
||||||
|
GstPadConnectReturn ret_val;
|
||||||
GstV4lSrc *v4lsrc;
|
GstV4lSrc *v4lsrc;
|
||||||
GstCaps *caps, *newcaps;
|
GstCaps *caps, *newcaps;
|
||||||
gint palette;
|
gint palette;
|
||||||
|
@ -254,8 +255,14 @@ gst_v4lsrc_srcconnect (GstPad *pad,
|
||||||
/* in case the buffers are active (which means that we already
|
/* in case the buffers are active (which means that we already
|
||||||
* did capsnego before and didn't clean up), clean up anyways */
|
* did capsnego before and didn't clean up), clean up anyways */
|
||||||
if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lsrc)))
|
if (GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lsrc)))
|
||||||
|
{
|
||||||
if (!gst_v4lsrc_capture_deinit(v4lsrc))
|
if (!gst_v4lsrc_capture_deinit(v4lsrc))
|
||||||
return GST_PAD_CONNECT_REFUSED;
|
return GST_PAD_CONNECT_REFUSED;
|
||||||
|
}
|
||||||
|
else if (!GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lsrc)))
|
||||||
|
{
|
||||||
|
return GST_PAD_CONNECT_DELAYED;
|
||||||
|
}
|
||||||
|
|
||||||
palette = v4lsrc->palette;
|
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");
|
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;
|
continue;
|
||||||
|
else if (ret_val == GST_PAD_CONNECT_DELAYED)
|
||||||
|
return GST_PAD_CONNECT_DELAYED;
|
||||||
|
|
||||||
if (!gst_v4lsrc_capture_init(v4lsrc))
|
if (!gst_v4lsrc_capture_init(v4lsrc))
|
||||||
return GST_PAD_CONNECT_REFUSED;
|
return GST_PAD_CONNECT_REFUSED;
|
||||||
|
|
||||||
return GST_PAD_CONNECT_OK;
|
return GST_PAD_CONNECT_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* still nothing - no good caps */
|
/* still nothing - no good caps */
|
||||||
|
|
Loading…
Reference in a new issue