[libcamera-devel] [PATCH v4 0/3] qcam: NV family YUV format conversion by using OpenGL shader

Show Liu show.liu at linaro.org
Fri Aug 21 18:15:59 CEST 2020


Hi,

This is the version 4 patchset for qcam to accelerate the YUV format conversion
by OpenGL shader. Most of the modifications are according to the comments
and suggestions from V3. 
And the big change is using the QOpenGLFramebufferObject with QOffscreenSurface
instead of the QOpenGLWidget, the main reason that use dynamic_cast
to get the viewfinder_ is really weird.
In this version, OpenGL rendering enabled by --render=gles,
and if any error occurs during OpenGL configuration, it will return to use QT rendering.
But compared with the previous version, this version performance dropped a lot
due to I using the toImage() function to get the image when rendering complete,
it's really an inefficient operation. the framerate down to 16.x ~ 18.x fps(1280 x 800).
I am still trying to improve this performance issue. Any suggestions are welcome.



BR,
Show Liu

Show Liu (3):
  qcam: add OpenGL shader code as QT resource
  qcam: add OpenGL renderer
  qcam: use the OpenGL renderer as NV family YUV format converter

 src/qcam/assets/shader/NV_2_planes_UV_f.glsl |  32 ++
 src/qcam/assets/shader/NV_2_planes_VU_f.glsl |  32 ++
 src/qcam/assets/shader/NV_3_planes_UV_f.glsl |  33 ++
 src/qcam/assets/shader/NV_3_planes_VU_f.glsl |  33 ++
 src/qcam/assets/shader/NV_vertex_shader.glsl |  16 +
 src/qcam/assets/shader/shaders.qrc           |  10 +
 src/qcam/main.cpp                            |   3 +
 src/qcam/main_window.cpp                     |   2 +
 src/qcam/main_window.h                       |   1 +
 src/qcam/meson.build                         |   3 +
 src/qcam/renderer.cpp                        | 346 +++++++++++++++++++
 src/qcam/renderer.h                          |  81 +++++
 src/qcam/viewfinder.cpp                      |  46 ++-
 src/qcam/viewfinder.h                        |  10 +
 14 files changed, 640 insertions(+), 8 deletions(-)
 create mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_3_planes_UV_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_3_planes_VU_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl
 create mode 100644 src/qcam/assets/shader/shaders.qrc
 create mode 100644 src/qcam/renderer.cpp
 create mode 100644 src/qcam/renderer.h

-- 
2.20.1



More information about the libcamera-devel mailing list