mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
transform: fixes for bufferpool handling
Don't error out when the allocation query returns success. Do bufferpool query after we pushed the caps event downstream so that we can get a good bufferpool suggestion. Also proxy the bufferpool query downstream when we operate in in_place mode.
This commit is contained in:
parent
8380949994
commit
7754d8d7ba
1 changed files with 10 additions and 8 deletions
|
@ -778,7 +778,7 @@ gst_base_transform_do_bufferpool (GstBaseTransform * trans, GstCaps * outcaps)
|
||||||
/* find a pool for the negotiated caps now */
|
/* find a pool for the negotiated caps now */
|
||||||
query = gst_query_new_allocation (outcaps, TRUE);
|
query = gst_query_new_allocation (outcaps, TRUE);
|
||||||
|
|
||||||
if (gst_pad_peer_query (trans->srcpad, query))
|
if (!gst_pad_peer_query (trans->srcpad, query))
|
||||||
goto query_failed;
|
goto query_failed;
|
||||||
|
|
||||||
/* we got configuration from our peer, parse them */
|
/* we got configuration from our peer, parse them */
|
||||||
|
@ -861,11 +861,6 @@ gst_base_transform_configure_caps (GstBaseTransform * trans, GstCaps * in,
|
||||||
ret = klass->set_caps (trans, in, out);
|
ret = klass->set_caps (trans, in, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
/* try to get a pool when needed */
|
|
||||||
gst_base_transform_do_bufferpool (trans, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
trans->negotiated = ret;
|
trans->negotiated = ret;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1251,6 +1246,11 @@ gst_base_transform_setcaps (GstBaseTransform * trans, GstPad * pad,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
/* try to get a pool when needed */
|
||||||
|
gst_base_transform_do_bufferpool (trans, othercaps);
|
||||||
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (otherpeer)
|
if (otherpeer)
|
||||||
gst_object_unref (otherpeer);
|
gst_object_unref (otherpeer);
|
||||||
|
@ -1301,9 +1301,11 @@ gst_base_transform_query (GstPad * pad, GstQuery * query)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
GST_BASE_TRANSFORM_LOCK (trans);
|
GST_BASE_TRANSFORM_LOCK (trans);
|
||||||
passthrough = trans->passthrough;
|
passthrough = trans->passthrough || trans->always_in_place;
|
||||||
GST_BASE_TRANSFORM_UNLOCK (trans);
|
GST_BASE_TRANSFORM_UNLOCK (trans);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (trans, "passthrough %d", passthrough);
|
||||||
|
|
||||||
if (passthrough)
|
if (passthrough)
|
||||||
ret = gst_pad_peer_query (otherpad, query);
|
ret = gst_pad_peer_query (otherpad, query);
|
||||||
else
|
else
|
||||||
|
@ -1439,7 +1441,7 @@ gst_base_transform_prepare_output_buffer (GstBaseTransform * trans,
|
||||||
|
|
||||||
if (*out_buf == NULL) {
|
if (*out_buf == NULL) {
|
||||||
if (trans->passthrough) {
|
if (trans->passthrough) {
|
||||||
GST_DEBUG_OBJECT (trans, "Avoiding pad alloc");
|
GST_DEBUG_OBJECT (trans, "Reusing input buffer");
|
||||||
*out_buf = in_buf;
|
*out_buf = in_buf;
|
||||||
} else if (trans->priv->srcpool) {
|
} else if (trans->priv->srcpool) {
|
||||||
GST_DEBUG_OBJECT (trans, "using pool alloc");
|
GST_DEBUG_OBJECT (trans, "using pool alloc");
|
||||||
|
|
Loading…
Reference in a new issue