[vlc-commits] directx_va: don't store the va_pool in the directx_sys_t

Steve Lhomme git at videolan.org
Mon Sep 2 15:43:25 CEST 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Mon Sep  2 14:03:19 2019 +0200| [5a9906eaf6746d3404a67cd2ef23f0fa77a10264] | committer: Steve Lhomme

directx_va: don't store the va_pool in the directx_sys_t

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

 modules/codec/avcodec/d3d11va.c    | 36 +++++++++++++++++-------------------
 modules/codec/avcodec/directx_va.c | 10 ----------
 modules/codec/avcodec/directx_va.h |  4 ----
 modules/codec/avcodec/dxva2.c      | 12 ++++++------
 4 files changed, 23 insertions(+), 39 deletions(-)

diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index 863c73e7ba..06ceca5ee7 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -120,6 +120,7 @@ struct vlc_va_sys_t
     struct AVD3D11VAContext      hw;
 
     /* pool */
+    va_pool_t                     va_pool;
     ID3D11VideoDecoderOutputView *hw_surface[MAX_SURFACE_COUNT];
 
     ID3D11ShaderResourceView     *renderSrc[MAX_SURFACE_COUNT * D3D11_MAX_SHADER_VIEW];
@@ -244,7 +245,7 @@ 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 (sys->dx_sys.va_pool.can_extern_pool)
+    if (sys->va_pool.can_extern_pool)
     {
         /* copy the original picture_sys_d3d11_t in the va_pic_context */
         if (!pic->context)
@@ -280,7 +281,7 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     else
 #endif
     {
-        picture_context_t *pic_ctx = va_pool_Get(&sys->dx_sys.va_pool);
+        picture_context_t *pic_ctx = va_pool_Get(&sys->va_pool);
         if (unlikely(pic_ctx == NULL))
             return VLC_ENOITEM;
         pic->context = pic_ctx;
@@ -293,7 +294,7 @@ static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    directx_va_Close(va, &sys->dx_sys);
+    va_pool_Close(va, &sys->va_pool);
 
     D3D11_Destroy( &sys->hd3d );
 
@@ -383,7 +384,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
         NewSurfacePicContext,
     };
 
-    err = directx_va_Open(va, &pool_cfg, &sys->dx_sys);
+    err = va_pool_Open(va, &pool_cfg, &sys->va_pool);
     if (err!=VLC_SUCCESS)
         goto error;
 
@@ -392,7 +393,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
     if (err != VLC_SUCCESS)
         goto error;
 
-    err = va_pool_SetupDecoder(va, &sys->dx_sys.va_pool, ctx, &fmt_out, sys->hw.surface_count);
+    err = va_pool_SetupDecoder(va, &sys->va_pool, ctx, &fmt_out, sys->hw.surface_count);
     if (err != VLC_SUCCESS)
         goto error;
 
@@ -524,7 +525,6 @@ extern const GUID DXVA_ModeVP9_VLD_10bit_Profile2;
 static int DxSetupOutput(vlc_va_t *va, const GUID *input, const video_format_t *fmt)
 {
     vlc_va_sys_t *sys = va->sys;
-    directx_sys_t *dx_sys = &sys->dx_sys;
     HRESULT hr;
 
 #ifndef NDEBUG
@@ -623,7 +623,7 @@ static int DxSetupOutput(vlc_va_t *va, const GUID *input, const video_format_t *
         if ( sys->render == processorInput[idx] && sys->totalTextureSlices > 4)
         {
             if (CanUseVoutPool(&sys->d3d_dev, sys->totalTextureSlices))
-                dx_sys->va_pool.can_extern_pool = true;
+                sys->va_pool.can_extern_pool = true;
             else
                 msg_Warn( va, "use internal pool" );
         }
@@ -661,7 +661,6 @@ 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 = &sys->dx_sys;
     HRESULT hr;
 
     ID3D10Multithread *pMultithread;
@@ -685,7 +684,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
     {
         msg_Dbg(va, "mismatching external pool sizes use the internal one %dx%d vs %dx%d",
                 sys->textureWidth, sys->textureHeight, fmt->i_width, fmt->i_height);
-        dx_sys->va_pool.can_extern_pool = false;
+        sys->va_pool.can_extern_pool = false;
         sys->textureWidth  = fmt->i_width;
         sys->textureHeight = fmt->i_height;
     }
@@ -693,7 +692,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
     {
         msg_Warn(va, "not enough decoding slices in the texture (%d/%d)",
                  sys->totalTextureSlices, surface_count);
-        dx_sys->va_pool.can_extern_pool = false;
+        sys->va_pool.can_extern_pool = false;
     }
 #if VLC_WINSTORE_APP
     /* On the Xbox 1/S, any decoding of H264 with one dimension over 2304
@@ -729,7 +728,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
         return VLC_EGENERIC;
     }
 
-    if (dx_sys->va_pool.can_extern_pool)
+    if (sys->va_pool.can_extern_pool)
     {
 #if !D3D11_DIRECT_DECODE
         size_t surface_idx;
@@ -740,7 +739,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
             if (pic==NULL)
             {
                 msg_Warn(va, "not enough decoder pictures %d out of %d", surface_idx, surface_count);
-                dx_sys->va_pool.can_extern_pool = false;
+                sys->va_pool.can_extern_pool = false;
                 break;
             }
 
@@ -755,7 +754,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
             {
                 msg_Warn(va, "d3d11va requires decoding slices to be the first in the texture (%d/%d)",
                          p_sys->slice_index, surface_idx);
-                dx_sys->va_pool.can_extern_pool = false;
+                sys->va_pool.can_extern_pool = false;
                 break;
             }
 #endif
@@ -767,7 +766,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
                                                                  &p_sys->decoder );
             if (FAILED(hr)) {
                 msg_Warn(va, "CreateVideoDecoderOutputView %d failed. (hr=0x%lX)", surface_idx, hr);
-                dx_sys->va_pool.can_extern_pool = false;
+                sys->va_pool.can_extern_pool = false;
                 break;
             }
 
@@ -776,7 +775,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
             sys->hw_surface[surface_idx] = p_sys->decoder;
         }
 
-        if (!dx_sys->va_pool.can_extern_pool)
+        if (!sys->va_pool.can_extern_pool)
         {
             for (size_t i = 0; i < surface_idx; ++i)
             {
@@ -799,7 +798,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
             msg_Dbg(va, "using external surface pool");
     }
 
-    if (!dx_sys->va_pool.can_extern_pool)
+    if (!sys->va_pool.can_extern_pool)
     {
         D3D11_TEXTURE2D_DESC texDesc;
         ZeroMemory(&texDesc, sizeof(texDesc));
@@ -922,14 +921,13 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
 
 static void DxDestroySurfaces(vlc_va_sys_t *sys)
 {
-    directx_sys_t *dx_sys = &sys->dx_sys;
-    if (dx_sys->va_pool.surface_count && !dx_sys->va_pool.can_extern_pool) {
+    if (sys->va_pool.surface_count && !sys->va_pool.can_extern_pool) {
         ID3D11Resource *p_texture;
         ID3D11VideoDecoderOutputView_GetResource( sys->hw_surface[0], &p_texture );
         ID3D11Resource_Release(p_texture);
         ID3D11Resource_Release(p_texture);
     }
-    for (unsigned i = 0; i < dx_sys->va_pool.surface_count; i++)
+    for (unsigned i = 0; i < sys->va_pool.surface_count; i++)
     {
         ID3D11VideoDecoderOutputView_Release( sys->hw_surface[i] );
         for (int j = 0; j < D3D11_MAX_SHADER_VIEW; j++)
diff --git a/modules/codec/avcodec/directx_va.c b/modules/codec/avcodec/directx_va.c
index 8623c02a6a..656657d9a4 100644
--- a/modules/codec/avcodec/directx_va.c
+++ b/modules/codec/avcodec/directx_va.c
@@ -350,16 +350,6 @@ int directx_va_Setup(vlc_va_t *va, directx_sys_t *dx_sys, const AVCodecContext *
     return VLC_SUCCESS;
 }
 
-void directx_va_Close(vlc_va_t *va, directx_sys_t *dx_sys)
-{
-    va_pool_Close(va, &dx_sys->va_pool);
-}
-
-int directx_va_Open(vlc_va_t *va, const struct va_pool_cfg *cbs, directx_sys_t *dx_sys)
-{
-    return va_pool_Open(va, cbs, &dx_sys->va_pool);
-}
-
 static bool profile_supported(const directx_va_mode_t *mode, const es_format_t *fmt,
                               const AVCodecContext *avctx)
 {
diff --git a/modules/codec/avcodec/directx_va.h b/modules/codec/avcodec/directx_va.h
index 642619367e..298cc09f50 100644
--- a/modules/codec/avcodec/directx_va.h
+++ b/modules/codec/avcodec/directx_va.h
@@ -52,8 +52,6 @@ typedef struct input_list_t {
 #define MAX_SURFACE_COUNT (64)
 typedef struct
 {
-    va_pool_t             va_pool;
-
     /**
      * Read the list of possible input GUIDs
      */
@@ -66,8 +64,6 @@ typedef struct
 
 } directx_sys_t;
 
-int directx_va_Open(vlc_va_t *, const struct va_pool_cfg *, directx_sys_t *);
-void directx_va_Close(vlc_va_t *, directx_sys_t *);
 int directx_va_Setup(vlc_va_t *, directx_sys_t *, const AVCodecContext *avctx, const es_format_t *, int flag_xbox,
                      video_format_t *fmt_out, unsigned *surface_count, GUID *found_guid);
 char *directx_va_GetDecoderName(const GUID *guid);
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index ccbf1f5e77..ffcbfef914 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -128,6 +128,7 @@ struct vlc_va_sys_t
     IDirectXVideoDecoderService  *d3ddec;
 
     /* pool */
+    va_pool_t           va_pool;
     IDirect3DSurface9   *hw_surface[MAX_SURFACE_COUNT];
 
     /* avcodec internals */
@@ -221,7 +222,7 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
         return VLC_EGENERIC;
     }
 
-    picture_context_t *pic_ctx = va_pool_Get(&sys->dx_sys.va_pool);
+    picture_context_t *pic_ctx = va_pool_Get(&sys->va_pool);
     if (likely(pic_ctx==NULL))
         return VLC_ENOITEM;
 
@@ -234,7 +235,7 @@ static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    directx_va_Close(va, &sys->dx_sys);
+    va_pool_Close(va, &sys->va_pool);
 
     if (sys->dxva2_dll)
         FreeLibrary(sys->dxva2_dll);
@@ -310,7 +311,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
 
     va->sys = sys;
 
-    err = directx_va_Open(va, &pool_cfg, &sys->dx_sys);
+    err = va_pool_Open(va, &pool_cfg, &sys->va_pool);
     if (err!=VLC_SUCCESS)
         goto error;
 
@@ -319,7 +320,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
     if (err != VLC_SUCCESS)
         goto error;
 
-    err = va_pool_SetupDecoder(va, &sys->dx_sys.va_pool, ctx, &fmt_out, sys->hw.surface_count);
+    err = va_pool_SetupDecoder(va, &sys->va_pool, ctx, &fmt_out, sys->hw.surface_count);
     if (err != VLC_SUCCESS)
         goto error;
 
@@ -657,10 +658,9 @@ error:
 
 static void DxDestroyVideoDecoder(vlc_va_sys_t *sys)
 {
-    directx_sys_t *dx_sys = &sys->dx_sys;
     /* releases a reference on each decoder surface */
     if (sys->hw.decoder)
         IDirectXVideoDecoder_Release(sys->hw.decoder);
-    for (unsigned i = 0; i < dx_sys->va_pool.surface_count; i++)
+    for (unsigned i = 0; i < sys->va_pool.surface_count; i++)
         IDirect3DSurface9_Release(sys->hw_surface[i]);
 }



More information about the vlc-commits mailing list