[vlc-devel] [PATCH 1/3] contrib: d3d9: patch dxva2api.idl to get IDirectXVideoProcessor

Steve Lhomme robux4 at videolabs.io
Tue Apr 11 16:50:37 CEST 2017


---
 contrib/src/d3d9/SHA512SUMS     |   1 +
 contrib/src/d3d9/dxva2api.patch | 316 ++++++++++++++++++++++++++++++++++++++++
 contrib/src/d3d9/rules.mak      |  23 ++-
 3 files changed, 336 insertions(+), 4 deletions(-)
 create mode 100644 contrib/src/d3d9/dxva2api.patch

diff --git a/contrib/src/d3d9/SHA512SUMS b/contrib/src/d3d9/SHA512SUMS
index d5090c8d06..cf4fe86865 100644
--- a/contrib/src/d3d9/SHA512SUMS
+++ b/contrib/src/d3d9/SHA512SUMS
@@ -1,2 +1,3 @@
 81ee35501f7657dee19bc24f94af15a34a61b84fd0855a4ff91ab95b0e16ec163594e64accde1acdd289a07b8cd9c0cd640cbcbc87b11bebd92e4db841da80aa  d3d9caps.h
 42cfe1b2234065e4ce712f806370d0acbdf9bb4e4dd74859f21fd7e7428eabca9b5607c03aba57d3994d0946722d1837a454891a2e7f8242d353f29bb6a80d55  d3d9.h
+dda26118ad53e99cd8533b773fa2a38f7a184af8b68c797d0efa3256abc80f0d3c304b12601933eff79ed6c67f6f2fce40e31eadfb7ccf27ca2a297f465c113b  dxva2api.idl
diff --git a/contrib/src/d3d9/dxva2api.patch b/contrib/src/d3d9/dxva2api.patch
new file mode 100644
index 0000000000..951ffb83ae
--- /dev/null
+++ b/contrib/src/d3d9/dxva2api.patch
@@ -0,0 +1,316 @@
+--- ../tarballs/dxva2api.idl	2017-04-11 14:13:48.105355400 +0200
++++ dxva2api/dxva2api.idl	2017-04-11 14:59:17.092294600 +0200
+@@ -15,11 +15,12 @@
+ cpp_quote("#endif")
+ 
+ interface IDirectXVideoDecoderService;
++interface IDirectXVideoProcessorService;
+ 
+-cpp_quote("#ifndef __REFERENCE_TIME_DEFINED")
+-cpp_quote("#define __REFERENCE_TIME_DEFINED")
+-cpp_quote("typedef LONGLONG REFERENCE_TIME;")
+-cpp_quote("#endif /*__REFERENCE_TIME_DEFINED*/")
++#ifndef __REFERENCE_TIME_DEFINED
++#define __REFERENCE_TIME_DEFINED
++typedef LONGLONG REFERENCE_TIME;
++#endif /*__REFERENCE_TIME_DEFINED*/
+ 
+ cpp_quote("#define DXVA2_ProcAmp_None 0x0000")
+ cpp_quote("#define DXVA2_ProcAmp_Brightness 0x0001")
+@@ -142,19 +143,19 @@
+ cpp_quote("  DXVA2_VideoTransferMatrix_SMPTE240M   = 3 ")
+ cpp_quote("} DXVA2_VideoTransferMatrix;")
+ cpp_quote("")
+-cpp_quote("typedef struct _DXVA2_AYUVSample16 {")
+-cpp_quote("  USHORT Cr;")
+-cpp_quote("  USHORT Cb;")
+-cpp_quote("  USHORT Y;")
+-cpp_quote("  USHORT Alpha;")
+-cpp_quote("} DXVA2_AYUVSample16;")
+-cpp_quote("")
+-cpp_quote("typedef struct _DXVA2_AYUVSample8 {")
+-cpp_quote("  UCHAR Cr;")
+-cpp_quote("  UCHAR Cb;")
+-cpp_quote("  UCHAR Y;")
+-cpp_quote("  UCHAR Alpha;")
+-cpp_quote("} DXVA2_AYUVSample8;")
++typedef struct _DXVA2_AYUVSample16 {
++  USHORT Cr;
++  USHORT Cb;
++  USHORT Y;
++  USHORT Alpha;
++} DXVA2_AYUVSample16;
++
++typedef struct _DXVA2_AYUVSample8 {
++  UCHAR Cr;
++  UCHAR Cb;
++  UCHAR Y;
++  UCHAR Alpha;
++} DXVA2_AYUVSample8;
+ 
+ typedef struct _DXVA2_ConfigPictureDecode {
+   GUID   guidConfigBitstreamEncryption;
+@@ -219,40 +220,40 @@
+   };
+ } DXVA2_ExtendedFormat;
+ 
+-cpp_quote("typedef struct _DXVA2_Fixed32 {")
+-cpp_quote("  __C89_NAMELESS union {")
+-cpp_quote("    __C89_NAMELESS struct {")
+-cpp_quote("      USHORT Fraction;")
+-cpp_quote("      SHORT  Value;")
+-cpp_quote("    } DUMMYSTRUCTNAME;")
+-cpp_quote("    LONG   ll;")
+-cpp_quote("  } DUMMYUNIONNAME;")
+-cpp_quote("} DXVA2_Fixed32;")
+-cpp_quote("")
+-cpp_quote("typedef struct _DXVA2_FilterValues {")
+-cpp_quote("  DXVA2_Fixed32 Level;")
+-cpp_quote("  DXVA2_Fixed32 Threshold;")
+-cpp_quote("  DXVA2_Fixed32 Radius;")
+-cpp_quote("} DXVA2_FilterValues;")
++typedef struct _DXVA2_Fixed32 {
++  __C89_NAMELESS union {
++    __C89_NAMELESS struct {
++      USHORT Fraction;
++      SHORT  Value;
++    } DUMMYSTRUCTNAME;
++    LONG   ll;
++  } DUMMYUNIONNAME;
++} DXVA2_Fixed32;
++
++typedef struct _DXVA2_FilterValues {
++  DXVA2_Fixed32 Level;
++  DXVA2_Fixed32 Threshold;
++  DXVA2_Fixed32 Radius;
++} DXVA2_FilterValues;
+ 
+ typedef struct _DXVA2_Frequency {
+   UINT Numerator;
+   UINT Denominator;
+ } DXVA2_Frequency;
+ 
+-cpp_quote("typedef struct _DXVA2_ProcAmpValues {")
+-cpp_quote("  DXVA2_Fixed32 Brightness;")
+-cpp_quote("  DXVA2_Fixed32 Contrast;")
+-cpp_quote("  DXVA2_Fixed32 Hue;")
+-cpp_quote("  DXVA2_Fixed32 Saturation;")
+-cpp_quote("} DXVA2_ProcAmpValues;")
+-cpp_quote("")
+-cpp_quote("typedef struct _DXVA2_ValueRange {")
+-cpp_quote("  DXVA2_Fixed32 MinValue;")
+-cpp_quote("  DXVA2_Fixed32 MaxValue;")
+-cpp_quote("  DXVA2_Fixed32 DefaultValue;")
+-cpp_quote("  DXVA2_Fixed32 StepSize;")
+-cpp_quote("} DXVA2_ValueRange;")
++typedef struct _DXVA2_ProcAmpValues {
++  DXVA2_Fixed32 Brightness;
++  DXVA2_Fixed32 Contrast;
++  DXVA2_Fixed32 Hue;
++  DXVA2_Fixed32 Saturation;
++} DXVA2_ProcAmpValues;
++
++typedef struct _DXVA2_ValueRange {
++  DXVA2_Fixed32 MinValue;
++  DXVA2_Fixed32 MaxValue;
++  DXVA2_Fixed32 DefaultValue;
++  DXVA2_Fixed32 StepSize;
++} DXVA2_ValueRange;
+ 
+ typedef struct _DXVA2_VideoDesc {
+   UINT                 SampleWidth;
+@@ -317,57 +318,60 @@
+ cpp_quote("DXVA2_DetailFilterTech_Edge")
+ cpp_quote("DXVA2_DetailFilterTech_Sharpening")
+ cpp_quote("*/")
+-cpp_quote("typedef struct _DXVA2_VideoProcessBltParams {")
+-cpp_quote("  REFERENCE_TIME       TargetFrame;")
+-cpp_quote("  RECT                 TargetRect;")
+-cpp_quote("  SIZE                 ConstrictionSize;")
+-cpp_quote("  UINT                 StreamingFlags;")
+-cpp_quote("  DXVA2_AYUVSample16   BackgroundColor;")
+-cpp_quote("  DXVA2_ExtendedFormat DestFormat;")
+-cpp_quote("  DXVA2_ProcAmpValues  ProcAmpValues;")
+-cpp_quote("  DXVA2_Fixed32        Alpha;")
+-cpp_quote("  DXVA2_FilterValues   NoiseFilterLuma;")
+-cpp_quote("  DXVA2_FilterValues   NoiseFilterChroma;")
+-cpp_quote("  DXVA2_FilterValues   DetailFilterLuma;")
+-cpp_quote("  DXVA2_FilterValues   DetailFilterChroma;")
+-cpp_quote("  DWORD                DestData;")
+-cpp_quote("} DXVA2_VideoProcessBltParams;")
+-cpp_quote("")
+-cpp_quote("#ifdef _D3D9_H_")
+-cpp_quote("typedef struct _DXVA2_VideoProcessorCaps {")
+-cpp_quote("  UINT    DeviceCaps;")
+-cpp_quote("  D3DPOOL InputPool;")
+-cpp_quote("  UINT    NumForwardRefSamples;")
+-cpp_quote("  UINT    NumBackwardRefSamples;")
+-cpp_quote("  UINT    Reserved;")
+-cpp_quote("  UINT    DeinterlaceTechnology;")
+-cpp_quote("  UINT    ProcAmpControlCaps;")
+-cpp_quote("  UINT    VideoProcessorOperations;")
+-cpp_quote("  UINT    NoiseFilterTechnology;")
+-cpp_quote("  UINT    DetailFilterTechnology;")
+-cpp_quote("} DXVA2_VideoProcessorCaps;")
+-cpp_quote("#endif")
+-cpp_quote("")
+-cpp_quote("/* SampleData")
+-cpp_quote("DXVA2_SampleData_RFF")
+-cpp_quote("DXVA2_SampleData_TFF")
+-cpp_quote("DXVA2_SampleData_RFF_TFF_Present")
+-cpp_quote("*/")
+-cpp_quote("")
+-cpp_quote("#ifdef _D3D9_H_")
+-cpp_quote("typedef struct _DXVA2_VideoSample {")
+-cpp_quote("  REFERENCE_TIME       Start;")
+-cpp_quote("  REFERENCE_TIME       End;")
+-cpp_quote("  DXVA2_ExtendedFormat SampleFormat;")
+-cpp_quote("  IDirect3DSurface9*   SrcSurface;")
+-cpp_quote("  RECT                 SrcRect;")
+-cpp_quote("  RECT                 DstRect;")
+-cpp_quote("  DXVA2_AYUVSample8    Pal[16];")
+-cpp_quote("  DXVA2_Fixed32        PlanarAlpha;")
+-cpp_quote("  DWORD                SampleData;")
+-cpp_quote("} DXVA2_VideoSample;")
+-cpp_quote("#endif")
+-cpp_quote("")
++typedef struct _DXVA2_VideoProcessBltParams {
++  REFERENCE_TIME       TargetFrame;
++  RECT                 TargetRect;
++  SIZE                 ConstrictionSize;
++  UINT                 StreamingFlags;
++  DXVA2_AYUVSample16   BackgroundColor;
++  DXVA2_ExtendedFormat DestFormat;
++  DXVA2_ProcAmpValues  ProcAmpValues;
++  DXVA2_Fixed32        Alpha;
++  DXVA2_FilterValues   NoiseFilterLuma;
++  DXVA2_FilterValues   NoiseFilterChroma;
++  DXVA2_FilterValues   DetailFilterLuma;
++  DXVA2_FilterValues   DetailFilterChroma;
++  DWORD                DestData;
++} DXVA2_VideoProcessBltParams;
++
++#ifdef _D3D9_H_
++typedef struct _DXVA2_VideoProcessorCaps {
++  UINT    DeviceCaps;
++  D3DPOOL InputPool;
++  UINT    NumForwardRefSamples;
++  UINT    NumBackwardRefSamples;
++  UINT    Reserved;
++  UINT    DeinterlaceTechnology;
++  UINT    ProcAmpControlCaps;
++  UINT    VideoProcessorOperations;
++  UINT    NoiseFilterTechnology;
++  UINT    DetailFilterTechnology;
++} DXVA2_VideoProcessorCaps;
++#endif
++
++cpp_quote("/* SampleData */")
++enum
++{
++  DXVA2_SampleData_RFF             = 1,
++  DXVA2_SampleData_TFF             = 2,
++  DXVA2_SampleData_RFF_TFF_Present = 4,
++  DXVA2_SampleData_Mask            = 0xFFFF
++};
++
++#ifdef _D3D9_H_
++typedef struct _DXVA2_VideoSample {
++  REFERENCE_TIME       Start;
++  REFERENCE_TIME       End;
++  DXVA2_ExtendedFormat SampleFormat;
++  IDirect3DSurface9*   SrcSurface;
++  RECT                 SrcRect;
++  RECT                 DstRect;
++  DXVA2_AYUVSample8    Pal[16];
++  DXVA2_Fixed32        PlanarAlpha;
++  DWORD                SampleData;
++} DXVA2_VideoSample;
++#endif
++
+ cpp_quote("/* Constants */")
+ cpp_quote("")
+ cpp_quote("#define DXVA2_VideoDecoderRenderTarget 0")
+@@ -481,4 +485,82 @@
+             [in] UINT NumRenderTargets, [out] IDirectXVideoDecoder **ppDecode);
+ }
+ 
++[
++    object,
++    uuid(8c3a39f0-916e-4690-804f-4c8001355d25),
++    local
++]
++interface IDirectXVideoProcessor : IUnknown
++{
++    HRESULT GetVideoProcessorService([out] IDirectXVideoProcessorService** ppService);
++
++    HRESULT GetCreationParameters(
++        [out] GUID* pDeviceGuid,
++        [out] DXVA2_VideoDesc* pVideoDesc,
++        [out] D3DFORMAT* pRenderTargetFormat,
++        [out] UINT* pMaxNumSubStreams);
++    HRESULT GetVideoProcessorCaps([out] DXVA2_VideoProcessorCaps* pCaps);
++    HRESULT GetProcAmpRange(
++        [in] UINT ProcAmpCap,
++        [out] DXVA2_ValueRange* pRange);
++    HRESULT GetFilterPropertyRange(
++        [in] UINT FilterSetting,
++        [out] DXVA2_ValueRange* pRange);
++    HRESULT VideoProcessBlt(
++        [in] IDirect3DSurface9* pRenderTarget,
++        [in] const DXVA2_VideoProcessBltParams* pBltParams,
++        [in] const DXVA2_VideoSample* pSamples,
++        [in] UINT NumSamples,
++        [out] HANDLE* pHandleComplete);
++};
++
++[
++    object,
++    uuid(fc51a552-d5e7-11d9-af55-00054e43ff02),
++    local
++]
++interface IDirectXVideoProcessorService : IDirectXVideoAccelerationService
++{
++    HRESULT RegisterVideoProcessorSoftwareDevice([in] void* pCallbacks);
++
++    HRESULT GetVideoProcessorDeviceGuids(
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [out] UINT* pCount,
++        [out] GUID** pGuids);
++    HRESULT GetVideoProcessorRenderTargets(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [out] UINT* pCount,
++        [out] D3DFORMAT** pFormats);
++    HRESULT GetVideoProcessorSubStreamFormats(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [in] D3DFORMAT RenderTargetFormat,
++        [out] UINT* pCount,
++        [out] D3DFORMAT** pFormats);
++    HRESULT GetVideoProcessorCaps(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [in] D3DFORMAT RenderTargetFormat,
++        [out] DXVA2_VideoProcessorCaps* pCaps);
++    HRESULT GetProcAmpRange(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [in] D3DFORMAT RenderTargetFormat,
++        [in] UINT ProcAmpCap,
++        [out] DXVA2_ValueRange* pRange);
++    HRESULT GetFilterPropertyRange(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [in] D3DFORMAT RenderTargetFormat,
++        [in] UINT FilterSetting,
++        [out] DXVA2_ValueRange* pRange);
++    HRESULT CreateVideoProcessor(
++        [in] REFGUID VideoProcDeviceGuid,
++        [in] const DXVA2_VideoDesc* pVideoDesc,
++        [in] D3DFORMAT RenderTargetFormat,
++        [in] UINT MaxNumSubStreams,
++        [out] IDirectXVideoProcessor** ppVidProcess);
++}
++
+ cpp_quote("#endif /* _D3D9_H_ */")
diff --git a/contrib/src/d3d9/rules.mak b/contrib/src/d3d9/rules.mak
index 69b4488854..62307dcb0b 100644
--- a/contrib/src/d3d9/rules.mak
+++ b/contrib/src/d3d9/rules.mak
@@ -8,16 +8,20 @@ IDL_INC_PATH = /`echo $(MSYSTEM) | tr A-Z a-z`/$(BUILD)/include
 endif
 
 D3D9CAPS_COMMIT_ID := 477108e5706e73421634436c21cb76e1795b3609
-D3D9_H_ID := 477108e5706e73421634436c21cb76e1795b3609
+DXVA2API_COMMIT_ID := 67bb96f54d720ca9e5aaa5da7d385348e0bfac31
 D3D9CAPS_H_URL := http://sourceforge.net/p/mingw-w64/mingw-w64/ci/$(D3D9CAPS_COMMIT_ID)/tree/mingw-w64-headers/direct-x/include/d3d9caps.h?format=raw
 D3D9_H_URL := http://sourceforge.net/p/mingw-w64/mingw-w64/ci/$(D3D9CAPS_COMMIT_ID)/tree/mingw-w64-headers/direct-x/include/d3d9.h?format=raw
+DXVA2API_IDL_URL := https://sourceforge.net/p/mingw-w64/mingw-w64/ci/$(DXVA2API_COMMIT_ID)/tree/mingw-w64-headers/include/dxva2api.idl?format=raw
 DST_D3D9CAPS_H = $(PREFIX)/include/d3d9caps.h
 DST_D3D9_H = $(PREFIX)/include/d3d9.h
+DST_DXVA2API_H = $(PREFIX)/include/dxva2api.h
 
 
 ifdef HAVE_WIN32
+ifndef HAVE_VISUALSTUDIO
 PKGS += d3d9
 endif
+endif
 
 $(TARBALLS)/d3d9caps.h:
 	$(call download,$(D3D9CAPS_H_URL))
@@ -25,7 +29,10 @@ $(TARBALLS)/d3d9caps.h:
 $(TARBALLS)/d3d9.h:
 	$(call download,$(D3D9_H_URL))
 
-.sum-d3d9: $(TARBALLS)/d3d9caps.h $(TARBALLS)/d3d9.h
+$(TARBALLS)/dxva2api.idl:
+	$(call download,$(DXVA2API_IDL_URL))
+
+.sum-d3d9: $(TARBALLS)/d3d9caps.h $(TARBALLS)/d3d9.h $(TARBALLS)/dxva2api.idl
 
 $(DST_D3D9CAPS_H): $(TARBALLS)/d3d9caps.h .sum-d3d9
 	mkdir -p -- "$(PREFIX)/include/"
@@ -35,8 +42,16 @@ $(DST_D3D9_H): $(TARBALLS)/d3d9.h .sum-d3d9
 	mkdir -p -- "$(PREFIX)/include/"
 	cp $(TARBALLS)/d3d9.h $@ && cd "$(PREFIX)/include/" && patch -fp1 < ../$(SRC)/d3d9/d3d9.patch
 
+dxva2api: .sum-d3d9
+	mkdir -p $@
+	cp $(TARBALLS)/dxva2api.idl $@ && cd $@ && patch -fp1 < ../$(SRC)/d3d9/dxva2api.patch
+
+$(DST_DXVA2API_H): dxva2api
+	mkdir -p -- "$(PREFIX)/include/"
+	$(WIDL) -DBOOL=WINBOOL -D_D3D9_H_ -D__C89_NAMELESS -I$(IDL_INC_PATH) -h -o $@ $</dxva2api.idl
+
 .d3d9caps: $(DST_D3D9CAPS_H)
 	touch $@
-    
-.d3d9: $(DST_D3D9_H) $(DST_D3D9CAPS_H)
+
+.d3d9: $(DST_D3D9_H) $(DST_D3D9CAPS_H) $(DST_DXVA2API_H)
 	touch $@
-- 
2.11.1



More information about the vlc-devel mailing list