[vlc-devel] [RFC 2/2] avcodec: va: don't pass the hwaccel_context on module delete

Steve Lhomme robux4 at ycbcr.xyz
Thu Dec 20 10:29:21 CET 2018


---
 modules/codec/avcodec/d3d11va.c | 8 +++-----
 modules/codec/avcodec/dxva2.c   | 8 +++-----
 modules/codec/avcodec/va.c      | 9 ++++-----
 modules/codec/avcodec/va.h      | 2 +-
 modules/codec/avcodec/vaapi.c   | 7 ++-----
 modules/codec/avcodec/video.c   | 6 ++----
 modules/hw/vdpau/avcodec.c      | 4 +---
 7 files changed, 16 insertions(+), 28 deletions(-)

diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index 1f982ad7e3..59896cbaa3 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -57,7 +57,7 @@
 
 static int Open(vlc_va_t *, AVCodecContext *, enum PixelFormat,
                 const es_format_t *, picture_sys_t *p_sys);
-static void Close(vlc_va_t *, void **);
+static void Close(vlc_va_t *);
 
 vlc_module_begin()
     set_description(N_("Direct3D11 Video Acceleration"))
@@ -294,12 +294,10 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     return VLC_SUCCESS;
 }
 
-static void Close(vlc_va_t *va, void **ctx)
+static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    (void) ctx;
-
     directx_va_Close(va, &sys->dx_sys);
 
     D3D11_Destroy( &sys->hd3d );
@@ -404,7 +402,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
     return VLC_SUCCESS;
 
 error:
-    Close(va, NULL);
+    Close(va);
     return err;
 }
 
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 9569990841..f20a97e278 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -45,7 +45,7 @@
 
 static int Open(vlc_va_t *, AVCodecContext *, enum PixelFormat,
                 const es_format_t *, picture_sys_t *p_sys);
-static void Close(vlc_va_t *, void **);
+static void Close(vlc_va_t *);
 
 vlc_module_begin()
     set_description(N_("DirectX Video Acceleration (DXVA) 2.0"))
@@ -237,14 +237,12 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     return res;
 }
 
-static void Close(vlc_va_t *va, void **ctx)
+static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
     if ( sys == NULL )
         return;
 
-    (void) ctx;
-
     directx_va_Close(va, &sys->dx_sys);
 
     if (sys->dxva2_dll)
@@ -337,7 +335,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
     return VLC_SUCCESS;
 
 error:
-    Close(va, NULL);
+    Close(va);
     return VLC_EGENERIC;
 }
 /* */
diff --git a/modules/codec/avcodec/va.c b/modules/codec/avcodec/va.c
index ecf4e8aa14..0a7a12c4b7 100644
--- a/modules/codec/avcodec/va.c
+++ b/modules/codec/avcodec/va.c
@@ -104,10 +104,9 @@ static int vlc_va_Start(void *func, va_list ap)
 static void vlc_va_Stop(void *func, va_list ap)
 {
     vlc_va_t *va = va_arg(ap, vlc_va_t *);
-    void *hwctx = va_arg(ap, void *);
-    void (*close)(vlc_va_t *, void *) = func;
+    void (*close)(vlc_va_t *) = func;
 
-    close(va, hwctx);
+    close(va);
 }
 
 vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *avctx,
@@ -131,8 +130,8 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *avctx,
     return va;
 }
 
-void vlc_va_Delete(vlc_va_t *va, void **hwctx)
+void vlc_va_Delete(vlc_va_t *va)
 {
-    vlc_module_unload(va, va->module, vlc_va_Stop, va, hwctx);
+    vlc_module_unload(va, va->module, vlc_va_Stop, va);
     vlc_object_release(va);
 }
diff --git a/modules/codec/avcodec/va.h b/modules/codec/avcodec/va.h
index 178047ad16..955e216cd8 100644
--- a/modules/codec/avcodec/va.h
+++ b/modules/codec/avcodec/va.h
@@ -79,6 +79,6 @@ static inline int vlc_va_Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
  * Destroys a libavcodec hardware acceleration back-end.
  * All allocated surfaces shall have been released beforehand.
  */
-void vlc_va_Delete(vlc_va_t *, void **);
+void vlc_va_Delete(vlc_va_t *);
 
 #endif
diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c
index d8fafed094..e7a9e4fd6b 100644
--- a/modules/codec/avcodec/vaapi.c
+++ b/modules/codec/avcodec/vaapi.c
@@ -138,13 +138,11 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     return VLC_SUCCESS;
 }
 
-static void Delete(vlc_va_t *va, void *hwctx)
+static void Delete(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
     vlc_object_t *o = VLC_OBJECT(va);
 
-    (void) hwctx;
-
     vlc_vaapi_DestroyContext(o, sys->hw_ctx.display, sys->hw_ctx.context_id);
     vlc_vaapi_DestroyConfig(o, sys->hw_ctx.display, sys->hw_ctx.config_id);
     vlc_vaapi_ReleaseInstance(sys->va_inst);
@@ -247,12 +245,11 @@ static int GetDRM(vlc_va_t *va, picture_t *pic, uint8_t **data)
     return VLC_SUCCESS;
 }
 
-static void DeleteDRM(vlc_va_t *va, void **hwctx)
+static void DeleteDRM(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
     vlc_object_t *o = VLC_OBJECT(va);
 
-    (void) hwctx;
     picture_pool_Release(sys->pool);
     vlc_vaapi_DestroyContext(o, sys->hw_ctx.display, sys->hw_ctx.context_id);
     vlc_vaapi_DestroyConfig(o, sys->hw_ctx.display, sys->hw_ctx.config_id);
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 9e83695e73..0866591d85 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -1360,7 +1360,6 @@ void EndVideoDec( vlc_object_t *obj )
     decoder_t *p_dec = (decoder_t *)obj;
     decoder_sys_t *p_sys = p_dec->p_sys;
     AVCodecContext *ctx = p_sys->p_context;
-    void *hwaccel_context;
 
     post_mt( p_sys );
 
@@ -1372,11 +1371,10 @@ void EndVideoDec( vlc_object_t *obj )
 
     cc_Flush( &p_sys->cc );
 
-    hwaccel_context = ctx->hwaccel_context;
     avcodec_free_context( &ctx );
 
     if( p_sys->p_va )
-        vlc_va_Delete( p_sys->p_va, &hwaccel_context );
+        vlc_va_Delete( p_sys->p_va );
 
     vlc_sem_destroy( &p_sys->sem_mt );
     free( p_sys );
@@ -1667,7 +1665,7 @@ no_reuse:
     if (p_sys->p_va != NULL)
     {
         msg_Err(p_dec, "existing hardware acceleration cannot be reused");
-        vlc_va_Delete(p_sys->p_va, &p_context->hwaccel_context);
+        vlc_va_Delete(p_sys->p_va);
         p_sys->p_va = NULL;
     }
 
diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
index 40b1d8ab23..f99d979c43 100644
--- a/modules/hw/vdpau/avcodec.c
+++ b/modules/hw/vdpau/avcodec.c
@@ -205,12 +205,10 @@ error:
     return VLC_EGENERIC;
 }
 
-static void Close(vlc_va_t *va, void **hwctx)
+static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    assert(hwctx == NULL);
-
     for (unsigned i = 0; sys->pool[i] != NULL; i++)
         vlc_vdp_video_destroy(sys->pool[i]);
     vdp_release_x11(sys->vdp);
-- 
2.17.1



More information about the vlc-devel mailing list