[vlc-devel] [PATCH 05/27] opengl: store video format in sampler

Romain Vimont rom1v at videolabs.io
Mon Jun 29 16:05:23 CEST 2020


On Mon, Jun 29, 2020 at 03:49:36PM +0200, Alexandre Janniaux wrote:
> Hi,
> 
> On Thu, Jun 25, 2020 at 02:22:52PM +0200, Romain Vimont wrote:
> > The sampler just referenced the interop format.
> >
> > In order to support samplers without interop (when the input picture
> > comes from a previous OpenGL filter), store the input format in the
> > sampler.
> > ---
> >  modules/video_output/opengl/renderer.c | 14 +++++++-------
> >  modules/video_output/opengl/sampler.c  |  4 +++-
> >  modules/video_output/opengl/sampler.h  |  2 +-
> >  3 files changed, 11 insertions(+), 9 deletions(-)
> >
> > diff --git a/modules/video_output/opengl/renderer.c b/modules/video_output/opengl/renderer.c
> > index aef1fb1234..2d8cf56e29 100644
> > --- a/modules/video_output/opengl/renderer.c
> > +++ b/modules/video_output/opengl/renderer.c
> > @@ -208,7 +208,7 @@ BuildVertexShader(struct vlc_gl_filter *filter)
> >
> >      if (renderer->dump_shaders)
> >          msg_Dbg(filter, "\n=== Vertex shader for fourcc: %4.4s ===\n%s\n",
> > -                (const char *) &renderer->sampler->fmt->i_chroma, code);
> > +                (const char *) &renderer->sampler->fmt.i_chroma, code);
> >      return code;
> >  }
> >
> > @@ -238,8 +238,8 @@ BuildFragmentShader(struct vlc_gl_filter *filter)
> >
> >      if (renderer->dump_shaders)
> >          msg_Dbg(filter, "\n=== Fragment shader for fourcc: %4.4s, colorspace: %d ===\n%s\n",
> > -                        (const char *) &sampler->fmt->i_chroma,
> > -                        sampler->fmt->space, code);
> > +                        (const char *) &sampler->fmt.i_chroma,
> > +                        sampler->fmt.space, code);
> >
> >      return code;
> >  }
> > @@ -338,7 +338,7 @@ vlc_gl_renderer_Open(struct vlc_gl_filter *filter,
> >      (void) config;
> >
> >      const opengl_vtable_t *vt = &filter->api->vt;
> > -    const video_format_t *fmt = sampler->fmt;
> > +    const video_format_t *fmt = &sampler->fmt;
> >
> >      struct vlc_gl_renderer *renderer = calloc(1, sizeof(*renderer));
> >      if (!renderer)
> > @@ -439,7 +439,7 @@ vlc_gl_renderer_SetViewpoint(struct vlc_gl_renderer *renderer,
> >          UpdateFOVy(renderer);
> >          UpdateZ(renderer);
> >      }
> > -    const video_format_t *fmt = renderer->sampler->fmt;
> > +    const video_format_t *fmt = &renderer->sampler->fmt;
> >      getViewpointMatrixes(renderer, fmt->projection_mode);
> >
> >      return VLC_SUCCESS;
> > @@ -456,7 +456,7 @@ vlc_gl_renderer_SetWindowAspectRatio(struct vlc_gl_renderer *renderer,
> >      UpdateFOVy(renderer);
> >      UpdateZ(renderer);
> >
> > -    const video_format_t *fmt = renderer->sampler->fmt;
> > +    const video_format_t *fmt = &renderer->sampler->fmt;
> >      getViewpointMatrixes(renderer, fmt->projection_mode);
> >  }
> >
> > @@ -701,7 +701,7 @@ static int BuildRectangle(GLfloat **vertexCoord, GLfloat **textureCoord, unsigne
> >  static int SetupCoords(struct vlc_gl_renderer *renderer)
> >  {
> >      const opengl_vtable_t *vt = renderer->vt;
> > -    const video_format_t *fmt = renderer->sampler->fmt;
> > +    const video_format_t *fmt = &renderer->sampler->fmt;
> >
> >      GLfloat *vertexCoord, *textureCoord;
> >      GLushort *indices;
> > diff --git a/modules/video_output/opengl/sampler.c b/modules/video_output/opengl/sampler.c
> > index 4cfeada6ba..0b58ffb0f6 100644
> > --- a/modules/video_output/opengl/sampler.c
> > +++ b/modules/video_output/opengl/sampler.c
> > @@ -953,7 +953,9 @@ vlc_gl_sampler_New(struct vlc_gl_interop *interop)
> >      priv->gl = interop->gl;
> >      priv->vt = interop->vt;
> >
> > -    sampler->fmt = &interop->fmt_out;
> > +    sampler->fmt = interop->fmt_out;
> 
> This doesn't look like a correct video_format copy.

The line below, I set p_palette to NULL because we don't use it. But
yes, it's hacky.

It was to avoid video_format_Copy() (which imposes error handling).

> 
> > +    /* this is the only allocated field, and we don't need it */
> > +    sampler->fmt.p_palette = NULL;
> >
> >      sampler->shader.extensions = NULL;
> >      sampler->shader.body = NULL;
> > diff --git a/modules/video_output/opengl/sampler.h b/modules/video_output/opengl/sampler.h
> > index b8439b004b..c3ddfd7204 100644
> > --- a/modules/video_output/opengl/sampler.h
> > +++ b/modules/video_output/opengl/sampler.h
> > @@ -51,7 +51,7 @@
> >   */
> >  struct vlc_gl_sampler {
> >      /* Input format */
> > -    const video_format_t *fmt;
> > +    video_format_t fmt;
> >
> >      struct {
> >          /**
> > --
> > 2.27.0
> >
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> 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