[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