HW Accelerated Resizing/Scaler plugin not accepting caps
Nicolas Dufresne
nicolas at ndufresne.ca
Tue Feb 27 01:10:28 UTC 2018
Le lundi 26 février 2018 à 13:02 -0700, rathaval a écrit :
> Hello Gst Community,
>
> I'm trying to write a plugin that is based on the Video Filter as its base
> class. It works well for no-resizing,
> 1:1 pass through pipelines.
>
> gst-launch-1.0 videotestsrc ! xm2mvscaler device=/dev/xm2mvsc0 batch-size=1
> buffer-mode=2 ! video/x-raw,format=RGB,width=1280,height=720,framerate=30/1
> ! videoconvert ! fpsdisplaysink videosink="kmssink driver-name=xilinx_drm
> plane-id=26" text-overlay=false
> /(Working pipeline)/
>
> When I try to scale it :
> gst-launch-1.0 videotestsrc !
> video/x-raw,format=RGB,width=1280,height=720,framerate=30/1 ! xm2mvscaler
> device=/dev/xm2mvsc0 batch-size=1 buffer-mode=2 !
> video/x-raw,format=RGB,width=1920,height=1080,framerate=30/1 ! videoconvert
> ! fpsdisplaysink videosink="kmssink driver-name=xilinx_drm plane-id=26"
> text-overlay=false
> WARNING: erroneous pipeline: could not link xm2mvscaler0 to videoconvert0
>
> and it *errors out*. After reading a little more of the gstvideofilter.c
> source code, it appears basing off the VideoFilter class may not be the
> right thing as it maps the frames for you.
I forgot to mention, the error is unrelated to the fact that it's
mapping the frames for you or not. Without code I could not comment on
it, so I skipped.
>
>
> *
> My question is what is the best way to map input buffers and output buffers
> for HW Accelerated scalers? And does a VideoFilter not support resizing at
> all ? I'd be glad to post more information, but a hint towards what's not
> working would be very helpful. *
What I wanted to share (and I forgot) is why GstV4l2Transform is base
on GstBaseTransform and not GstVideoFilter. As the goal was to support
zero copy through DMABuf FD, it was important that we don't map
the DMABuf FD while transforming, as due to cache management, that
could have lead to bad sub-optimal performance.
>
> Looking at gst_video_filter_transform_size routine, I suspect it does not
> allow resizing.
> ===
> Logs
> 0:00:04.053976831 2358 0x30b1c890 DEBUG capsfilter
> gstcapsfilter.c:295:gst_capsfilter_transform_caps:<capsfilter1> input:
> ANY
> 0:00:04.054003403 2358 0x30b1c890 DEBUG capsfilter
> gstcapsfilter.c:296:gst_capsfilter_transform_caps:<capsfilter1> filter:
> (NULL)
> 0:00:04.054028636 2358 0x30b1c890 DEBUG capsfilter
> gstcapsfilter.c:298:gst_capsfilter_transform_caps:<capsfilter1> caps filter:
> video/x-raw, format=(string)RGB, width=(int)1920, height=(int)1080,
> framerate=(fraction)30/1
> 0:00:04.054070900 2358 0x30b1c890 DEBUG capsfilter
> gstcapsfilter.c:299:gst_capsfilter_transform_caps:<capsfilter1> intersect:
> video/x-raw, format=(string)RGB, width=(int)1920, height=(int)1080,
> framerate=(fraction)30/1
> 0:00:04.054115894 2358 0x30b1c890 DEBUG GST_PADS
> gstpad.c:3938:gst_pad_query:<capsfilter1:sink> sent query 0x30c518a0 (caps),
> result 1
> 0:00:04.054153528 2358 0x30b1c890 INFO GST_PADS
> gstpad.c:2371:gst_pad_link_prepare: caps are incompatible
> 0:00:04.054178351 2358 0x30b1c890 INFO GST_PADS
> gstpad.c:2464:gst_pad_link_full: link between xm2mvscaler0:src and
> capsfilter1:sink failed: no common format
transform_caps for scaler are not exactly trivial if you take into the
account the pixel aspect ratio. But you can prototype by simply
removing the width/height field form the caps when transforming. You
are likely not doing this, or not doing this properly. You should also
look at "basetransform:5" logs for debugging, it will be much more
useful then looking at generic traces from pads.
> ===
> gst-inspect-1.0 output :
> root at peta_xm2m_vscaler:~# gst-inspect-1.0 xm2mvscaler
> Factory Details:
> Rank none (0)
> Long-name Xilinx M2M Video Scaler
> Klass Xilinx M2M Video Scaler
This is invalid. A Klass should be something like
"Filter/Converter/Video/Scaler"
> Description Xilinx M2M Video Scaler
> Author Rohit Athavale <rohit.athavale at xilinx.com>
>
> Plugin Details:
> Name xm2mvscaler
In general it's not recommended to have the plugin and the feature with
the same name.
> Description Xilinx M2M Scaler plugin
> Filename /usr/lib/gstreamer-1.0/libgstxm2mvscaler.so
> Version 0.6
> License LGPL
> Source module xm2mvscaler
> Binary package GStreamer
> Origin URL http://gstreamer.net/
>
> GObject
> +----GInitiallyUnowned
> +----GstObject
> +----GstElement
> +----GstBaseTransform
> +----GstVideoFilter
> +----GstXm2mVScaler
>
> Pad Templates:
> SINK template: 'sink'
> Availability: Always
> Capabilities:
> video/x-raw
> format: { RGB }
> width: [ 1, 3840 ]
> height: [ 1, 2160 ]
> framerate: [ 0/1, 2147483647/1 ]
>
> SRC template: 'src'
> Availability: Always
> Capabilities:
> video/x-raw
> format: { RGB }
> width: [ 1, 3840 ]
> height: [ 1, 2160 ]
> framerate: [ 0/1, 2147483647/1 ]
>
>
> Element Flags:
> no flags set
>
> Element Implementation:
> Has change_state() function: gst_element_change_state_func
>
> Element has no clocking capabilities.
> Element has no URI handling capabilities.
>
> Pads:
> SINK: 'sink'
> Pad Template: 'sink'
> SRC: 'src'
> Pad Template: 'src'
>
> Element Properties:
> name : The name of the object
> flags: readable, writable
> String. Default: "xm2mvscaler0"
> parent : The parent of the object
> flags: readable, writable
> Object of type "GstObject"
> qos : Handle Quality-of-Service events
> flags: readable, writable
> Boolean. Default: true
> buffer-mode : Buffer Mode
> flags: readable, writable
> Enum "GstXm2mVScalerBufferMode" Default: 0, ""
Is your default an invalid value ?
> (1): DMABUF - GST_XM2MVSC_BUF_DMABUF
> (2): Driver allocated contiguous memory -
> GST_XM2MVSC_BUF_KERNEL_DRV
> batch-size : Frame Batch Size
> flags: readable, writable
> Enum "GstXm2mVScalerBatchSize" Default: 0, ""
> (1): One -
> GST_XM2MVSCALER_BATCH_SIZE_ONE
> (2): Two -
> GST_XM2MVSCALER_BATCH_SIZE_TWO
> (8): Eight -
> GST_XM2MVSCALER_BATCH_SIZE_EIGHT
> device : Location of Device File being used
> flags: readable, writable
> String. Default: "/dev/xm2mvsc0"
>
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
More information about the gstreamer-devel
mailing list