Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
404 results
Show changes
Commits on Source (3)
  • Alexandre Janniaux's avatar
    video_filter: opengl: use correct OpenGL flavour · dac685b7
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    Use the correct OpenGL flavour (GLES or OpenGL) at runtime by providing
    both capabilities, fixing the usage of OpenGL filters through GLES2 on
    Linux where both are supported.
    
    The filter only has a single implementation, but will probe both OpenGL
    and OpenGL ES2 by default. It can be restricted to a specific flavour by
    enforcing a gl module to `any` or any specific implementation. Eg.
    
        --video-filter=opengl{filter=mock,gles=any}
        --video-filter=opengl{filter=mock,gl=any}
        --video-filter=opengl{filter=mock,gl=any,gles=foo}
    
    OpenGL is favoured when probing since it provides much more
    functionality and performance optimization opportunities that its
    embedded counterpart. However, when USE_OPENGL_ES2 is defined, it means
    that OpenGL headers were not available. In this case, it's highly likely
    that OpenGL is **not** available at all and we only probe OpenGL ES
    instead.
    
    There are guenuine reasons why it could fail on OpenGL but not on
    OpenGL ES, like the presence of an extension like the support for
    GL_OES_EGL_image_external or the non-support of anything else but
    OpenGL ES with a given version.
    dac685b7
  • Alexandre Janniaux's avatar
    egl_pbuffer allow both OpenGL and GLES2 · dd10f6ba
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    Provide both the OpenGL offscreen implementation and the GLES2 offscreen
    implementation from the same module, since it's the same code.
    
    There is no need to differentiate the name between any of the two
    modules, just like we don't need for EGL, because they have distinct
    capabilities and are referred by separate objects anyway (--opengl-gl
    versus --opengl-gles).
    dd10f6ba
  • Alexandre Janniaux's avatar
    egl_pbuffer: generalize and simplify client_version handling · 4d100f60
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    We can support GL ES3 even if the capability name doesn't reflect that,
    since it's mostly a "at least GLES 2". By doing so, we can simplify the
    checks on the EGL client version.
    4d100f60
......@@ -109,7 +109,19 @@ static void *GetSymbol(vlc_gl_t *gl, const char *procname)
return (void *)eglGetProcAddress (procname);
}
static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height)
static EGLContext CreateContext(vlc_gl_t *gl, EGLConfig cfg, EGLint client_version)
{
struct vlc_gl_pbuffer *sys = gl->sys;
const EGLint ctx_attr[] = {
EGL_CONTEXT_CLIENT_VERSION, client_version,
EGL_NONE
};
return eglCreateContext(sys->display, cfg, EGL_NO_CONTEXT, ctx_attr);
}
static int InitEGL(vlc_gl_t *gl, int opengl_api, unsigned width, unsigned height)
{
struct vlc_gl_pbuffer *sys = gl->sys;
......@@ -130,36 +142,24 @@ static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height)
msg_Dbg(gl, "EGL version %s by %s, API %s",
eglQueryString(sys->display, EGL_VERSION),
eglQueryString(sys->display, EGL_VENDOR),
#ifdef USE_OPENGL_ES2
"OpenGL ES2"
#else
"OpenGL"
#endif
);
opengl_api == VLC_OPENGL ? "OpenGL" : "OpenGL ES2");
const char *extensions = eglQueryString(sys->display, EGL_EXTENSIONS);
bool need_surface =
!vlc_gl_StrHasToken(extensions, "EGL_KHR_surfaceless_context");
static const EGLint conf_attr_surface[] = {
EGLint renderable_type = opengl_api == VLC_OPENGL ? EGL_OPENGL_BIT : EGL_OPENGL_ES2_BIT;
const EGLint conf_attr_surface[] = {
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
#ifdef USE_OPENGL_ES2
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
#else
EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
#endif
EGL_RENDERABLE_TYPE, renderable_type,
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_NONE,
};
static const EGLint conf_attr_surfaceless[] = {
#ifdef USE_OPENGL_ES2
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
#else
EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
#endif
const EGLint conf_attr_surfaceless[] = {
EGL_RENDERABLE_TYPE, renderable_type,
EGL_NONE,
};
......@@ -198,59 +198,31 @@ static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height)
else
sys->surface = EGL_NO_SURFACE;
#ifdef USE_OPENGL_ES2
if (eglBindAPI (EGL_OPENGL_ES_API) != EGL_TRUE)
{
msg_Err (gl, "cannot bind EGL OPENGL ES API");
goto error;
}
EGLint egl_api;
if (opengl_api == VLC_OPENGL_ES2)
egl_api = EGL_OPENGL_ES_API;
else
egl_api = EGL_OPENGL_API;
const GLint ctx_attr[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
#else
if (eglBindAPI (EGL_OPENGL_API) != EGL_TRUE)
if (eglBindAPI(egl_api) != EGL_TRUE)
{
msg_Err (gl, "cannot bind EGL OPENGL API");
goto error;
}
const GLint ctx_attr[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
#endif
EGLContext ctx
= sys->context
= eglCreateContext(sys->display, cfgv[0], EGL_NO_CONTEXT, ctx_attr);
EGLContext ctx = CreateContext(gl, cfgv[0], 3);
if (ctx != EGL_NO_CONTEXT)
goto context_created;
#ifdef USE_OPENGL_ES2
if (ctx == EGL_NO_CONTEXT)
{
msg_Err (gl, "cannot create EGL context");
goto error;
}
#else
if (ctx == EGL_NO_CONTEXT)
{
const GLint ctx_attr_fallback[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
ctx = CreateContext(gl, cfgv[0], 2);
if (ctx != EGL_NO_CONTEXT)
goto context_created;
ctx
= sys->context
= eglCreateContext(sys->display, cfgv[0], EGL_NO_CONTEXT, ctx_attr_fallback);
msg_Err (gl, "cannot create EGL context");
goto error;
if (ctx == EGL_NO_CONTEXT)
{
msg_Err (gl, "cannot create EGL context");
goto error;
}
}
#endif
context_created:
sys->context = ctx;
return VLC_SUCCESS;
error:
......@@ -422,7 +394,7 @@ static int Open(vlc_gl_t *gl, unsigned width, unsigned height,
gl->sys = sys;
if (InitEGL(gl, width, height) != VLC_SUCCESS)
if (InitEGL(gl, gl->api_type, width, height) != VLC_SUCCESS)
{
msg_Err(gl, "Failed to create opengl context\n");
goto error1;
......@@ -495,12 +467,11 @@ error1:
}
vlc_module_begin()
add_shortcut( "egl_pbuffer" )
set_shortname( N_("egl_pbuffer") )
set_description( N_("EGL PBuffer offscreen opengl provider") )
#ifdef USE_OPENGL_ES2
set_callback_opengl_es2_offscreen( Open, 1 )
#else
set_callback_opengl_offscreen( Open, 1 )
#endif
add_shortcut( "egl_pbuffer" )
add_submodule()
set_callback_opengl_es2_offscreen( Open, 1 )
vlc_module_end()
......@@ -38,7 +38,7 @@
#include "../video_output/opengl/interop.h"
#define OPENGL_CFG_PREFIX "opengl-"
static const char *const opengl_options[] = { "filter", NULL };
static const char *const opengl_options[] = { "filter", "gl", "gles", NULL };
typedef struct
{
......@@ -162,7 +162,68 @@ static void Close( filter_t *filter )
}
}
static int Open( vlc_object_t *obj )
static vlc_gl_t *CreateGL(vlc_object_t *obj, struct vlc_decoder_device *device,
unsigned width, unsigned height)
{
#ifdef USE_OPENGL_ES2
char *opengles_name = var_InheritString(obj, "opengl-gles");
vlc_gl_t *gl = vlc_gl_CreateOffscreen(obj, device, width, height,
VLC_OPENGL_ES2, opengles_name, NULL);
free(opengles_name);
return gl;
#else
vlc_gl_t *gl = NULL;
char *opengl_name = var_InheritString(obj, "opengl-gl");
char *opengles_name = var_InheritString(obj, "opengl-gles");
const char *gl_module = opengl_name;
const char *gles_module = opengles_name;
if (EMPTY_STR(gl_module))
{
if (EMPTY_STR(opengles_name) || strcmp(opengles_name, "none") == 0)
{
gl_module = "any";
}
else
{
gl_module = NULL;
}
}
if (EMPTY_STR(gles_module))
{
if (EMPTY_STR(opengl_name) || strcmp(opengl_name, "none") == 0)
{
gles_module = "any";
}
else
{
gles_module = NULL;
}
}
if (opengl_name == NULL)
opengl_name = strdup("");
if (gl_module != NULL)
gl = vlc_gl_CreateOffscreen(obj, device, width, height,
VLC_OPENGL, gl_module, NULL);
if (gl != NULL)
goto end;
if (gles_module != NULL)
gl = vlc_gl_CreateOffscreen(obj, device, width, height,
VLC_OPENGL_ES2, opengles_name, NULL);
end:
free(opengl_name);
free(opengles_name);
return gl;
#endif
}
static int OpenOpenGL(vlc_object_t *obj)
{
filter_t *filter = (filter_t *)obj;
......@@ -172,19 +233,14 @@ static int Open( vlc_object_t *obj )
if (sys == NULL)
return VLC_ENOMEM;
config_ChainParse(filter, OPENGL_CFG_PREFIX, opengl_options, filter->p_cfg);
unsigned width = filter->fmt_out.video.i_visible_width;
unsigned height = filter->fmt_out.video.i_visible_height;
// TODO: other than BGRA format ?
#ifdef USE_OPENGL_ES2
# define VLCGLAPI VLC_OPENGL_ES2
#else
# define VLCGLAPI VLC_OPENGL
#endif
struct vlc_decoder_device *device = filter_HoldDecoderDevice(filter);
sys->gl = vlc_gl_CreateOffscreen(obj, device, width, height, VLCGLAPI,
NULL, NULL);
sys->gl = CreateGL(obj, device, width, height);
/* The vlc_gl_t instance must have hold the device if it needs it. */
if (device)
......@@ -218,8 +274,6 @@ static int Open( vlc_object_t *obj )
goto gl_interop_failure;
}
config_ChainParse(filter, OPENGL_CFG_PREFIX, opengl_options, filter->p_cfg);
char *glfilters_config =
var_InheritString(filter, OPENGL_CFG_PREFIX "filter");
if (!glfilters_config)
......@@ -311,9 +365,13 @@ vlc_module_begin()
set_shortname( N_("opengl") )
set_description( N_("Opengl filter executor") )
set_subcategory( SUBCAT_VIDEO_VFILTER )
set_capability( "video filter", 0 )
set_capability( "video filter", 1 )
add_shortcut( "opengl" )
set_callback( Open )
set_callback( OpenOpenGL )
add_module_list( "opengl-filter", "opengl filter", NULL,
FILTER_LIST_TEXT, FILTER_LIST_LONGTEXT )
add_module( "opengl-gl", "opengl offscreen", "", "OpenGL provider",
"OpenGL provider to execute the filters with" )
add_module("opengl-gles", "opengl es2 offscreen", "", "OpenGL ES2 provider",
"OpenGL ES2 provider to execute the filters with")
vlc_module_end()