Do we need to support different allocation caps in basetransform?
Junyan He
junyan.he at hotmail.com
Fri Jun 5 16:42:30 UTC 2020
We encountered a problem when we want to support GstVideoCropMeta in a
vaapipostproc element.
the pipeline is:
gst-launch-1.0 videotestsrc num-buffers=100 ! capsfilter
caps=video/x-raw,format=RGBA,width=800,height=600 ! videocrop left=200
top=30 ! vaapipostproc ! vaapisink
The vaapipostproc can support GstVideoCropMeta and passes down the crop
meta to down stream element. So the "negotiated caps" between
vaapipostproc and vaapisink is "600x570 size", which is the
final/display size. But the vaapipostproc needs the downstream element
to allocate original size buffer, which is "800x600 size", and this
should be the "allocation caps".
I just find in
gst_base_transform_setcaps() ->
gst_base_transform_find_transform() ->
gst_base_transform_do_bufferpool ()
It always use the "negotiated caps" to set the bufferpool and we have no
chance to set the real "allocation caps".
But in videodecoder base class, the "negotiated caps" and "allocation
caps" can be different. When decoding, a 800x1080(negotiated caps)
stream may need a 800x1088(allocation caps) size buffer allocated by
downstream element's pool as the DPB.
So can we add some virtual function in basetransform to set the correct
"allocation caps"?
Can see:
https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/322
for details.
Thanks.
More information about the gstreamer-devel
mailing list