[vlc-devel] [PATCH v2 00/21] Refactor OpenGL converters

Romain Vimont rom1v at videolabs.io
Tue Jan 7 12:41:36 CET 2020

The purpose of this refactor is to minimize the scope of OpenGL converter
modules, to only initialize what is hardware-specific: the _interop_ part.

An _interop_ is responsible to upload picture planes to OpenGL textures, and
keep track of some metadata about the format and context. It is specific to the
input picture format (software, VDPAU, VAAPI, Android, CVPX). It is loaded via
the VLC module mechanism.

The remaining parts, including the generation of the whole fragment shader code
and the callbacks to prepare the shader for drawing every picture, are kept in
the opengl_tex_converter_t. It is now initialized by the "core" (the OpenGL
vout module), i.e. not by hardware-specific "glconv" modules anymore.

This also paves the way to refactor the fragment shader generation and loading
to use modular components (chroma converters, filters, renderers...).

Changes since patchset v1:
 - rename "importer" to "interop"
 - implement interop for cvpx
 - fix matrix multiplication order (OrientationMatrix * TransformMatrix)
 - remove vlc_object_t from opengl_tex_converter_t
 - rename "glconv" to "glinterop"
 - rename module libs from libglconv_* to libglinterop_*

Romain Vimont (21):
  opengl: use common fragment shader for Android
  opengl: extract interop from converter
  opengl: expose software chroma in interop
  opengl: remove tex converter usages
  opengl: split yuv_base_init()
  opengl: use interop for rgb_base_init()
  opengl: split xyz12_init()
  opengl: extract interop initialization
  opengl: init swizzle separately
  opengl: expose opengl_interop_init()
  opengl: initialize fshader from vout_helper
  opengl: refactor generic_init()
  opengl: make interop a vlc_object_t
  opengl: pass interop to "glconv" modules
  opengl: remove vlc_object_t tex converter
  opengl: remove pf_fragment_shader_init()
  opengl: rename converter_*.c to interop_*.c
  opengl: rename "glconv" capability to "glinterop"
  opengl: rename libglconv_* to libglinterop_*
  opengl: move compatibility defines to gl_common.h
  opengl: move interop-specific code to interop.c

 modules/hw/nvdec/nvdec_gl.c                   |   2 +-
 modules/video_output/Makefile.am              |  50 +--
 modules/video_output/opengl/converter.h       | 117 +-----
 .../video_output/opengl/fragment_shaders.c    | 357 +++++-------------
 modules/video_output/opengl/gl_common.h       |  27 ++
 modules/video_output/opengl/internal.h        |   9 +-
 modules/video_output/opengl/interop.c         | 241 ++++++++++++
 modules/video_output/opengl/interop.h         | 170 +++++++++
 ...{converter_android.c => interop_android.c} | 122 +++---
 .../{converter_cvpx.c => interop_cvpx.c}      | 158 ++++----
 .../opengl/{converter_sw.c => interop_sw.c}   | 195 +++++-----
 .../{converter_vaapi.c => interop_vaapi.c}    | 123 +++---
 .../{converter_vdpau.c => interop_vdpau.c}    |  60 +--
 modules/video_output/opengl/vout_helper.c     | 240 +++++++-----
 modules/video_output/opengl/vout_helper.h     |   8 +-
 modules/video_output/win32/direct3d9.c        |   2 +-
 16 files changed, 1047 insertions(+), 834 deletions(-)
 create mode 100644 modules/video_output/opengl/interop.c
 create mode 100644 modules/video_output/opengl/interop.h
 rename modules/video_output/opengl/{converter_android.c => interop_android.c} (53%)
 rename modules/video_output/opengl/{converter_cvpx.c => interop_cvpx.c} (56%)
 rename modules/video_output/opengl/{converter_sw.c => interop_sw.c} (56%)
 rename modules/video_output/opengl/{converter_vaapi.c => interop_vaapi.c} (75%)
 rename modules/video_output/opengl/{converter_vdpau.c => interop_vdpau.c} (80%)


More information about the vlc-devel mailing list