[vlc-devel] [PATCH] contrib: generate the d3d11.h with ID3D11VideoDecoder support
Steve Lhomme
robux4 at gmail.com
Mon May 25 16:20:52 CEST 2015
And also with dxgidebug.h to show leaks
---
replaces previous [PATCH 2/3] generate the d3d11.h with
ID3D11VideoDecoder support
---
contrib/src/d3d11/dxgidebug.patch | 51 +++++++
contrib/src/d3d11/id3d11videodecoder.patch | 221
+++++++++++++++++++++++++++++
contrib/src/d3d11/rules.mak | 29 ++++
3 files changed, 301 insertions(+)
create mode 100644 contrib/src/d3d11/dxgidebug.patch
create mode 100644 contrib/src/d3d11/id3d11videodecoder.patch
create mode 100644 contrib/src/d3d11/rules.mak
diff --git a/contrib/src/d3d11/dxgidebug.patch
b/contrib/src/d3d11/dxgidebug.patch
new file mode 100644
index 0000000..f12999e
--- /dev/null
+++ b/contrib/src/d3d11/dxgidebug.patch
@@ -0,0 +1,51 @@
+diff --git a/dxgidebug.idl b/dxgidebug.idl
+--- /dev/null
++++ b/dxgidebug.idl
+@@ -0,0 +1,44 @@
++/*
++ * Copyright 2015 Steve Lhomme
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301, USA
++ */
++
++import "oaidl.idl";
++
++cpp_quote("DEFINE_GUID(DXGI_DEBUG_ALL, 0xe48ae283, 0xda80, 0x490b,
0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08);")
++cpp_quote("DEFINE_GUID(DXGI_DEBUG_DX, 0x35cdd7fc, 0x13b2, 0x421d,
0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64);")
++cpp_quote("DEFINE_GUID(DXGI_DEBUG_DXGI, 0x25cddaa4, 0xb1c6, 0x47e1,
0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a);")
++cpp_quote("DEFINE_GUID(DXGI_DEBUG_APP, 0x06cd6e01, 0x4219, 0x4ebd,
0x87, 0x90, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62);")
++
++typedef enum DXGI_DEBUG_RLO_FLAGS {
++ DXGI_DEBUG_RLO_SUMMARY = 0x0001,
++ DXGI_DEBUG_RLO_DETAIL = 0x0002,
++ DXGI_DEBUG_RLO_IGNORE_INTERNAL = 0x0004,
++ DXGI_DEBUG_RLO_ALL = 0x0007
++} DXGI_DEBUG_RLO_FLAGS;
++
++[
++ object,
++ local,
++ uuid(119e7452-de9e-40fe-8806-88f90c12b441)
++]
++interface IDXGIDebug : IUnknown
++{
++ HRESULT ReportLiveObjects(
++ [in] GUID apiid,
++ [in] DXGI_DEBUG_RLO_FLAGS flags);
++}
++
+--
+1.9.5.msysgit.0
+
diff --git a/contrib/src/d3d11/id3d11videodecoder.patch
b/contrib/src/d3d11/id3d11videodecoder.patch
new file mode 100644
index 0000000..2c68d01
--- /dev/null
+++ b/contrib/src/d3d11/id3d11videodecoder.patch
@@ -0,0 +1,221 @@
+diff --git a/d3d11.idl b/d3d11.idl
+--- a/d3d11.idl
++++ b/d3d11.idl
+@@ -2125,6 +2125,214 @@ interface ID3D11Device : IUnknown
+ UINT GetExceptionMode();
+ }
+
++typedef enum D3D11_VDOV_DIMENSION
++{
++ D3D11_VDOV_DIMENSION_UNKNOWN = 0,
++ D3D11_VDOV_DIMENSION_TEXTURE2D
++} D3D11_VDOV_DIMENSION;
++
++typedef struct D3D11_TEX2D_VDOV
++{
++ UINT ArraySlice;
++} D3D11_TEX2D_VDOV;
++
++typedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC
++{
++ GUID DecodeProfile;
++ D3D11_VDOV_DIMENSION ViewDimension;
++
++ union
++ {
++ D3D11_TEX2D_VDOV Texture2D;
++ };
++} D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC;
++
++[
++ object,
++ local,
++ uuid(c2931aea-2a85-4f20-860f-fba1fd256e18)
++]
++interface ID3D11VideoDecoderOutputView : ID3D11View
++{
++ void GetDesc(
++ [out] D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc );
++}
++
++[
++ object,
++ local,
++ uuid(3c9c5b51-995d-48d1-9b8d-fa5caeded65c)
++]
++interface ID3D11VideoDecoder : ID3D11DeviceChild
++{
++}
++
++typedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE
++{
++ D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,
++ D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL,
++ D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE,
++ D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL,
++ D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX,
++ D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL,
++ D3D11_VIDEO_DECODER_BUFFER_BITSTREAM,
++ D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR,
++ D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN
++} D3D11_VIDEO_DECODER_BUFFER_TYPE;
++
++typedef struct D3D11_ENCRYPTED_BLOCK_INFO
++{
++ UINT NumEncryptedBytesAtBeginning;
++ UINT NumBytesInSkipPattern;
++ UINT NumBytesInEncryptPattern;
++} D3D11_ENCRYPTED_BLOCK_INFO;
++
++typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC
++{
++ D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;
++ UINT BufferIndex;
++ UINT DataOffset;
++ UINT DataSize;
++ UINT FirstMBaddress;
++ UINT NumMBsInBuffer;
++ UINT Width;
++ UINT Height;
++ UINT Stride;
++ UINT ReservedBits;
++ void *pIV;
++ UINT IVSize;
++ BOOL PartialEncryption;
++ D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo;
++} D3D11_VIDEO_DECODER_BUFFER_DESC;
++
++[
++ object,
++ local,
++ uuid(61f21c45-3c0e-4a74-9cea-67100d9ad5e4)
++]
++interface ID3D11VideoContext : ID3D11DeviceChild
++{
++ HRESULT GetDecoderBuffer(
++ [in] ID3D11VideoDecoder *pDecoder,
++ [in] D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType,
++ [out] UINT *pBufferSize,
++ [out] void **ppBuffer);
++ HRESULT ReleaseDecoderBuffer(
++ [in] ID3D11VideoDecoder *pDecoder,
++ [in] D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType);
++ HRESULT DecoderBeginFrame(
++ [in] ID3D11VideoDecoder *pDecoder,
++ [in] ID3D11VideoDecoderOutputView *pVideoDecoderOutputView,
++ [in] UINT ContentKeySize,
++ [in] const void *pContentKey);
++ HRESULT DecoderEndFrame(
++ [in] ID3D11VideoDecoder *pDecoder);
++ HRESULT SubmitDecoderBuffers(
++ [in] ID3D11VideoDecoder *pDecoder,
++ [in] UINT NumBuffers,
++ [in] const D3D11_VIDEO_DECODER_BUFFER_DESC *pBufferDesc);
++}
++
++typedef struct D3D11_VIDEO_DECODER_DESC
++{
++ GUID Guid;
++ UINT SampleWidth;
++ UINT SampleHeight;
++ DXGI_FORMAT OutputFormat;
++} D3D11_VIDEO_DECODER_DESC;
++
++typedef struct D3D11_VIDEO_DECODER_CONFIG
++{
++ GUID guidConfigBitstreamEncryption;
++ GUID guidConfigMBcontrolEncryption;
++ GUID guidConfigResidDiffEncryption;
++ UINT ConfigBitstreamRaw;
++ UINT ConfigMBcontrolRasterOrder;
++ UINT ConfigResidDiffHost;
++ UINT ConfigSpatialResid8;
++ UINT ConfigResid8Subtraction;
++ UINT ConfigSpatialHost8or9Clipping;
++ UINT ConfigSpatialResidInterleaved;
++ UINT ConfigIntraResidUnsigned;
++ UINT ConfigResidDiffAccelerator;
++ UINT ConfigHostInverseScan;
++ UINT ConfigSpecificIDCT;
++ UINT Config4GroupedCoefs;
++ USHORT ConfigMinRenderTargetBuffCount;
++ USHORT ConfigDecoderSpecific;
++} D3D11_VIDEO_DECODER_CONFIG;
++
++typedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE
++{
++ D3D11_AUTHENTICATED_CHANNEL_D3D11 = 1,
++ D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE,
++ D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE
++} D3D11_AUTHENTICATED_CHANNEL_TYPE;
++
++interface ID3D11VideoProcessorEnumerator;
++interface ID3D11VideoProcessor;
++interface ID3D11VideoProcessorInputView;
++interface ID3D11VideoProcessorOutputView;
++interface ID3D11AuthenticatedChannel;
++interface ID3D11CryptoSession;
++
++[
++ object,
++ local,
++ uuid(10ec4d5b-975a-4689-b9e4-d0aac30fe333)
++]
++interface ID3D11VideoDevice : IUnknown
++{
++ HRESULT CreateVideoDecoder(
++ [in] const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
++ [in] const D3D11_VIDEO_DECODER_CONFIG *pConfig,
++ [out] ID3D11VideoDecoder **ppVideoDecoder);
++ HRESULT CreateVideoProcessor(
++ [in] ID3D11VideoProcessorEnumerator *ppProcEnumerator,
++ [in] UINT RateConversionIndex,
++ [out] ID3D11VideoProcessor **ppVideoProcessor);
++ HRESULT CreateAuthenticatedChannel(
++ [in] D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
++ [out] ID3D11AuthenticatedChannel **ppAuthenticatedChannel);
++ HRESULT CreateCryptoSession(
++ [in] const GUID *pCryptoType,
++ [in] const GUID *pDecoderProfile,
++ [in] const GUID *pKeyExchangeType,
++ [out] ID3D11CryptoSession **ppCryptoSession);
++ HRESULT CreateVideoDecoderOutputView(
++ [in] ID3D11Resource *pResource,
++ [in] const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
++ [out] ID3D11VideoDecoderOutputView **ppVideoDecoderOutputView);
++ HRESULT CreateVideoProcessorInputView(
++ [in] ID3D11Resource *pResource,
++ [in] ID3D11VideoProcessorEnumerator *ppProcEnumerator,
++ [in] const void *pInputDesc, /*
D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC */
++ [out] ID3D11VideoProcessorInputView **ppVideoProcInputView);
++ HRESULT CreateVideoProcessorOutputView(
++ [in] ID3D11Resource *pResource,
++ [in] ID3D11VideoProcessorEnumerator *pEnumerator,
++ [in] const void *pOutputDesc, /*
D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC */
++ [out] ID3D11VideoProcessorOutputView **ppVideoProcOutputView);
++ HRESULT CreateVideoProcessorEnumerator(
++ [in] const void *pContentDesc, /*
D3D11_VIDEO_PROCESSOR_CONTENT_DESC */
++ [out] ID3D11VideoProcessorEnumerator **ppProcEnumerator);
++ UINT GetVideoDecoderProfileCount(void);
++ HRESULT GetVideoDecoderProfile(
++ [in] UINT DecoderIndex,
++ [out] GUID *pDecoderProfile);
++ HRESULT CheckVideoDecoderFormat(
++ [in] const GUID *pDecoderProfile,
++ [in] DXGI_FORMAT Format,
++ [out] BOOL *pSupported);
++ HRESULT GetVideoDecoderConfigCount(
++ [in] const D3D11_VIDEO_DECODER_DESC *pDesc,
++ [out] UINT *pCount);
++ HRESULT GetVideoDecoderConfig(
++ [in] const D3D11_VIDEO_DECODER_DESC *pDesc,
++ [in] UINT DecoderIndex,
++ [out] D3D11_VIDEO_DECODER_CONFIG *pConfig);
++}
++
+ typedef enum D3D11_CREATE_DEVICE_FLAG {
+ D3D11_CREATE_DEVICE_SINGLETHREADED = 0x0001,
+ D3D11_CREATE_DEVICE_DEBUG = 0x0002,
+--
+1.9.5.msysgit.0
+
diff --git a/contrib/src/d3d11/rules.mak b/contrib/src/d3d11/rules.mak
new file mode 100644
index 0000000..21b26f6
--- /dev/null
+++ b/contrib/src/d3d11/rules.mak
@@ -0,0 +1,29 @@
+# generate Direct3D11 temporary include
+
+#ugly way to get the default location of standard idl files
+IDL_INC_PATH = /`echo $(MSYSTEM) | tr A-Z a-z`/$(BUILD)/include
+
+D3D11_IDL_URL :=
http://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/direct-x/include/d3d11.idl?format=raw
+DST_D3D11_H = $(PREFIX)/include/d3d11.h
+DST_DXGIDEBUG_H = $(PREFIX)/include/dxgidebug.h
+
+
+ifdef HAVE_WIN32
+PKGS += d3d11
+endif
+
+$(TARBALLS)/d3d11.idl:
+ $(call download,$(D3D11_IDL_URL))
+ (cd $(TARBALLS) && patch -fp1) < $(SRC)/d3d11/id3d11videodecoder.patch
+
+$(TARBALLS)/dxgidebug.idl:
+ (cd $(TARBALLS) && patch -fp1) < $(SRC)/d3d11/dxgidebug.patch
+
+$(DST_D3D11_H): $(TARBALLS)/d3d11.idl
+ widl -DBOOL=WINBOOL -I$(IDL_INC_PATH) -h -o $@ $<
+
+$(DST_DXGIDEBUG_H): $(TARBALLS)/dxgidebug.idl
+ widl -DBOOL=WINBOOL -I$(IDL_INC_PATH) -h -o $@ $<
+
+.d3d11: $(DST_D3D11_H) $(DST_DXGIDEBUG_H)
+ touch $@
--
1.9.5.msysgit.0
More information about the vlc-devel
mailing list