[vlc-devel] [vlc-commits] va: use operations structure

Steve Lhomme robux4 at ycbcr.xyz
Mon Jul 22 06:42:25 CEST 2019


These "operations" structures should have setters. So when they evolve 
(adding fields) the code has to evolve accordingly.

On 2019-07-19 18:33, Rémi Denis-Courmont wrote:
> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Jul 19 19:32:33 2019 +0300| [bbbdc5ca6cf8f95d6b8f80ebc6d41907fdee45cb] | committer: Rémi Denis-Courmont
> 
> va: use operations structure
> 
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bbbdc5ca6cf8f95d6b8f80ebc6d41907fdee45cb
> ---
> 
>   modules/codec/avcodec/d3d11va.c |  6 +++---
>   modules/codec/avcodec/dxva2.c   |  5 +++--
>   modules/codec/avcodec/va.c      |  4 ++--
>   modules/codec/avcodec/va.h      | 10 +++++++---
>   modules/codec/avcodec/vaapi.c   |  5 +++--
>   modules/hw/vdpau/avcodec.c      |  5 +++--
>   6 files changed, 21 insertions(+), 14 deletions(-)
> 
> diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
> index 6823b8d2fb..90f5a00d19 100644
> --- a/modules/codec/avcodec/d3d11va.c
> +++ b/modules/codec/avcodec/d3d11va.c
> @@ -308,6 +308,8 @@ static void Close(vlc_va_t *va, void **ctx)
>       free(sys);
>   }
>   
> +static const struct vlc_va_operations ops = { Get, Close, };
> +
>   static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>                   const es_format_t *fmt, picture_sys_d3d11_t *p_sys)
>   {
> @@ -409,9 +411,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>   
>       ctx->hwaccel_context = &sys->hw;
>   
> -    va->get = Get;
> -    va->close = Close;
> -
> +    va->ops = &ops;
>       return VLC_SUCCESS;
>   
>   error:
> diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
> index ca45421d3c..596538d0f3 100644
> --- a/modules/codec/avcodec/dxva2.c
> +++ b/modules/codec/avcodec/dxva2.c
> @@ -253,6 +253,8 @@ static void Close(vlc_va_t *va, void **ctx)
>       free(sys);
>   }
>   
> +static const struct vlc_va_operations ops = { Get, Close, };
> +
>   static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>                   const es_format_t *fmt, picture_sys_d3d9_t *p_sys)
>   {
> @@ -337,8 +339,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>   
>       ctx->hwaccel_context = &sys->hw;
>   
> -    va->get = Get;
> -    va->close = Close;
> +    va->ops = &ops;
>       return VLC_SUCCESS;
>   
>   error:
> diff --git a/modules/codec/avcodec/va.c b/modules/codec/avcodec/va.c
> index 545699e870..d491fed0e9 100644
> --- a/modules/codec/avcodec/va.c
> +++ b/modules/codec/avcodec/va.c
> @@ -125,7 +125,7 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *avctx,
>   
>   void vlc_va_Delete(vlc_va_t *va, void **hwctx)
>   {
> -    if (va->close != NULL)
> -        va->close(va, hwctx);
> +    if (va->ops->close != NULL)
> +        va->ops->close(va, hwctx);
>       vlc_object_delete(va);
>   }
> diff --git a/modules/codec/avcodec/va.h b/modules/codec/avcodec/va.h
> index 5ef2df1307..aeab69b34b 100644
> --- a/modules/codec/avcodec/va.h
> +++ b/modules/codec/avcodec/va.h
> @@ -28,12 +28,16 @@
>   typedef struct vlc_va_t vlc_va_t;
>   typedef struct vlc_va_sys_t vlc_va_sys_t;
>   
> +struct vlc_va_operations {
> +    int (*get)(vlc_va_t *, picture_t *pic, uint8_t **surface);
> +    void (*close)(vlc_va_t *, void **hwctx);
> +};
> +
>   struct vlc_va_t {
>       struct vlc_object_t obj;
>   
>       vlc_va_sys_t *sys;
> -    int (*get)(vlc_va_t *, picture_t *pic, uint8_t **surface);
> -    void (*close)(vlc_va_t *, void **hwctx);
> +    const struct vlc_va_operations *ops;
>   };
>   
>   /**
> @@ -75,7 +79,7 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *,
>    */
>   static inline int vlc_va_Get(vlc_va_t *va, picture_t *pic, uint8_t **surface)
>   {
> -    return va->get(va, pic, surface);
> +    return va->ops->get(va, pic, surface);
>   }
>   
>   /**
> diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c
> index 948916d046..4ed67677d5 100644
> --- a/modules/codec/avcodec/vaapi.c
> +++ b/modules/codec/avcodec/vaapi.c
> @@ -145,6 +145,8 @@ static void Delete(vlc_va_t *va, void **hwctx)
>       free(sys);
>   }
>   
> +static const struct vlc_va_operations ops = { Get, Delete, };
> +
>   static int Create(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>                     const es_format_t *fmt, void *p_sys)
>   {
> @@ -201,8 +203,7 @@ static int Create(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>   
>       ctx->hwaccel_context = &sys->hw_ctx;
>       va->sys = sys;
> -    va->get = Get;
> -    va->close = Delete;
> +    va->ops = &ops;
>       return VLC_SUCCESS;
>   
>   error:
> diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
> index 92fe0a65f6..c1d5d79cea 100644
> --- a/modules/hw/vdpau/avcodec.c
> +++ b/modules/hw/vdpau/avcodec.c
> @@ -128,6 +128,8 @@ static void Close(vlc_va_t *va, void **hwctx)
>       free(sys);
>   }
>   
> +static const struct vlc_va_operations ops = { Lock, Close, };
> +
>   static int Open(vlc_va_t *va, AVCodecContext *avctx, enum PixelFormat pix_fmt,
>                   const es_format_t *fmt, void *p_sys)
>   {
> @@ -215,8 +217,7 @@ static int Open(vlc_va_t *va, AVCodecContext *avctx, enum PixelFormat pix_fmt,
>       if (vdp_get_information_string(sys->vdp, &infos) == VDP_STATUS_OK)
>           msg_Info(va, "Using %s", infos);
>   
> -    va->get = Lock;
> -    va->close = Close;
> +    va->ops = &ops;
>       return VLC_SUCCESS;
>   
>   error:
> 
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits
> 


More information about the vlc-devel mailing list