[vlc-devel] [PATCH 4/4] vgl: add option to inhibit 360 and stereo projection

Thomas Guillem thomas at gllm.fr
Tue Jul 3 17:55:00 CEST 2018


On Tue, Jul 3, 2018, at 14:38, Pierre Lamot wrote:
> ---
>  include/vlc_opengl.h                      |  1 +
>  modules/video_output/opengl/vout_helper.c | 23 ++++++++++++++++++-----
>  modules/video_output/vgl.c                |  9 +++++++++
>  3 files changed, 28 insertions(+), 5 deletions(-)
> 
> diff --git a/include/vlc_opengl.h b/include/vlc_opengl.h
> index f9329c7675..618bbcd56e 100644
> --- a/include/vlc_opengl.h
> +++ b/include/vlc_opengl.h
> @@ -82,6 +82,7 @@ struct vlc_gl_t
>              void (*destroyCb)(void *p_opaque);
>              void (*renderCb)(void *p_opaque, bool enter);
>              void *p_opaque;
> +            bool b_force_no_projection;
>          } vgl;
>      };
>  };
> diff --git a/modules/video_output/opengl/vout_helper.c b/modules/
> video_output/opengl/vout_helper.c
> index 3b8d599777..75832fc830 100644
> --- a/modules/video_output/opengl/vout_helper.c
> +++ b/modules/video_output/opengl/vout_helper.c
> @@ -271,8 +271,10 @@ static void 
> getViewpointMatrixes(vout_display_opengl_t *vgl,
>                                   video_projection_mode_t 
> projection_mode,
>                                   struct prgm *prgm)
>  {
> -    if (projection_mode == PROJECTION_MODE_EQUIRECTANGULAR
> -        || projection_mode == PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD)
> +    if ( !(vgl->gl->ext == VLC_GL_EXT_VGL && vgl->gl-
> >vgl.b_force_no_projection)
> +        && (projection_mode == PROJECTION_MODE_EQUIRECTANGULAR
> +            || projection_mode == 
> PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD
> +            ))
>      {
>          getProjectionMatrix(vgl->f_sar, vgl->f_fovy, prgm-
> >var.ProjectionMatrix);
>          getYRotMatrix(vgl->f_teta, prgm->var.YRotMatrix);
> @@ -967,7 +969,8 @@ vout_display_opengl_t 
> *vout_display_opengl_New(video_format_t *fmt,
>      vgl->pool = NULL;
>  
>      if (vgl->fmt.projection_mode != PROJECTION_MODE_RECTANGULAR
> -     && vout_display_opengl_SetViewpoint(vgl, viewpoint) != 
> VLC_SUCCESS)
> +        && !(vgl->gl->ext == VLC_GL_EXT_VGL && vgl->gl-
> >vgl.b_force_no_projection)
> +        && (vout_display_opengl_SetViewpoint(vgl, viewpoint) != 
> VLC_SUCCESS) )
>      {
>          vout_display_opengl_Delete(vgl);
>          return NULL;
> @@ -1523,7 +1526,12 @@ static int SetupCoords(vout_display_opengl_t 
> *vgl,
>      unsigned nbVertices, nbIndices;
>  
>      int i_ret;
> -    switch (vgl->fmt.projection_mode)
> +    video_projection_mode_t projection_mode =
> +        (vgl->gl->ext == VLC_GL_EXT_VGL && vgl->gl-
> >vgl.b_force_no_projection)
> +            ? PROJECTION_MODE_RECTANGULAR
> +            : vgl->fmt.projection_mode;
> +
> +    switch (projection_mode)
>      {
>      case PROJECTION_MODE_RECTANGULAR:
>          i_ret = BuildRectangle(vgl->prgm->tc->tex_count,
> @@ -1642,7 +1650,12 @@ static void 
> TextureCropForStereo(vout_display_opengl_t *vgl,
>      float stereoCoefs[2];
>      float stereoOffsets[2];
>  
> -    switch (vgl->fmt.multiview_mode)
> +    video_multiview_mode_t multiview_mode =
> +        (vgl->gl->ext == VLC_GL_EXT_VGL && vgl->gl->vgl.b_force_no_projection)
> +            ? MULTIVIEW_2D
> +            : vgl->fmt.multiview_mode;
> +
> +    switch (multiview_mode)
>      {
>      case MULTIVIEW_STEREO_TB:
>          // Display only the left eye.
> diff --git a/modules/video_output/vgl.c b/modules/video_output/vgl.c
> index 7296ec50cb..4d1e996b01 100644
> --- a/modules/video_output/vgl.c
> +++ b/modules/video_output/vgl.c
> @@ -34,6 +34,10 @@
>  static int Open(vlc_object_t *);
>  static void Close(vlc_object_t *);
>  
> +#define FORCE_NO_PROJ_TEXT N_("Disable 360 and stereo projection")
> +#define FORCE_NO_PROJ_LONGTEXT N_("Disable 360 and stereo projection")
> +
> +
>  vlc_module_begin()
>      set_shortname(N_("GL texture"))
>      set_description(N_("GL texture output"))
> @@ -43,11 +47,13 @@ vlc_module_begin()
>      set_capability("opengl", 0)
>      set_callbacks(Open, Close)
>      add_shortcut("vglmem")
> +    add_bool("vgl-force-no-projection", false, FORCE_NO_PROJ_TEXT, 
> FORCE_NO_PROJ_LONGTEXT, false)
>  
>      add_submodule ()
>      set_capability ("opengl es2", 0)
>      set_callbacks (Open, Close)
>      add_shortcut ("vglmem")
> +    add_bool("vgl-force-no-projection", false, FORCE_NO_PROJ_TEXT, 
> FORCE_NO_PROJ_LONGTEXT, false)
>  vlc_module_end()
>  
>  /
> *****************************************************************************
> @@ -103,6 +109,9 @@ static int Open(vlc_object_t *object)
>      gl->resize = NULL;
>      gl->swap = SwapBuffers;
>      gl->getProcAddress = OurGetProcAddress;
> +
> +    gl->vgl.b_force_no_projection =  var_InheritBool(gl, "vgl-force-no-
> projection");
> +

I think this option should be also settable from libvlc, via libvlc_video_set_opengl_callbacks(). No ?

>      return VLC_SUCCESS;
>  
>  error:
> -- 
> 2.17.1
> 
> _______________________________________________
> 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