Efficient scaling and/or conversion from YUV420 (NV12) to RGBA

Iñigo Huguet inigohuguet at fanamoel.com
Thu Aug 2 09:31:59 UTC 2018


Hi.

I'm using a pipeline to display live video from cameras to a QT 
application. Cameras' driver produces NV12 video, and for QT I'm using 
qmlglsink.

Element qmlglsink seems to only accept RGBA, so I have to make the 
conversion. I'm doing it with this pipeline: v4l2src 
device="/dev/video1" ! 
video/x-raw,format=NV12,width=1440,height=1152,framerate=5/1 ! glupload 
! glcolorconvert ! qmlglsink sync=false

However, I'm getting very poor performance, around 1fps or less, and 
glcolorconvert seems to be the bottleneck. With this pipeline I get 25 
fps with no problem: v4l2src device="/dev/video1" ! 
video/x-raw,format=NV12,width=1440,height=1152,framerate=25/1 ! glupload 
! fakesink silent=false

With 720x576 video I'm getting a better performance (obvious), but I 
need to use also 1440x1152 because this is video from the 4 cameras at 
the same time.

Possible solutions that might be acceptable for me:

  * More efficient way of converting from NV12 to RGBA
  * Efficient way of scale down to 720x576, or even less, before color
    conversion
  * Two previous options at the same time
  * Other solutions you might suggest

I'm running this on an ARM processor (Allwinner A20) with GPU and 
OpenGLES. This processor also have a Video Processing Unit that works 
with VDPAU.

Thanks

Iñigo

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20180802/77e6dc27/attachment.html>


More information about the gstreamer-devel mailing list