[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