[vlc-commits] va: use operations structure

Rémi Denis-Courmont git at videolan.org
Fri Jul 19 18:33:03 CEST 2019


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:



More information about the vlc-commits mailing list