[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