[vlc-devel] [PATCH 00/27] Add support for OpenGL filters

Alexandre Janniaux ajanni at videolabs.io
Thu Jun 25 18:01:24 CEST 2020


Hi,

As I mentionned privately, the current state of opengl
implementation is not compatible with how the filters are
implemented since it requires the filter to link to OpenGL/ES
framework on MacOSX/iOS, which this patchset does not.

I'm removing this requirement, but in the mean time you could
just add the required framework in the filters' LDFLAGS.

Regards,
--
Alexandre Janniaux
Videolabs

On Thu, Jun 25, 2020 at 02:22:47PM +0200, Romain Vimont wrote:
> Add an API to execute OpenGL filters (loaded as VLC modules) in the OpenGL
> vout (for now).
>
> There are two types of filters:
>  - blend filters just draw over the provided framebuffer (containing the result
>    of the previous filter), without reading the input picture.
>  - non-blend filters read their input picture and draw whatever they want to
>    their own output framebuffer.
>
> For example, a blend filter could be used to add a logo over the video, while
> a non-blend filter could be used to deform the video.
>
> This patchset adds several samples in doc/. To build and run them, see
> doc/opengl_filters/README.md (patch "doc: prepare opengl filters samples").
>
> In short:
>
>     # build
>     cd builddir
>     ../configure --enable-opengl-filters-samples
>     make  # build VLC as usual
>
>     # run
>     export VLC_PLUGIN_PATH=modules:doc
>     ./vlc file.mkv --gl-filters=filter1:filter2:filter3
>
> Four samples are provided to illustrate how the API works:
>  - triangle: a blend filter drawing a triangle over the video
>  - triangle_rotate: the same, but with a parameter to provide a rotation angle
>  - triangle_clock: a triangle rotating according to the video timestamps
>  - triangle_mask: a non-blend filter drawing the video in a triangle
>
> You could for example test the following:
>
>     export VLC_PLUGIN_PATH=modules:doc
>     ./vlc file.mkv --gl-filters='triangle_clock:triangle_mask:triangle_rotate{angle=20}'
>
> (sorry for your eyes)
>
> This feature has been co-authored by Alexandre Janniaux.
>
> MR: https://code.videolan.org/rom1v/vlc/-/merge_requests/12
>
> Romain Vimont (27):
>   opengl: introduce OpenGL filter API
>   opengl: add filter private part
>   opengl: add filters chain
>   opengl: use modules for OpenGL filters
>   opengl: store video format in sampler
>   opengl: add "direct" sampler
>   opengl: attach samplers to filters
>   opengl: load filters from command-line arguments
>   opengl: pass output size to filters
>   opengl: add support for renderbuffers API
>   opengl: create and bind filters framebuffers
>   opengl: use default draw framebuffer
>   opengl: add "draw" filter
>   opengl: support "blend" filters
>   opengl: lazy-load sampler
>   opengl: apply viewport on filters
>   opengl: pass picture PTS to filters
>   opengl: add support for renderbuffers API
>   opengl: init filters framebuffers in a second pass
>   opengl: enable multisampling
>   opengl: document filters implementation
>   modules: use VLC_PLUGIN_PATH if it exists
>   doc: prepare opengl filters samples
>   doc: opengl filter: add triangle sample
>   doc: opengl filter: add triangle_mask sample
>   doc: opengl filter: add triangle_rotate sample
>   doc: opengl filter: add triangle_clock sample
>
>  Makefile.am                                |   2 +-
>  bin/vlc.c                                  |   2 +-
>  configure.ac                               |   7 +
>  doc/Makefile.am                            |   2 +-
>  doc/opengl_filters/Makefile.am             |  53 ++
>  doc/opengl_filters/README.md               |  22 +
>  doc/opengl_filters/triangle.c              | 197 ++++++++
>  doc/opengl_filters/triangle_clock.c        | 221 +++++++++
>  doc/opengl_filters/triangle_mask.c         | 190 +++++++
>  doc/opengl_filters/triangle_rotate.c       | 237 +++++++++
>  modules/video_output/caopengllayer.m       |  11 +-
>  modules/video_output/ios.m                 |  14 +-
>  modules/video_output/macosx.m              |  11 +-
>  modules/video_output/opengl/Makefile.am    |   7 +
>  modules/video_output/opengl/display.c      |  14 +-
>  modules/video_output/opengl/filter.c       | 128 +++++
>  modules/video_output/opengl/filter.h       | 115 +++++
>  modules/video_output/opengl/filter_draw.c  | 181 +++++++
>  modules/video_output/opengl/filter_draw.h  |  36 ++
>  modules/video_output/opengl/filter_priv.h  |  83 ++++
>  modules/video_output/opengl/filters.c      | 546 +++++++++++++++++++++
>  modules/video_output/opengl/filters.h      | 109 ++++
>  modules/video_output/opengl/gl_api.c       |  27 +
>  modules/video_output/opengl/gl_api.h       |   3 +
>  modules/video_output/opengl/gl_common.h    |  27 +
>  modules/video_output/opengl/renderer.c     |  95 ++--
>  modules/video_output/opengl/renderer.h     |  38 +-
>  modules/video_output/opengl/sampler.c      | 108 +++-
>  modules/video_output/opengl/sampler.h      |   2 +-
>  modules/video_output/opengl/sampler_priv.h |  41 +-
>  modules/video_output/opengl/vout_helper.c  | 110 ++++-
>  modules/video_output/opengl/vout_helper.h  |   6 +-
>  modules/video_output/win32/glwin32.c       |  11 +-
>  33 files changed, 2547 insertions(+), 109 deletions(-)
>  create mode 100644 doc/opengl_filters/Makefile.am
>  create mode 100644 doc/opengl_filters/README.md
>  create mode 100644 doc/opengl_filters/triangle.c
>  create mode 100644 doc/opengl_filters/triangle_clock.c
>  create mode 100644 doc/opengl_filters/triangle_mask.c
>  create mode 100644 doc/opengl_filters/triangle_rotate.c
>  create mode 100644 modules/video_output/opengl/filter.c
>  create mode 100644 modules/video_output/opengl/filter.h
>  create mode 100644 modules/video_output/opengl/filter_draw.c
>  create mode 100644 modules/video_output/opengl/filter_draw.h
>  create mode 100644 modules/video_output/opengl/filter_priv.h
>  create mode 100644 modules/video_output/opengl/filters.c
>  create mode 100644 modules/video_output/opengl/filters.h
>
> --
> 2.27.0
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list