Do we need to support different allocation caps in basetransform?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Do we need to support different allocation caps in basetransform?

junyan.he
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.
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel