[vlc-commits] directx_va: don't use the va when we only need the sys

Steve Lhomme git at videolan.org
Mon Jul 22 11:43:22 CEST 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Mon Jul 22 09:17:15 2019 +0200| [9e5570a7e09a3b0ac3775f919bf05651955cc7fb] | committer: Steve Lhomme

directx_va: don't use the va when we only need the sys

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9e5570a7e09a3b0ac3775f919bf05651955cc7fb
---

 modules/codec/avcodec/d3d11va.c             | 42 +++++++++++++++--------------
 modules/codec/avcodec/dxva2.c               | 30 ++++++++++-----------
 modules/codec/avcodec/va_surface.c          | 14 +++++-----
 modules/codec/avcodec/va_surface_internal.h |  6 ++---
 4 files changed, 47 insertions(+), 45 deletions(-)

diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index f82121e517..2c669ed9dc 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -127,7 +127,7 @@ struct vlc_va_sys_t
 
 /* */
 static int D3dCreateDevice(vlc_va_t *);
-static void D3dDestroyDevice(vlc_va_t *);
+static void D3dDestroyDevice(vlc_va_sys_t *);
 
 static int DxCreateVideoService(vlc_va_t *);
 static void DxDestroyVideoService(vlc_va_t *);
@@ -136,11 +136,10 @@ static int DxSetupOutput(vlc_va_t *, const GUID *, const video_format_t *);
 
 static int DxCreateDecoderSurfaces(vlc_va_t *, int codec_id,
                                    const video_format_t *fmt, unsigned surface_count);
-static void DxDestroySurfaces(vlc_va_t *);
+static void DxDestroySurfaces(vlc_va_sys_t *);
 
-static void SetupAVCodecContext(vlc_va_t *va)
+static void SetupAVCodecContext(vlc_va_sys_t *sys)
 {
-    vlc_va_sys_t *sys = va->sys;
     directx_sys_t *dx_sys = &sys->dx_sys;
 
     sys->hw.video_context = sys->d3dvidctx;
@@ -248,9 +247,10 @@ static struct va_pic_context* NewSurfacePicContext(vlc_va_t *va, int surface_ind
 
 static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
 {
+    vlc_va_sys_t *sys = va->sys;
     picture_sys_d3d11_t *p_sys = pic->p_sys;
 #if D3D11_DIRECT_DECODE
-    if (va->sys->dx_sys.can_extern_pool)
+    if (sys->dx_sys.can_extern_pool)
     {
         /* copy the original picture_sys_d3d11_t in the va_pic_context */
         if (!pic->context)
@@ -261,11 +261,11 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
                 HRESULT hr;
                 D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC viewDesc;
                 ZeroMemory(&viewDesc, sizeof(viewDesc));
-                viewDesc.DecodeProfile = va->sys->dx_sys.input;
+                viewDesc.DecodeProfile = sys->dx_sys.input;
                 viewDesc.ViewDimension = D3D11_VDOV_DIMENSION_TEXTURE2D;
                 viewDesc.Texture2D.ArraySlice = p_sys->slice_index;
 
-                hr = ID3D11VideoDevice_CreateVideoDecoderOutputView( va->sys->dx_sys.d3ddec,
+                hr = ID3D11VideoDevice_CreateVideoDecoderOutputView( sys->dx_sys.d3ddec,
                                                                      p_sys->resource[KNOWN_DXGI_INDEX],
                                                                      &viewDesc,
                                                                      &p_sys->decoder );
@@ -276,7 +276,7 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
             pic->context = (picture_context_t*)CreatePicContext(
                                              p_sys->decoder,
                                              p_sys->resource[KNOWN_DXGI_INDEX],
-                                             va->sys->d3d_dev.d3dcontext,
+                                             sys->d3d_dev.d3dcontext,
                                              p_sys->slice_index,
                                              p_sys->renderSrc );
             if (pic->context == NULL)
@@ -286,7 +286,7 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     else
 #endif
     {
-        picture_context_t *pic_ctx = va_pool_Get(&va->sys->dx_sys.va_pool);
+        picture_context_t *pic_ctx = va_pool_Get(&sys->dx_sys.va_pool);
         if (unlikely(pic_ctx == NULL))
             return VLC_ENOITEM;
         pic->context = pic_ctx;
@@ -469,9 +469,8 @@ static int D3dCreateDevice(vlc_va_t *va)
 /**
  * It releases a Direct3D device and its resources.
  */
-static void D3dDestroyDevice(vlc_va_t *va)
+static void D3dDestroyDevice(vlc_va_sys_t *sys)
 {
-    vlc_va_sys_t *sys = va->sys;
     if (sys->d3dvidctx)
         ID3D11VideoContext_Release(sys->d3dvidctx);
     D3D11_ReleaseDevice( &sys->d3d_dev );
@@ -482,10 +481,11 @@ static void D3dDestroyDevice(vlc_va_t *va)
  */
 static int DxCreateVideoService(vlc_va_t *va)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    vlc_va_sys_t *sys = va->sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
 
     void *d3dviddev = NULL;
-    HRESULT hr = ID3D11Device_QueryInterface(va->sys->d3d_dev.d3ddevice, &IID_ID3D11VideoDevice, &d3dviddev);
+    HRESULT hr = ID3D11Device_QueryInterface(sys->d3d_dev.d3ddevice, &IID_ID3D11VideoDevice, &d3dviddev);
     if (FAILED(hr)) {
        msg_Err(va, "Could not Query ID3D11VideoDevice Interface. (hr=0x%lX)", hr);
        return VLC_EGENERIC;
@@ -500,7 +500,8 @@ static int DxCreateVideoService(vlc_va_t *va)
  */
 static void DxDestroyVideoService(vlc_va_t *va)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    vlc_va_sys_t *sys = va->sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     if (dx_sys->d3ddec)
         ID3D11VideoDevice_Release(dx_sys->d3ddec);
 }
@@ -512,7 +513,8 @@ static void ReleaseInputList(input_list_t *p_list)
 
 static int DxGetInputList(vlc_va_t *va, input_list_t *p_list)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    vlc_va_sys_t *sys = va->sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     HRESULT hr;
 
     UINT input_count = ID3D11VideoDevice_GetVideoDecoderProfileCount(dx_sys->d3ddec);
@@ -680,7 +682,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
                                    const video_format_t *fmt, unsigned surface_count)
 {
     vlc_va_sys_t *sys = va->sys;
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     HRESULT hr;
 
     ID3D10Multithread *pMultithread;
@@ -939,9 +941,9 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
     return VLC_SUCCESS;
 }
 
-static void DxDestroySurfaces(vlc_va_t *va)
+static void DxDestroySurfaces(vlc_va_sys_t *sys)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     if (dx_sys->va_pool.surface_count && !dx_sys->can_extern_pool) {
         ID3D11Resource *p_texture;
         ID3D11VideoDecoderOutputView_GetResource( dx_sys->hw_surface[0], &p_texture );
@@ -953,8 +955,8 @@ static void DxDestroySurfaces(vlc_va_t *va)
         ID3D11VideoDecoderOutputView_Release( dx_sys->hw_surface[i] );
         for (int j = 0; j < D3D11_MAX_SHADER_VIEW; j++)
         {
-            if (va->sys->renderSrc[i*D3D11_MAX_SHADER_VIEW + j])
-                ID3D11ShaderResourceView_Release(va->sys->renderSrc[i*D3D11_MAX_SHADER_VIEW + j]);
+            if (sys->renderSrc[i*D3D11_MAX_SHADER_VIEW + j])
+                ID3D11ShaderResourceView_Release(sys->renderSrc[i*D3D11_MAX_SHADER_VIEW + j]);
         }
     }
     if (dx_sys->decoder)
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 596538d0f3..274568bcfb 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -136,7 +136,7 @@ struct vlc_va_sys_t
 
 /* */
 static int D3dCreateDevice(vlc_va_t *);
-static void D3dDestroyDevice(vlc_va_t *);
+static void D3dDestroyDevice(vlc_va_sys_t *);
 
 static int D3dCreateDeviceManager(vlc_va_t *);
 static void D3dDestroyDeviceManager(vlc_va_t *);
@@ -148,11 +148,10 @@ static int DxSetupOutput(vlc_va_t *, const GUID *, const video_format_t *);
 
 static int DxCreateVideoDecoder(vlc_va_t *, int codec_id,
                                 const video_format_t *, unsigned surface_count);
-static void DxDestroyVideoDecoder(vlc_va_t *);
+static void DxDestroyVideoDecoder(vlc_va_sys_t *);
 
-static void SetupAVCodecContext(vlc_va_t *va)
+static void SetupAVCodecContext(vlc_va_sys_t *sys)
 {
-    vlc_va_sys_t *sys = va->sys;
     directx_sys_t *dx_sys = &sys->dx_sys;
 
     sys->hw.decoder = dx_sys->decoder;
@@ -373,9 +372,8 @@ static int D3dCreateDevice(vlc_va_t *va)
 /**
  * It releases a Direct3D device and its resources.
  */
-static void D3dDestroyDevice(vlc_va_t *va)
+static void D3dDestroyDevice(vlc_va_sys_t *sys)
 {
-    vlc_va_sys_t *sys = va->sys;
     D3D9_ReleaseDevice(&sys->d3d_dev);
     D3D9_Destroy( &sys->hd3d );
 }
@@ -430,7 +428,7 @@ static void D3dDestroyDeviceManager(vlc_va_t *va)
 static int DxCreateVideoService(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     HRESULT hr;
 
     HANDLE device;
@@ -458,12 +456,13 @@ static int DxCreateVideoService(vlc_va_t *va)
  */
 static void DxDestroyVideoService(vlc_va_t *va)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
-    if (va->sys->device)
+    vlc_va_sys_t *sys = va->sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
+    if (sys->device)
     {
-        HRESULT hr = IDirect3DDeviceManager9_CloseDeviceHandle(va->sys->devmng, va->sys->device);
+        HRESULT hr = IDirect3DDeviceManager9_CloseDeviceHandle(sys->devmng, sys->device);
         if (FAILED(hr))
-            msg_Warn(va, "Failed to release device handle 0x%p. (hr=0x%lX)", va->sys->device, hr);
+            msg_Warn(va, "Failed to release device handle 0x%p. (hr=0x%lX)", sys->device, hr);
     }
     if (dx_sys->d3ddec)
         IDirectXVideoDecoderService_Release(dx_sys->d3ddec);
@@ -476,7 +475,8 @@ static void ReleaseInputList(input_list_t *p_list)
 
 static int DxGetInputList(vlc_va_t *va, input_list_t *p_list)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    vlc_va_sys_t *sys = va->sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     UINT input_count = 0;
     GUID *input_list = NULL;
     if (FAILED(IDirectXVideoDecoderService_GetDecoderDeviceGuids(dx_sys->d3ddec,
@@ -572,7 +572,7 @@ static int DxCreateVideoDecoder(vlc_va_t *va, int codec_id,
                                 const video_format_t *fmt, unsigned surface_count)
 {
     vlc_va_sys_t *p_sys = va->sys;
-    directx_sys_t *sys = &va->sys->dx_sys;
+    directx_sys_t *sys = &p_sys->dx_sys;
     HRESULT hr;
 
     hr = IDirectXVideoDecoderService_CreateSurface(sys->d3ddec,
@@ -705,9 +705,9 @@ error:
     return VLC_EGENERIC;
 }
 
-static void DxDestroyVideoDecoder(vlc_va_t *va)
+static void DxDestroyVideoDecoder(vlc_va_sys_t *sys)
 {
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
+    directx_sys_t *dx_sys = &sys->dx_sys;
     if (dx_sys->decoder)
     {
         /* releases a reference on each decoder surface */
diff --git a/modules/codec/avcodec/va_surface.c b/modules/codec/avcodec/va_surface.c
index 2506296d93..a91878f1a6 100644
--- a/modules/codec/avcodec/va_surface.c
+++ b/modules/codec/avcodec/va_surface.c
@@ -44,11 +44,11 @@ struct vlc_va_surface_t {
     atomic_uintptr_t     refcount;
 };
 
-static void DestroyVideoDecoder(vlc_va_t *va, va_pool_t *va_pool)
+static void DestroyVideoDecoder(vlc_va_sys_t *sys, va_pool_t *va_pool)
 {
     for (unsigned i = 0; i < va_pool->surface_count; i++)
         va_surface_Release(va_pool->surface[i]->va_surface);
-    va_pool->pf_destroy_surfaces(va);
+    va_pool->pf_destroy_surfaces(sys);
     va_pool->surface_count = 0;
 }
 
@@ -81,7 +81,7 @@ int va_pool_SetupDecoder(vlc_va_t *va, va_pool_t *va_pool, const AVCodecContext
     }
 
     /* */
-    DestroyVideoDecoder(va, va_pool);
+    DestroyVideoDecoder(va->sys, va_pool);
 
     /* */
     msg_Dbg(va, "va_pool_SetupDecoder id %d %dx%d count: %d", avctx->codec_id, avctx->coded_width, avctx->coded_height, count);
@@ -107,7 +107,7 @@ int va_pool_SetupDecoder(vlc_va_t *va, va_pool_t *va_pool, const AVCodecContext
 done:
     va_pool->surface_count = i;
     if (err == VLC_SUCCESS)
-        va_pool->pf_setup_avcodec_ctx(va);
+        va_pool->pf_setup_avcodec_ctx(va->sys);
 
     return err;
 }
@@ -135,7 +135,7 @@ int va_pool_SetupSurfaces(vlc_va_t *va, va_pool_t *va_pool, unsigned count)
 done:
     va_pool->surface_count = i;
     if (err == VLC_SUCCESS)
-        va_pool->pf_setup_avcodec_ctx(va);
+        va_pool->pf_setup_avcodec_ctx(va->sys);
 
     return err;
 }
@@ -190,11 +190,11 @@ void va_surface_Release(vlc_va_surface_t *surface)
 
 void va_pool_Close(vlc_va_t *va, va_pool_t *va_pool)
 {
-    DestroyVideoDecoder(va, va_pool);
+    DestroyVideoDecoder(va->sys, va_pool);
     va_pool->pf_destroy_video_service(va);
     if (va_pool->pf_destroy_device_manager)
         va_pool->pf_destroy_device_manager(va);
-    va_pool->pf_destroy_device(va);
+    va_pool->pf_destroy_device(va->sys);
 }
 
 int va_pool_Open(vlc_va_t *va, va_pool_t *va_pool)
diff --git a/modules/codec/avcodec/va_surface_internal.h b/modules/codec/avcodec/va_surface_internal.h
index f5e2ab24c0..df55ff5dc6 100644
--- a/modules/codec/avcodec/va_surface_internal.h
+++ b/modules/codec/avcodec/va_surface_internal.h
@@ -44,7 +44,7 @@ typedef struct
     struct va_pic_context  *surface[MAX_SURFACE_COUNT];
 
     int (*pf_create_device)(vlc_va_t *);
-    void (*pf_destroy_device)(vlc_va_t *);
+    void (*pf_destroy_device)(vlc_va_sys_t *);
 
     int (*pf_create_device_manager)(vlc_va_t *);
     void (*pf_destroy_device_manager)(vlc_va_t *);
@@ -61,11 +61,11 @@ typedef struct
     /**
      * Destroy resources allocated with the surfaces and the associated decoder
      */
-    void (*pf_destroy_surfaces)(vlc_va_t *);
+    void (*pf_destroy_surfaces)(vlc_va_sys_t *);
     /**
      * Set the avcodec hw context after the decoder is created
      */
-    void (*pf_setup_avcodec_ctx)(vlc_va_t *);
+    void (*pf_setup_avcodec_ctx)(vlc_va_sys_t *);
 
     /**
      * Create a new context for the surface being acquired



More information about the vlc-commits mailing list