[vlc-devel] [PATCH 5/5] opengl: accept vout format update

Steve Lhomme robux4 at ycbcr.xyz
Tue Oct 20 16:13:30 CEST 2020


On 2020-10-20 14:32, Romain Vimont wrote:
> diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c
> index 2f7429fc71..82261ebeef 100644
> --- a/modules/video_output/opengl/vout_helper.c
> +++ b/modules/video_output/opengl/vout_helper.c
> @@ -270,6 +270,51 @@ free_vgl:
>       return NULL;
>   }
>   
> +int vout_display_opengl_UpdateFormat(vout_display_opengl_t *vgl,
> +                                     video_format_t *fmt,
> +                                     vlc_video_context *ctx)
> +{
> +    /* If the format can't be changed, the state must stay valid to accept the
> +     * initial format. */
> +
> +    vlc_gl_t *gl = vgl->gl;
> +    const struct vlc_gl_api *api = &vgl->api;
> +
> +    struct vlc_gl_interop *interop = CreateInterop(gl, api, ctx, fmt);
> +    if (!interop)
> +        return VLC_EGENERIC;
> +
> +    struct vlc_gl_renderer *renderer;
> +    struct vlc_gl_filters *filters = CreateFilters(gl, api, interop, &renderer);
> +    if (!filters)
> +    {
> +        vlc_gl_interop_Delete(interop);
> +        return VLC_EGENERIC;
> +    }
> +
> +    /* re-assign the state to the new filters and renderer instances */
> +    vlc_gl_filters_SetViewport(filters, vgl->memory.viewport.x,
> +                                        vgl->memory.viewport.y,
> +                                        vgl->memory.viewport.width,
> +                                        vgl->memory.viewport.height);

Shouldn't you recompute the viewport position rather than using the 
position for the old picture ?

> +
> +    vlc_gl_renderer_SetWindowAspectRatio(renderer,
> +                                         vgl->memory.window_aspect_ratio);
> +
> +    vlc_gl_renderer_SetViewpoint(renderer, &vgl->memory.viewpoint);
> +
> +    /* We created everything necessary, it worked, now the old ones could be
> +     * replaced. */
> +    vlc_gl_filters_Delete(vgl->filters);
> +    vlc_gl_interop_Delete(vgl->interop);

vgl->renderer doesn't need to be released ?

> +
> +    vgl->interop = interop;
> +    vgl->filters = filters;
> +    vgl->renderer = renderer;
> +
> +    return VLC_SUCCESS;
> +}
> +
>   void vout_display_opengl_Delete(vout_display_opengl_t *vgl)
>   {
>       const opengl_vtable_t *vt = &vgl->api.vt;


More information about the vlc-devel mailing list