[vlc-commits] hw:d3d11: move the VideoProcessorEnumerator creation in D3D11_CreateProcessor()

Steve Lhomme git at videolan.org
Mon May 28 13:25:00 CEST 2018


vlc | branch: master | Steve Lhomme <robux4 at videolabs.io> | Thu Nov 30 10:53:08 2017 +0100| [cba85bd68ae6bb27536c7c859f5448a8f64b7a61] | committer: Steve Lhomme

hw:d3d11: move the VideoProcessorEnumerator creation in D3D11_CreateProcessor()

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

 modules/hw/d3d11/d3d11_deinterlace.c | 33 +++++----------------------------
 modules/hw/d3d11/d3d11_filters.c     | 30 +++++-------------------------
 modules/hw/d3d11/d3d11_processor.c   | 28 +++++++++++++++++++++++++++-
 modules/hw/d3d11/d3d11_processor.h   |  7 +++++--
 modules/hw/d3d11/d3d11_surface.c     | 23 ++---------------------
 5 files changed, 44 insertions(+), 77 deletions(-)

diff --git a/modules/hw/d3d11/d3d11_deinterlace.c b/modules/hw/d3d11/d3d11_deinterlace.c
index 61e0cf141d..c6224cabc1 100644
--- a/modules/hw/d3d11/d3d11_deinterlace.c
+++ b/modules/hw/d3d11/d3d11_deinterlace.c
@@ -363,36 +363,13 @@ int D3D11OpenDeinterlace(vlc_object_t *obj)
         return VLC_ENOOBJ;
     }
 
-    if (D3D11_Create(filter, &sys->hd3d) != VLC_SUCCESS)
-        goto error;
-
-    if (D3D11_CreateProcessor(filter, &sys->d3d_dev, &sys->d3d_proc) != VLC_SUCCESS)
-        goto error;
+    video_format_t fmt_out = filter->fmt_out.video;
+    fmt_out.i_width  = dstDesc.Width;
+    fmt_out.i_height = dstDesc.Height;
 
-    const video_format_t *fmt = &filter->fmt_out.video;
-
-    D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = {
-        .InputFrameFormat = D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST,
-        .InputFrameRate = {
-            .Numerator   = fmt->i_frame_rate,
-            .Denominator = fmt->i_frame_rate_base,
-        },
-        .InputWidth   = fmt->i_width,
-        .InputHeight  = fmt->i_height,
-        .OutputWidth  = dstDesc.Width,
-        .OutputHeight = dstDesc.Height,
-        .OutputFrameRate = {
-            .Numerator   = fmt->i_frame_rate,
-            .Denominator = fmt->i_frame_rate_base,
-        },
-        .Usage = D3D11_VIDEO_USAGE_PLAYBACK_NORMAL,
-    };
-    hr = ID3D11VideoDevice_CreateVideoProcessorEnumerator(sys->d3d_proc.d3dviddev, &processorDesc, &sys->d3d_proc.procEnumerator);
-    if ( sys->d3d_proc.procEnumerator == NULL )
-    {
-        msg_Dbg(filter, "Can't get a video processor for the video.");
+    if (D3D11_CreateProcessor(filter, &sys->d3d_dev, D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST,
+                              &filter->fmt_out.video, &fmt_out, &sys->d3d_proc) != VLC_SUCCESS)
         goto error;
-    }
 
     UINT flags;
 #ifndef NDEBUG
diff --git a/modules/hw/d3d11/d3d11_filters.c b/modules/hw/d3d11/d3d11_filters.c
index bbffbb0da2..a96274eb50 100644
--- a/modules/hw/d3d11/d3d11_filters.c
+++ b/modules/hw/d3d11/d3d11_filters.c
@@ -363,33 +363,13 @@ static int D3D11OpenAdjust(vlc_object_t *obj)
         return VLC_ENOOBJ;
     }
 
-    if (D3D11_CreateProcessor(filter, &sys->d3d_dev, &sys->d3d_proc) != VLC_SUCCESS)
-        goto error;
+    video_format_t fmt_out = filter->fmt_out.video;
+    fmt_out.i_width  = dstDesc.Width;
+    fmt_out.i_height = dstDesc.Height;
 
-    const video_format_t *fmt = &filter->fmt_out.video;
-
-    D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = {
-        .InputFrameFormat = D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE,
-        .InputFrameRate = {
-            .Numerator   = fmt->i_frame_rate,
-            .Denominator = fmt->i_frame_rate_base,
-        },
-        .InputWidth   = fmt->i_width,
-        .InputHeight  = fmt->i_height,
-        .OutputWidth  = dstDesc.Width,
-        .OutputHeight = dstDesc.Height,
-        .OutputFrameRate = {
-            .Numerator   = fmt->i_frame_rate,
-            .Denominator = fmt->i_frame_rate_base,
-        },
-        .Usage = D3D11_VIDEO_USAGE_PLAYBACK_NORMAL,
-    };
-    hr = ID3D11VideoDevice_CreateVideoProcessorEnumerator(sys->d3d_proc.d3dviddev, &processorDesc, &sys->d3d_proc.procEnumerator);
-    if ( sys->d3d_proc.procEnumerator == NULL )
-    {
-        msg_Dbg(filter, "Can't get a video processor for the video.");
+    if (D3D11_CreateProcessor(filter, &sys->d3d_dev, D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE,
+                              &filter->fmt_out.video, &fmt_out, &sys->d3d_proc) != VLC_SUCCESS)
         goto error;
-    }
 
     UINT flags;
 #ifndef NDEBUG
diff --git a/modules/hw/d3d11/d3d11_processor.c b/modules/hw/d3d11/d3d11_processor.c
index cff2096f30..37a2110ce7 100644
--- a/modules/hw/d3d11/d3d11_processor.c
+++ b/modules/hw/d3d11/d3d11_processor.c
@@ -37,7 +37,10 @@
 
 #if defined(ID3D11VideoContext_VideoProcessorBlt)
 #undef D3D11_CreateProcessor
-int D3D11_CreateProcessor(vlc_object_t *o, d3d11_device_t *d3d_dev, d3d11_processor_t *out)
+int D3D11_CreateProcessor(vlc_object_t *o, d3d11_device_t *d3d_dev,
+                          D3D11_VIDEO_FRAME_FORMAT srcFields,
+                          const video_format_t *fmt_in, const video_format_t *fmt_out,
+                          d3d11_processor_t *out)
 {
     HRESULT hr;
     *out = (d3d11_processor_t) { 0 };
@@ -54,6 +57,29 @@ int D3D11_CreateProcessor(vlc_object_t *o, d3d11_device_t *d3d_dev, d3d11_proces
        goto error;
     }
 
+    D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = {
+        .InputFrameFormat = srcFields,
+        .InputFrameRate = {
+            .Numerator   = fmt_in->i_frame_rate_base ? fmt_in->i_frame_rate : 0,
+            .Denominator = fmt_in->i_frame_rate_base,
+        },
+        .InputWidth   = fmt_in->i_width,
+        .InputHeight  = fmt_in->i_height,
+        .OutputWidth  = fmt_out->i_width,
+        .OutputHeight = fmt_out->i_height,
+        .OutputFrameRate = {
+            .Numerator   = fmt_out->i_frame_rate_base ? fmt_out->i_frame_rate : 0,
+            .Denominator = fmt_out->i_frame_rate_base,
+        },
+        .Usage = D3D11_VIDEO_USAGE_PLAYBACK_NORMAL,
+    };
+    hr = ID3D11VideoDevice_CreateVideoProcessorEnumerator(out->d3dviddev, &processorDesc, &out->procEnumerator);
+    if ( FAILED(hr) || out->procEnumerator == NULL )
+    {
+        msg_Dbg(o, "Can't get a video processor for the video.");
+        goto error;
+    }
+
     return VLC_SUCCESS;
 error:
     D3D11_ReleaseProcessor(out);
diff --git a/modules/hw/d3d11/d3d11_processor.h b/modules/hw/d3d11/d3d11_processor.h
index b2b9023589..17fae1d92c 100644
--- a/modules/hw/d3d11/d3d11_processor.h
+++ b/modules/hw/d3d11/d3d11_processor.h
@@ -36,8 +36,11 @@ typedef struct
     ID3D11VideoProcessor           *videoProcessor;
 } d3d11_processor_t;
 
-int D3D11_CreateProcessor(vlc_object_t *, d3d11_device_t *, d3d11_processor_t *out);
-#define D3D11_CreateProcessor(a,b,c) D3D11_CreateProcessor(VLC_OBJECT(a),b,c)
+int D3D11_CreateProcessor(vlc_object_t *, d3d11_device_t *,
+                          D3D11_VIDEO_FRAME_FORMAT srcFields,
+                          const video_format_t *fmt_in, const video_format_t *fmt_out,
+                          d3d11_processor_t *out);
+#define D3D11_CreateProcessor(a,b,c,d,e,f) D3D11_CreateProcessor(VLC_OBJECT(a),b,c,d,e,f)
 
 void D3D11_ReleaseProcessor(d3d11_processor_t *);
 #endif
diff --git a/modules/hw/d3d11/d3d11_surface.c b/modules/hw/d3d11/d3d11_surface.c
index 18cf764002..c5482b80bf 100644
--- a/modules/hw/d3d11/d3d11_surface.c
+++ b/modules/hw/d3d11/d3d11_surface.c
@@ -85,29 +85,10 @@ static int SetupProcessor(filter_t *p_filter, d3d11_device_t *d3d_dev,
     filter_sys_t *sys = p_filter->p_sys;
     HRESULT hr;
 
-    if (D3D11_CreateProcessor(p_filter, d3d_dev, &sys->d3d_proc) != VLC_SUCCESS)
+    if (D3D11_CreateProcessor(p_filter, d3d_dev, D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE,
+                              &p_filter->fmt_in.video, &p_filter->fmt_out.video, &sys->d3d_proc) != VLC_SUCCESS)
         goto error;
 
-    const video_format_t *fmt = &p_filter->fmt_in.video;
-    D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = {
-        .InputFrameFormat = D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE,
-        .InputFrameRate = {
-            .Numerator   = fmt->i_frame_rate_base > 0 ? fmt->i_frame_rate : 0,
-            .Denominator = fmt->i_frame_rate_base,
-        },
-        .InputWidth   = fmt->i_width,
-        .InputHeight  = fmt->i_height,
-        .OutputWidth  = fmt->i_width,
-        .OutputHeight = fmt->i_height,
-        .Usage = D3D11_VIDEO_USAGE_PLAYBACK_NORMAL,
-    };
-    hr = ID3D11VideoDevice_CreateVideoProcessorEnumerator(sys->d3d_proc.d3dviddev, &processorDesc, &sys->d3d_proc.procEnumerator);
-    if ( sys->d3d_proc.procEnumerator == NULL )
-    {
-        msg_Dbg(p_filter, "Can't get a video processor for the video.");
-        goto error;
-    }
-
     UINT flags;
 #ifndef NDEBUG
     D3D11_LogProcessorSupport(p_filter, sys->d3d_proc.procEnumerator);



More information about the vlc-commits mailing list