1 | /* $Id: VBoxDXDDIVideo.cpp 102505 2023-12-06 14:48:31Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | * VirtualBox D3D11 user mode DDI interface for video.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Copyright (C) 2023 Oracle and/or its affiliates.
|
---|
8 | *
|
---|
9 | * This file is part of VirtualBox base platform packages, as
|
---|
10 | * available from https://www.virtualbox.org.
|
---|
11 | *
|
---|
12 | * This program is free software; you can redistribute it and/or
|
---|
13 | * modify it under the terms of the GNU General Public License
|
---|
14 | * as published by the Free Software Foundation, in version 3 of the
|
---|
15 | * License.
|
---|
16 | *
|
---|
17 | * This program is distributed in the hope that it will be useful, but
|
---|
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
20 | * General Public License for more details.
|
---|
21 | *
|
---|
22 | * You should have received a copy of the GNU General Public License
|
---|
23 | * along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
24 | *
|
---|
25 | * SPDX-License-Identifier: GPL-3.0-only
|
---|
26 | */
|
---|
27 |
|
---|
28 | #define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
|
---|
29 | #define INITGUID
|
---|
30 |
|
---|
31 | #include <iprt/alloc.h>
|
---|
32 | #include <iprt/errcore.h>
|
---|
33 | #include <iprt/initterm.h>
|
---|
34 | #include <VBox/log.h>
|
---|
35 |
|
---|
36 | #include <iprt/win/windows.h>
|
---|
37 | #include <iprt/win/d3dkmthk.h>
|
---|
38 |
|
---|
39 | #include <d3d10umddi.h>
|
---|
40 |
|
---|
41 | #include "VBoxDX.h"
|
---|
42 | #include "VBoxDXCmd.h"
|
---|
43 |
|
---|
44 | #include <VBoxWddmUmHlp.h>
|
---|
45 |
|
---|
46 |
|
---|
47 | static VOID APIENTRY ddi11_1GetVideoDecoderProfileCount(
|
---|
48 | D3D10DDI_HDEVICE hDevice,
|
---|
49 | UINT *pDecodeProfileCount)
|
---|
50 | {
|
---|
51 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
52 | //DEBUG_BREAKPOINT_TEST();
|
---|
53 | vboxDXGetVideoDecoderProfileCount(pDevice, pDecodeProfileCount);
|
---|
54 | }
|
---|
55 |
|
---|
56 | static VOID APIENTRY ddi11_1GetVideoDecoderProfile(
|
---|
57 | D3D10DDI_HDEVICE hDevice,
|
---|
58 | UINT Index,
|
---|
59 | GUID *pGuid)
|
---|
60 | {
|
---|
61 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
62 | //DEBUG_BREAKPOINT_TEST();
|
---|
63 | vboxDXGetVideoDecoderProfile(pDevice, Index, pGuid);
|
---|
64 | }
|
---|
65 |
|
---|
66 | static VOID APIENTRY ddi11_1CheckVideoDecoderFormat(
|
---|
67 | D3D10DDI_HDEVICE hDevice,
|
---|
68 | CONST GUID *pDecoderProfile,
|
---|
69 | DXGI_FORMAT Format,
|
---|
70 | BOOL *pSupported)
|
---|
71 | {
|
---|
72 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
73 | //DEBUG_BREAKPOINT_TEST();
|
---|
74 | vboxDXCheckVideoDecoderFormat(pDevice, pDecoderProfile, Format, pSupported);
|
---|
75 | }
|
---|
76 |
|
---|
77 | static VOID APIENTRY ddi11_1GetVideoDecoderConfigCount(
|
---|
78 | D3D10DDI_HDEVICE hDevice,
|
---|
79 | CONST D3D11_1DDI_VIDEO_DECODER_DESC *pDecodeDesc,
|
---|
80 | UINT *pConfigCount)
|
---|
81 | {
|
---|
82 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
83 | //DEBUG_BREAKPOINT_TEST();
|
---|
84 | vboxDXGetVideoDecoderConfigCount(pDevice, pDecodeDesc, pConfigCount);
|
---|
85 | }
|
---|
86 |
|
---|
87 | static VOID APIENTRY ddi11_1GetVideoDecoderConfig(
|
---|
88 | D3D10DDI_HDEVICE hDevice,
|
---|
89 | CONST D3D11_1DDI_VIDEO_DECODER_DESC *pDecodeDesc,
|
---|
90 | UINT Index,
|
---|
91 | D3D11_1DDI_VIDEO_DECODER_CONFIG *pConfig)
|
---|
92 | {
|
---|
93 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
94 | //DEBUG_BREAKPOINT_TEST();
|
---|
95 | vboxDXGetVideoDecoderConfig(pDevice, pDecodeDesc, Index, pConfig);
|
---|
96 | }
|
---|
97 |
|
---|
98 | /* There are no corresponding D3D11 host API so return the hardcoded information about buffers.
|
---|
99 | *
|
---|
100 | * D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO::Usage has to be D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY,
|
---|
101 | * otherwise Windows refuses to use the decoder.
|
---|
102 | */
|
---|
103 | static D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO const g_aBufferInfo[] =
|
---|
104 | {
|
---|
105 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
106 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
107 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
108 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
109 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
110 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_SLICE_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
111 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_BITSTREAM, _1M, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
112 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_MOTION_VECTOR, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
113 | { D3D11_1DDI_VIDEO_DECODER_BUFFER_FILM_GRAIN, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
|
---|
114 | };
|
---|
115 |
|
---|
116 | static VOID APIENTRY ddi11_1GetVideoDecoderBufferTypeCount(
|
---|
117 | D3D10DDI_HDEVICE hDevice,
|
---|
118 | CONST D3D11_1DDI_VIDEO_DECODER_DESC *pDecodeDesc,
|
---|
119 | UINT *pBufferTypeCount)
|
---|
120 | {
|
---|
121 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
122 | //DEBUG_BREAKPOINT_TEST();
|
---|
123 | RT_NOREF(pDevice, pDecodeDesc);
|
---|
124 | *pBufferTypeCount = RT_ELEMENTS(g_aBufferInfo);
|
---|
125 | }
|
---|
126 |
|
---|
127 | static VOID APIENTRY ddi11_1GetVideoDecoderBufferInfo(
|
---|
128 | D3D10DDI_HDEVICE hDevice,
|
---|
129 | CONST D3D11_1DDI_VIDEO_DECODER_DESC *pDecodeDesc,
|
---|
130 | UINT Index,
|
---|
131 | D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO *pInfo)
|
---|
132 | {
|
---|
133 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
134 | //DEBUG_BREAKPOINT_TEST();
|
---|
135 | RT_NOREF(pDevice, pDecodeDesc);
|
---|
136 | *pInfo = g_aBufferInfo[Index];
|
---|
137 | }
|
---|
138 |
|
---|
139 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoDecoderSize(
|
---|
140 | D3D10DDI_HDEVICE hDevice,
|
---|
141 | CONST D3D11_1DDIARG_CREATEVIDEODECODER *pDecoder)
|
---|
142 | {
|
---|
143 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
144 | //DEBUG_BREAKPOINT_TEST();
|
---|
145 | RT_NOREF(pDevice, pDecoder);
|
---|
146 | return sizeof(VBOXDXVIDEODECODER);
|
---|
147 | }
|
---|
148 |
|
---|
149 | static HRESULT APIENTRY ddi11_1CreateVideoDecoder(
|
---|
150 | D3D10DDI_HDEVICE hDevice,
|
---|
151 | CONST D3D11_1DDIARG_CREATEVIDEODECODER *pCreateData,
|
---|
152 | D3D11_1DDI_HDECODE hDecoder,
|
---|
153 | D3D11_1DDI_HRTDECODE hRTDecoder)
|
---|
154 | {
|
---|
155 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
156 | PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
|
---|
157 | //DEBUG_BREAKPOINT_TEST();
|
---|
158 |
|
---|
159 | RT_ZERO(*pVideoDecoder);
|
---|
160 | pVideoDecoder->hRTVideoDecoder = hRTDecoder;
|
---|
161 | return vboxDXCreateVideoDecoder(pDevice, pVideoDecoder, pCreateData->Desc, pCreateData->Config);
|
---|
162 | }
|
---|
163 |
|
---|
164 | static VOID APIENTRY ddi11_1DestroyVideoDecoder(
|
---|
165 | D3D10DDI_HDEVICE hDevice,
|
---|
166 | D3D11_1DDI_HDECODE hDecoder)
|
---|
167 | {
|
---|
168 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
169 | PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
|
---|
170 | //DEBUG_BREAKPOINT_TEST();
|
---|
171 |
|
---|
172 | vboxDXDestroyVideoDecoder(pDevice, pVideoDecoder);
|
---|
173 | }
|
---|
174 |
|
---|
175 | static HRESULT APIENTRY ddi11_1VideoDecoderExtension(
|
---|
176 | D3D10DDI_HDEVICE hDevice,
|
---|
177 | D3D11_1DDI_HDECODE hDecoder,
|
---|
178 | CONST D3D11_1DDIARG_VIDEODECODEREXTENSION *pExtension)
|
---|
179 | {
|
---|
180 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
181 | //DEBUG_BREAKPOINT_TEST();
|
---|
182 | RT_NOREF(pDevice, hDecoder, pExtension);
|
---|
183 | return E_INVALIDARG; /* Not supported. */
|
---|
184 | }
|
---|
185 |
|
---|
186 | static HRESULT APIENTRY ddi11_1VideoDecoderBeginFrame(
|
---|
187 | D3D10DDI_HDEVICE hDevice,
|
---|
188 | D3D11_1DDI_HDECODE hDecoder,
|
---|
189 | CONST D3D11_1DDIARG_VIDEODECODERBEGINFRAME *pBeginFrame)
|
---|
190 | {
|
---|
191 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
192 | PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
|
---|
193 | //DEBUG_BREAKPOINT_TEST();
|
---|
194 |
|
---|
195 | pVideoDecoder->Frame.pOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)pBeginFrame->hOutputView.pDrvPrivate;
|
---|
196 | return vboxDXVideoDecoderBeginFrame(pDevice, pVideoDecoder,
|
---|
197 | pVideoDecoder->Frame.pOutputView,
|
---|
198 | pBeginFrame->pContentKey, pBeginFrame->ContentKeySize);
|
---|
199 | }
|
---|
200 |
|
---|
201 | static VOID APIENTRY ddi11_1VideoDecoderEndFrame(
|
---|
202 | D3D10DDI_HDEVICE hDevice,
|
---|
203 | D3D11_1DDI_HDECODE hDecoder)
|
---|
204 | {
|
---|
205 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
206 | PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
|
---|
207 | //DEBUG_BREAKPOINT_TEST();
|
---|
208 |
|
---|
209 | pVideoDecoder->Frame.pOutputView = NULL;
|
---|
210 | vboxDXVideoDecoderEndFrame(pDevice, pVideoDecoder);
|
---|
211 | }
|
---|
212 |
|
---|
213 | static HRESULT APIENTRY ddi11_1VideoDecoderSubmitBuffers(
|
---|
214 | D3D10DDI_HDEVICE hDevice,
|
---|
215 | D3D11_1DDI_HDECODE hDecoder,
|
---|
216 | UINT BufferCount,
|
---|
217 | CONST D3D11_1DDI_VIDEO_DECODER_BUFFER_DESC *pBufferDesc)
|
---|
218 | {
|
---|
219 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
220 | PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
|
---|
221 | //DEBUG_BREAKPOINT_TEST();
|
---|
222 |
|
---|
223 | #ifdef LOG_ENABLED
|
---|
224 | for (UINT i = 0; i < BufferCount; ++i)
|
---|
225 | {
|
---|
226 | D3D11_1DDI_VIDEO_DECODER_BUFFER_DESC const *pDesc = &pBufferDesc[i];
|
---|
227 | LogFlowFunc(("at %d, size %d\n", pDesc->DataOffset, pDesc->DataSize));
|
---|
228 | RT_NOREF(pDesc);
|
---|
229 | }
|
---|
230 | #endif
|
---|
231 |
|
---|
232 | return vboxDXVideoDecoderSubmitBuffers(pDevice, pVideoDecoder, BufferCount, pBufferDesc);
|
---|
233 | }
|
---|
234 |
|
---|
235 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoProcessorEnumSize(
|
---|
236 | D3D10DDI_HDEVICE hDevice,
|
---|
237 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSORENUM *pProcessorEnum)
|
---|
238 | {
|
---|
239 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
240 | //DEBUG_BREAKPOINT_TEST();
|
---|
241 | RT_NOREF(pDevice, pProcessorEnum);
|
---|
242 | return sizeof(VBOXDXVIDEOPROCESSORENUM);
|
---|
243 | }
|
---|
244 |
|
---|
245 | static HRESULT APIENTRY ddi11_1CreateVideoProcessorEnum(
|
---|
246 | D3D10DDI_HDEVICE hDevice,
|
---|
247 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSORENUM *pCreateData,
|
---|
248 | D3D11_1DDI_HVIDEOPROCESSORENUM hVideoProcessorEnum,
|
---|
249 | D3D11_1DDI_HRTVIDEOPROCESSORENUM hRTVideoProcessorEnum)
|
---|
250 | {
|
---|
251 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
252 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hVideoProcessorEnum.pDrvPrivate;
|
---|
253 | //DEBUG_BREAKPOINT_TEST();
|
---|
254 |
|
---|
255 | RT_ZERO(*pVideoProcessorEnum);
|
---|
256 | pVideoProcessorEnum->hRTVideoProcessorEnum = hRTVideoProcessorEnum;
|
---|
257 | return vboxDXCreateVideoProcessorEnum(pDevice, pVideoProcessorEnum, &pCreateData->Desc);
|
---|
258 | }
|
---|
259 |
|
---|
260 | static VOID APIENTRY ddi11_1DestroyVideoProcessorEnum(
|
---|
261 | D3D10DDI_HDEVICE hDevice,
|
---|
262 | D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum)
|
---|
263 | {
|
---|
264 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
265 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
|
---|
266 | //DEBUG_BREAKPOINT_TEST();
|
---|
267 |
|
---|
268 | RT_NOREF(pDevice);
|
---|
269 | RT_ZERO(*pVideoProcessorEnum);
|
---|
270 | }
|
---|
271 |
|
---|
272 | static VOID APIENTRY ddi11_1CheckVideoProcessorFormat(
|
---|
273 | D3D10DDI_HDEVICE hDevice,
|
---|
274 | D3D11_1DDI_HVIDEOPROCESSORENUM hVideoProcessorEnum,
|
---|
275 | DXGI_FORMAT Format,
|
---|
276 | UINT *pSupported)
|
---|
277 | {
|
---|
278 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
279 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hVideoProcessorEnum.pDrvPrivate;
|
---|
280 | //DEBUG_BREAKPOINT_TEST();
|
---|
281 |
|
---|
282 | vboxDXCheckVideoProcessorFormat(pDevice, pVideoProcessorEnum, Format, pSupported);
|
---|
283 | }
|
---|
284 |
|
---|
285 | static VOID APIENTRY ddi11_1GetVideoProcessorCaps(
|
---|
286 | D3D10DDI_HDEVICE hDevice,
|
---|
287 | D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
|
---|
288 | D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps)
|
---|
289 | {
|
---|
290 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
291 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
|
---|
292 | //DEBUG_BREAKPOINT_TEST();
|
---|
293 |
|
---|
294 | vboxDXGetVideoProcessorCaps(pDevice, pVideoProcessorEnum, pCaps);
|
---|
295 | }
|
---|
296 |
|
---|
297 | static VOID APIENTRY ddi11_1GetVideoProcessorRateConversionCaps(
|
---|
298 | D3D10DDI_HDEVICE hDevice,
|
---|
299 | D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
|
---|
300 | UINT RateConversionIndex,
|
---|
301 | D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps)
|
---|
302 | {
|
---|
303 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
304 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
|
---|
305 | //DEBUG_BREAKPOINT_TEST();
|
---|
306 |
|
---|
307 | RT_NOREF(RateConversionIndex); /* One capability. */
|
---|
308 | vboxDXGetVideoProcessorRateConversionCaps(pDevice, pVideoProcessorEnum, pCaps);
|
---|
309 | }
|
---|
310 |
|
---|
311 | static VOID APIENTRY ddi11_1GetVideoProcessorCustomRate(
|
---|
312 | D3D10DDI_HDEVICE hDevice,
|
---|
313 | D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
|
---|
314 | UINT RateConversionIndex,
|
---|
315 | UINT CustomRateIndex,
|
---|
316 | D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate)
|
---|
317 | {
|
---|
318 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
319 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
|
---|
320 | //DEBUG_BREAKPOINT_TEST();
|
---|
321 |
|
---|
322 | RT_NOREF(RateConversionIndex); /* One capability. */
|
---|
323 | vboxDXGetVideoProcessorCustomRate(pDevice, pVideoProcessorEnum, CustomRateIndex, pRate);
|
---|
324 | }
|
---|
325 |
|
---|
326 | static VOID APIENTRY ddi11_1GetVideoProcessorFilterRange(
|
---|
327 | D3D10DDI_HDEVICE hDevice,
|
---|
328 | D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
|
---|
329 | D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter,
|
---|
330 | D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange)
|
---|
331 | {
|
---|
332 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
333 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
|
---|
334 | //DEBUG_BREAKPOINT_TEST();
|
---|
335 |
|
---|
336 | vboxDXGetVideoProcessorFilterRange(pDevice, pVideoProcessorEnum, Filter, pFilterRange);
|
---|
337 | }
|
---|
338 |
|
---|
339 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoProcessorSize(
|
---|
340 | D3D10DDI_HDEVICE hDevice,
|
---|
341 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSOR *pVideoProcessor)
|
---|
342 | {
|
---|
343 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
344 | //DEBUG_BREAKPOINT_TEST();
|
---|
345 | RT_NOREF(pDevice, pVideoProcessor);
|
---|
346 | return sizeof(VBOXDXVIDEOPROCESSOR);
|
---|
347 | }
|
---|
348 |
|
---|
349 | static HRESULT APIENTRY ddi11_1CreateVideoProcessor(
|
---|
350 | D3D10DDI_HDEVICE hDevice,
|
---|
351 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSOR *pCreateData,
|
---|
352 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
353 | D3D11_1DDI_HRTVIDEOPROCESSOR hRTVideoProcessor)
|
---|
354 | {
|
---|
355 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
356 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)pCreateData->hVideoProcessorEnum.pDrvPrivate;
|
---|
357 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
358 | //DEBUG_BREAKPOINT_TEST();
|
---|
359 |
|
---|
360 | RT_ZERO(*pVideoProcessor);
|
---|
361 | pVideoProcessor->hRTVideoProcessor = hRTVideoProcessor;
|
---|
362 | return vboxDXCreateVideoProcessor(pDevice, pVideoProcessor, pVideoProcessorEnum, pCreateData->RateConversionCapsIndex);
|
---|
363 | }
|
---|
364 |
|
---|
365 | static VOID APIENTRY ddi11_1DestroyVideoProcessor(
|
---|
366 | D3D10DDI_HDEVICE hDevice,
|
---|
367 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor)
|
---|
368 | {
|
---|
369 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
370 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
371 | //DEBUG_BREAKPOINT_TEST();
|
---|
372 |
|
---|
373 | vboxDXDestroyVideoProcessor(pDevice, pVideoProcessor);
|
---|
374 | }
|
---|
375 |
|
---|
376 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputTargetRect(
|
---|
377 | D3D10DDI_HDEVICE hDevice,
|
---|
378 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
379 | BOOL Enable,
|
---|
380 | CONST RECT *pOutputRect)
|
---|
381 | {
|
---|
382 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
383 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
384 | //DEBUG_BREAKPOINT_TEST();
|
---|
385 |
|
---|
386 | vboxDXVideoProcessorSetOutputTargetRect(pDevice, pVideoProcessor, Enable, pOutputRect);
|
---|
387 | }
|
---|
388 |
|
---|
389 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputBackgroundColor(
|
---|
390 | D3D10DDI_HDEVICE hDevice,
|
---|
391 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
392 | BOOL YCbCr,
|
---|
393 | CONST D3D11_1DDI_VIDEO_COLOR *pColor)
|
---|
394 | {
|
---|
395 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
396 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
397 | //DEBUG_BREAKPOINT_TEST();
|
---|
398 |
|
---|
399 | vboxDXVideoProcessorSetOutputBackgroundColor(pDevice, pVideoProcessor, YCbCr, pColor);
|
---|
400 | }
|
---|
401 |
|
---|
402 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputColorSpace(
|
---|
403 | D3D10DDI_HDEVICE hDevice,
|
---|
404 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
405 | CONST D3D11_1DDI_VIDEO_PROCESSOR_COLOR_SPACE *pColorspace)
|
---|
406 | {
|
---|
407 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
408 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
409 | //DEBUG_BREAKPOINT_TEST();
|
---|
410 |
|
---|
411 | vboxDXVideoProcessorSetOutputColorSpace(pDevice, pVideoProcessor, pColorspace);
|
---|
412 | }
|
---|
413 |
|
---|
414 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputAlphaFillMode(
|
---|
415 | D3D10DDI_HDEVICE hDevice,
|
---|
416 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
417 | D3D11_1DDI_VIDEO_PROCESSOR_ALPHA_FILL_MODE FillMode,
|
---|
418 | UINT StreamIndex)
|
---|
419 | {
|
---|
420 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
421 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
422 | //DEBUG_BREAKPOINT_TEST();
|
---|
423 |
|
---|
424 | vboxDXVideoProcessorSetOutputAlphaFillMode(pDevice, pVideoProcessor, FillMode, StreamIndex);
|
---|
425 | }
|
---|
426 |
|
---|
427 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputConstriction(
|
---|
428 | D3D10DDI_HDEVICE hDevice,
|
---|
429 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
430 | BOOL Enabled,
|
---|
431 | SIZE ConstrictonSize)
|
---|
432 | {
|
---|
433 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
434 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
435 | //DEBUG_BREAKPOINT_TEST();
|
---|
436 |
|
---|
437 | vboxDXVideoProcessorSetOutputConstriction(pDevice, pVideoProcessor, Enabled, ConstrictonSize);
|
---|
438 | }
|
---|
439 |
|
---|
440 | static VOID APIENTRY ddi11_1VideoProcessorSetOutputStereoMode(
|
---|
441 | D3D10DDI_HDEVICE hDevice,
|
---|
442 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
443 | BOOL Enable)
|
---|
444 | {
|
---|
445 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
446 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
447 | //DEBUG_BREAKPOINT_TEST();
|
---|
448 |
|
---|
449 | vboxDXVideoProcessorSetOutputStereoMode(pDevice, pVideoProcessor, Enable);
|
---|
450 | }
|
---|
451 |
|
---|
452 | static HRESULT APIENTRY ddi11_1VideoProcessorSetOutputExtension(
|
---|
453 | D3D10DDI_HDEVICE hDevice,
|
---|
454 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
455 | CONST GUID *pGuid,
|
---|
456 | UINT DataSize,
|
---|
457 | void *pData)
|
---|
458 | {
|
---|
459 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
460 | DEBUG_BREAKPOINT_TEST();
|
---|
461 | RT_NOREF(pDevice, hVideoProcessor, pGuid, DataSize, pData);
|
---|
462 | return S_OK;
|
---|
463 | }
|
---|
464 |
|
---|
465 | static HRESULT APIENTRY ddi11_1VideoProcessorGetOutputExtension(
|
---|
466 | D3D10DDI_HDEVICE hDevice,
|
---|
467 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
468 | CONST GUID *pGuid,
|
---|
469 | UINT DataSize,
|
---|
470 | void *pData)
|
---|
471 | {
|
---|
472 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
473 | DEBUG_BREAKPOINT_TEST();
|
---|
474 | RT_NOREF(pDevice, hVideoProcessor, pGuid, DataSize, pData);
|
---|
475 | return S_OK;
|
---|
476 | }
|
---|
477 |
|
---|
478 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamFrameFormat(
|
---|
479 | D3D10DDI_HDEVICE hDevice,
|
---|
480 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
481 | UINT StreamIndex,
|
---|
482 | D3D11_1DDI_VIDEO_FRAME_FORMAT Format)
|
---|
483 | {
|
---|
484 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
485 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
486 | //DEBUG_BREAKPOINT_TEST();
|
---|
487 |
|
---|
488 | vboxDXVideoProcessorSetStreamFrameFormat(pDevice, pVideoProcessor, StreamIndex, Format);
|
---|
489 | }
|
---|
490 |
|
---|
491 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamColorSpace(
|
---|
492 | D3D10DDI_HDEVICE hDevice,
|
---|
493 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
494 | UINT StreamIndex,
|
---|
495 | CONST D3D11_1DDI_VIDEO_PROCESSOR_COLOR_SPACE *pColorSpace)
|
---|
496 | {
|
---|
497 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
498 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
499 | //DEBUG_BREAKPOINT_TEST();
|
---|
500 |
|
---|
501 | vboxDXVideoProcessorSetStreamColorSpace(pDevice, pVideoProcessor, StreamIndex, pColorSpace);
|
---|
502 | }
|
---|
503 |
|
---|
504 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamOutputRate(
|
---|
505 | D3D10DDI_HDEVICE hDevice,
|
---|
506 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
507 | UINT StreamIndex,
|
---|
508 | D3D11_1DDI_VIDEO_PROCESSOR_OUTPUT_RATE OutputRate,
|
---|
509 | BOOL RepeatFrame,
|
---|
510 | CONST DXGI_RATIONAL *pCustomRate)
|
---|
511 | {
|
---|
512 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
513 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
514 | //DEBUG_BREAKPOINT_TEST();
|
---|
515 |
|
---|
516 | vboxDXVideoProcessorSetStreamOutputRate(pDevice, pVideoProcessor, StreamIndex, OutputRate, RepeatFrame, pCustomRate);
|
---|
517 | }
|
---|
518 |
|
---|
519 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamSourceRect(
|
---|
520 | D3D10DDI_HDEVICE hDevice,
|
---|
521 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
522 | UINT StreamIndex,
|
---|
523 | BOOL Enable,
|
---|
524 | CONST RECT *pSourceRect)
|
---|
525 | {
|
---|
526 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
527 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
528 | //DEBUG_BREAKPOINT_TEST();
|
---|
529 |
|
---|
530 | vboxDXVideoProcessorSetStreamSourceRect(pDevice, pVideoProcessor, StreamIndex, Enable, pSourceRect);
|
---|
531 | }
|
---|
532 |
|
---|
533 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamDestRect(
|
---|
534 | D3D10DDI_HDEVICE hDevice,
|
---|
535 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
536 | UINT StreamIndex,
|
---|
537 | BOOL Enable,
|
---|
538 | CONST RECT *pDestRect)
|
---|
539 | {
|
---|
540 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
541 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
542 | //DEBUG_BREAKPOINT_TEST();
|
---|
543 |
|
---|
544 | vboxDXVideoProcessorSetStreamDestRect(pDevice, pVideoProcessor, StreamIndex, Enable, pDestRect);
|
---|
545 | }
|
---|
546 |
|
---|
547 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamAlpha(
|
---|
548 | D3D10DDI_HDEVICE hDevice,
|
---|
549 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
550 | UINT StreamIndex,
|
---|
551 | BOOL Enable,
|
---|
552 | FLOAT Alpha)
|
---|
553 | {
|
---|
554 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
555 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
556 | //DEBUG_BREAKPOINT_TEST();
|
---|
557 |
|
---|
558 | vboxDXVideoProcessorSetStreamAlpha(pDevice, pVideoProcessor, StreamIndex, Enable, Alpha);
|
---|
559 | }
|
---|
560 |
|
---|
561 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamPalette(
|
---|
562 | D3D10DDI_HDEVICE hDevice,
|
---|
563 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
564 | UINT StreamIndex,
|
---|
565 | UINT Count,
|
---|
566 | CONST UINT *pEntries)
|
---|
567 | {
|
---|
568 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
569 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
570 | //DEBUG_BREAKPOINT_TEST();
|
---|
571 |
|
---|
572 | vboxDXVideoProcessorSetStreamPalette(pDevice, pVideoProcessor, StreamIndex, Count, pEntries);
|
---|
573 | }
|
---|
574 |
|
---|
575 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamPixelAspectRatio(
|
---|
576 | D3D10DDI_HDEVICE hDevice,
|
---|
577 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
578 | UINT StreamIndex,
|
---|
579 | BOOL Enable,
|
---|
580 | CONST DXGI_RATIONAL *pSourceRatio,
|
---|
581 | CONST DXGI_RATIONAL *pDestRatio)
|
---|
582 | {
|
---|
583 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
584 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
585 | //DEBUG_BREAKPOINT_TEST();
|
---|
586 |
|
---|
587 | vboxDXVideoProcessorSetStreamPixelAspectRatio(pDevice, pVideoProcessor, StreamIndex, Enable, pSourceRatio, pDestRatio);
|
---|
588 | }
|
---|
589 |
|
---|
590 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamLumaKey(
|
---|
591 | D3D10DDI_HDEVICE hDevice,
|
---|
592 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
593 | UINT StreamIndex,
|
---|
594 | BOOL Enable,
|
---|
595 | FLOAT Lower,
|
---|
596 | FLOAT Upper)
|
---|
597 | {
|
---|
598 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
599 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
600 | //DEBUG_BREAKPOINT_TEST();
|
---|
601 |
|
---|
602 | vboxDXVideoProcessorSetStreamLumaKey(pDevice, pVideoProcessor, StreamIndex, Enable, Lower, Upper);
|
---|
603 | }
|
---|
604 |
|
---|
605 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamStereoFormat(
|
---|
606 | D3D10DDI_HDEVICE hDevice,
|
---|
607 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
608 | UINT StreamIndex,
|
---|
609 | BOOL Enable,
|
---|
610 | D3D11_1DDI_VIDEO_PROCESSOR_STEREO_FORMAT StereoFormat,
|
---|
611 | BOOL LeftViewFrame0,
|
---|
612 | BOOL BaseViewFrame0,
|
---|
613 | D3D11_1DDI_VIDEO_PROCESSOR_STEREO_FLIP_MODE FlipMode,
|
---|
614 | int MonoOffset)
|
---|
615 | {
|
---|
616 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
617 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
618 | //DEBUG_BREAKPOINT_TEST();
|
---|
619 |
|
---|
620 | vboxDXVideoProcessorSetStreamStereoFormat(pDevice, pVideoProcessor, StreamIndex, Enable,
|
---|
621 | StereoFormat, LeftViewFrame0, BaseViewFrame0, FlipMode, MonoOffset);
|
---|
622 | }
|
---|
623 |
|
---|
624 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamAutoProcessingMode(
|
---|
625 | D3D10DDI_HDEVICE hDevice,
|
---|
626 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
627 | UINT StreamIndex,
|
---|
628 | BOOL Enable)
|
---|
629 | {
|
---|
630 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
631 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
632 | //DEBUG_BREAKPOINT_TEST();
|
---|
633 |
|
---|
634 | vboxDXVideoProcessorSetStreamAutoProcessingMode(pDevice, pVideoProcessor, StreamIndex, Enable);
|
---|
635 | }
|
---|
636 |
|
---|
637 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamFilter(
|
---|
638 | D3D10DDI_HDEVICE hDevice,
|
---|
639 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
640 | UINT StreamIndex,
|
---|
641 | D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter,
|
---|
642 | BOOL Enable,
|
---|
643 | int Level)
|
---|
644 | {
|
---|
645 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
646 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
647 | //DEBUG_BREAKPOINT_TEST();
|
---|
648 |
|
---|
649 | vboxDXVideoProcessorSetStreamFilter(pDevice, pVideoProcessor, StreamIndex, Enable, Filter, Level);
|
---|
650 | }
|
---|
651 |
|
---|
652 | static VOID APIENTRY ddi11_1VideoProcessorSetStreamRotation(
|
---|
653 | D3D10DDI_HDEVICE hDevice,
|
---|
654 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
655 | UINT StreamIndex,
|
---|
656 | BOOL Enable,
|
---|
657 | D3D11_1DDI_VIDEO_PROCESSOR_ROTATION Rotation)
|
---|
658 | {
|
---|
659 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
660 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
661 | //DEBUG_BREAKPOINT_TEST();
|
---|
662 |
|
---|
663 | vboxDXVideoProcessorSetStreamRotation(pDevice, pVideoProcessor, StreamIndex, Enable, Rotation);
|
---|
664 | }
|
---|
665 |
|
---|
666 | static HRESULT APIENTRY ddi11_1VideoProcessorSetStreamExtension(
|
---|
667 | D3D10DDI_HDEVICE hDevice,
|
---|
668 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
669 | UINT StreamIndex,
|
---|
670 | CONST GUID *pGuid,
|
---|
671 | UINT DataSize,
|
---|
672 | void *pData)
|
---|
673 | {
|
---|
674 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
675 | //DEBUG_BREAKPOINT_TEST();
|
---|
676 | RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData);
|
---|
677 | return E_INVALIDARG; /* Not supported. */
|
---|
678 | }
|
---|
679 |
|
---|
680 | static HRESULT APIENTRY ddi11_1VideoProcessorGetStreamExtension(
|
---|
681 | D3D10DDI_HDEVICE hDevice,
|
---|
682 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
683 | UINT StreamIndex,
|
---|
684 | CONST GUID *pGuid,
|
---|
685 | UINT DataSize,
|
---|
686 | void *pData)
|
---|
687 | {
|
---|
688 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
689 | //DEBUG_BREAKPOINT_TEST();
|
---|
690 | RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData);
|
---|
691 | return E_INVALIDARG; /* Not supported. */
|
---|
692 | }
|
---|
693 |
|
---|
694 | static HRESULT APIENTRY ddi11_1VideoProcessorBlt(
|
---|
695 | D3D10DDI_HDEVICE hDevice,
|
---|
696 | D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor,
|
---|
697 | D3D11_1DDI_HVIDEOPROCESSOROUTPUTVIEW hOutputView,
|
---|
698 | UINT OutputFrame,
|
---|
699 | UINT StreamCount,
|
---|
700 | CONST D3D11_1DDI_VIDEO_PROCESSOR_STREAM *pStream)
|
---|
701 | {
|
---|
702 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
703 | PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
|
---|
704 | PVBOXDXVIDEOPROCESSOROUTPUTVIEW pVideoProcessorOutputView = (PVBOXDXVIDEOPROCESSOROUTPUTVIEW)hOutputView.pDrvPrivate;
|
---|
705 | //DEBUG_BREAKPOINT_TEST();
|
---|
706 |
|
---|
707 | return vboxDXVideoProcessorBlt(pDevice, pVideoProcessor, pVideoProcessorOutputView, OutputFrame, StreamCount, pStream);
|
---|
708 | }
|
---|
709 |
|
---|
710 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoDecoderOutputViewSize(
|
---|
711 | D3D10DDI_HDEVICE hDevice,
|
---|
712 | CONST D3D11_1DDIARG_CREATEVIDEODECODEROUTPUTVIEW *pView)
|
---|
713 | {
|
---|
714 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
715 | //DEBUG_BREAKPOINT_TEST();
|
---|
716 | RT_NOREF(pDevice, pView);
|
---|
717 | return sizeof(VBOXDXVIDEODECODEROUTPUTVIEW);
|
---|
718 | }
|
---|
719 |
|
---|
720 | static HRESULT APIENTRY ddi11_1CreateVideoDecoderOutputView(
|
---|
721 | D3D10DDI_HDEVICE hDevice,
|
---|
722 | CONST D3D11_1DDIARG_CREATEVIDEODECODEROUTPUTVIEW *pCreateData,
|
---|
723 | D3D11_1DDI_HVIDEODECODEROUTPUTVIEW hView,
|
---|
724 | D3D11_1DDI_HRTVIDEODECODEROUTPUTVIEW hRTView)
|
---|
725 | {
|
---|
726 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
727 | PVBOXDX_RESOURCE pResource = (PVBOXDX_RESOURCE)pCreateData->hDrvResource.pDrvPrivate;
|
---|
728 | PVBOXDXVIDEODECODEROUTPUTVIEW pVideoDecoderOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)hView.pDrvPrivate;
|
---|
729 | //DEBUG_BREAKPOINT_TEST();
|
---|
730 |
|
---|
731 | RT_ZERO(*pVideoDecoderOutputView);
|
---|
732 | pVideoDecoderOutputView->hRTView = hRTView;
|
---|
733 | return vboxDXCreateVideoDecoderOutputView(pDevice, pVideoDecoderOutputView, pResource,
|
---|
734 | pCreateData->DecodeProfile, pCreateData->MipSlice, pCreateData->FirstArraySlice, pCreateData->ArraySize);
|
---|
735 | }
|
---|
736 |
|
---|
737 | static VOID APIENTRY ddi11_1DestroyVideoDecoderOutputView(
|
---|
738 | D3D10DDI_HDEVICE hDevice,
|
---|
739 | D3D11_1DDI_HVIDEODECODEROUTPUTVIEW hView)
|
---|
740 | {
|
---|
741 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
742 | PVBOXDXVIDEODECODEROUTPUTVIEW pVideoDecoderOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)hView.pDrvPrivate;
|
---|
743 | //DEBUG_BREAKPOINT_TEST();
|
---|
744 |
|
---|
745 | vboxDXDestroyVideoDecoderOutputView(pDevice, pVideoDecoderOutputView);
|
---|
746 | }
|
---|
747 |
|
---|
748 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoProcessorInputViewSize(
|
---|
749 | D3D10DDI_HDEVICE hDevice,
|
---|
750 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSORINPUTVIEW *pView)
|
---|
751 | {
|
---|
752 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
753 | //DEBUG_BREAKPOINT_TEST();
|
---|
754 | RT_NOREF(pDevice, pView);
|
---|
755 | return sizeof(VBOXDXVIDEOPROCESSORINPUTVIEW);
|
---|
756 | }
|
---|
757 |
|
---|
758 | static HRESULT APIENTRY ddi11_1CreateVideoProcessorInputView(
|
---|
759 | D3D10DDI_HDEVICE hDevice,
|
---|
760 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSORINPUTVIEW *pCreateData,
|
---|
761 | D3D11_1DDI_HVIDEOPROCESSORINPUTVIEW hView,
|
---|
762 | D3D11_1DDI_HRTVIDEOPROCESSORINPUTVIEW hRTView)
|
---|
763 | {
|
---|
764 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
765 | PVBOXDX_RESOURCE pResource = (PVBOXDX_RESOURCE)pCreateData->hDrvResource.pDrvPrivate;
|
---|
766 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)pCreateData->hDrvVideoProcessorEnum.pDrvPrivate;
|
---|
767 | PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
|
---|
768 | //DEBUG_BREAKPOINT_TEST();
|
---|
769 |
|
---|
770 | pVideoProcessorInputView->hRTView = hRTView;
|
---|
771 | return vboxDXCreateVideoProcessorInputView(pDevice, pVideoProcessorInputView, pResource, pVideoProcessorEnum,
|
---|
772 | pCreateData->FourCC, pCreateData->MipSlice, pCreateData->FirstArraySlice, pCreateData->ArraySize);
|
---|
773 | }
|
---|
774 |
|
---|
775 | static VOID APIENTRY ddi11_1DestroyVideoProcessorInputView(
|
---|
776 | D3D10DDI_HDEVICE hDevice,
|
---|
777 | D3D11_1DDI_HVIDEOPROCESSORINPUTVIEW hView)
|
---|
778 | {
|
---|
779 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
780 | PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
|
---|
781 | //DEBUG_BREAKPOINT_TEST();
|
---|
782 |
|
---|
783 | vboxDXDestroyVideoProcessorInputView(pDevice, pVideoProcessorInputView);
|
---|
784 | }
|
---|
785 |
|
---|
786 | static SIZE_T APIENTRY ddi11_1CalcPrivateVideoProcessorOutputViewSize(
|
---|
787 | D3D10DDI_HDEVICE hDevice,
|
---|
788 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSOROUTPUTVIEW *pView)
|
---|
789 | {
|
---|
790 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
791 | //DEBUG_BREAKPOINT_TEST();
|
---|
792 | RT_NOREF(pDevice, pView);
|
---|
793 | return sizeof(VBOXDXVIDEOPROCESSOROUTPUTVIEW);
|
---|
794 | }
|
---|
795 |
|
---|
796 | static HRESULT APIENTRY ddi11_1CreateVideoProcessorOutputView(
|
---|
797 | D3D10DDI_HDEVICE hDevice,
|
---|
798 | CONST D3D11_1DDIARG_CREATEVIDEOPROCESSOROUTPUTVIEW *pCreateData,
|
---|
799 | D3D11_1DDI_HVIDEOPROCESSOROUTPUTVIEW hView,
|
---|
800 | D3D11_1DDI_HRTVIDEOPROCESSOROUTPUTVIEW hRTView)
|
---|
801 | {
|
---|
802 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
803 | PVBOXDX_RESOURCE pResource = (PVBOXDX_RESOURCE)pCreateData->hDrvResource.pDrvPrivate;
|
---|
804 | PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)pCreateData->hDrvVideoProcessorEnum.pDrvPrivate;
|
---|
805 | PVBOXDXVIDEOPROCESSOROUTPUTVIEW pVideoProcessorOutputView = (PVBOXDXVIDEOPROCESSOROUTPUTVIEW)hView.pDrvPrivate;
|
---|
806 | //DEBUG_BREAKPOINT_TEST();
|
---|
807 |
|
---|
808 | pVideoProcessorOutputView->hRTView = hRTView;
|
---|
809 | return vboxDXCreateVideoProcessorOutputView(pDevice, pVideoProcessorOutputView, pResource, pVideoProcessorEnum,
|
---|
810 | pCreateData->MipSlice, pCreateData->FirstArraySlice, pCreateData->ArraySize);
|
---|
811 | }
|
---|
812 |
|
---|
813 | static VOID APIENTRY ddi11_1DestroyVideoProcessorOutputView(
|
---|
814 | D3D10DDI_HDEVICE hDevice,
|
---|
815 | D3D11_1DDI_HVIDEOPROCESSOROUTPUTVIEW hView)
|
---|
816 | {
|
---|
817 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
818 | PVBOXDXVIDEOPROCESSOROUTPUTVIEW pVideoProcessorOutputView = (PVBOXDXVIDEOPROCESSOROUTPUTVIEW)hView.pDrvPrivate;
|
---|
819 | //DEBUG_BREAKPOINT_TEST();
|
---|
820 |
|
---|
821 | vboxDXDestroyVideoProcessorOutputView(pDevice, pVideoProcessorOutputView);
|
---|
822 | }
|
---|
823 |
|
---|
824 | static VOID APIENTRY ddi11_1VideoProcessorInputViewReadAfterWriteHazard(
|
---|
825 | D3D10DDI_HDEVICE hDevice,
|
---|
826 | D3D11_1DDI_HVIDEOPROCESSORINPUTVIEW hView,
|
---|
827 | D3D10DDI_HRESOURCE hResource)
|
---|
828 | {
|
---|
829 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
830 | PVBOXDX_RESOURCE pResource = (PVBOXDX_RESOURCE)hResource.pDrvPrivate;
|
---|
831 | PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
|
---|
832 | //DEBUG_BREAKPOINT_TEST();
|
---|
833 |
|
---|
834 | RT_NOREF(pDevice, pVideoProcessorInputView, pResource);
|
---|
835 | }
|
---|
836 |
|
---|
837 | static HRESULT APIENTRY ddi11_1GetContentProtectionCaps(
|
---|
838 | D3D10DDI_HDEVICE hDevice,
|
---|
839 | CONST GUID *pCryptoType,
|
---|
840 | CONST GUID *pDecodeProfile,
|
---|
841 | D3D11_1DDI_VIDEO_CONTENT_PROTECTION_CAPS *pCaps)
|
---|
842 | {
|
---|
843 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
844 | DEBUG_BREAKPOINT_TEST();
|
---|
845 | RT_NOREF(pDevice, pCryptoType, pDecodeProfile, pCaps);
|
---|
846 | return D3DERR_UNSUPPORTEDCRYPTO;
|
---|
847 | }
|
---|
848 |
|
---|
849 | static HRESULT APIENTRY ddi11_1GetCryptoKeyExchangeType(
|
---|
850 | D3D10DDI_HDEVICE hDevice,
|
---|
851 | CONST GUID *pCryptoType,
|
---|
852 | CONST GUID *pDecodeProfile,
|
---|
853 | UINT Index,
|
---|
854 | GUID *pKeyExchangeType)
|
---|
855 | {
|
---|
856 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
857 | DEBUG_BREAKPOINT_TEST();
|
---|
858 | RT_NOREF(pDevice, pCryptoType, pDecodeProfile, Index, pKeyExchangeType);
|
---|
859 | return D3DERR_UNSUPPORTEDCRYPTO;
|
---|
860 | }
|
---|
861 |
|
---|
862 | static SIZE_T APIENTRY ddi11_1CalcPrivateCryptoSessionSize(
|
---|
863 | D3D10DDI_HDEVICE hDevice,
|
---|
864 | CONST D3D11_1DDIARG_CREATECRYPTOSESSION *pCreateData)
|
---|
865 | {
|
---|
866 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
867 | //DEBUG_BREAKPOINT_TEST();
|
---|
868 | RT_NOREF(pDevice, pCreateData);
|
---|
869 | return sizeof(VBOXDXVIDEOCRYPTOSESSION);
|
---|
870 | }
|
---|
871 |
|
---|
872 | static HRESULT APIENTRY ddi11_1CreateCryptoSession(
|
---|
873 | D3D10DDI_HDEVICE hDevice,
|
---|
874 | CONST D3D11_1DDIARG_CREATECRYPTOSESSION *pCreateData,
|
---|
875 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
876 | D3D11_1DDI_HRTCRYPTOSESSION hRTCryptoSession)
|
---|
877 | {
|
---|
878 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
879 | PVBOXDXVIDEOCRYPTOSESSION pCryptoSession = (PVBOXDXVIDEOCRYPTOSESSION)hCryptoSession.pDrvPrivate;
|
---|
880 | DEBUG_BREAKPOINT_TEST();
|
---|
881 | RT_NOREF(pDevice);
|
---|
882 | RT_ZERO(*pCryptoSession);
|
---|
883 | pCryptoSession->hRTCryptoSession = hRTCryptoSession;
|
---|
884 | RT_NOREF(pCreateData);
|
---|
885 | return D3DDDIERR_UNSUPPORTEDCRYPTO;
|
---|
886 | }
|
---|
887 |
|
---|
888 | static VOID APIENTRY ddi11_1DestroyCryptoSession(
|
---|
889 | D3D10DDI_HDEVICE hDevice,
|
---|
890 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession)
|
---|
891 | {
|
---|
892 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
893 | DEBUG_BREAKPOINT_TEST();
|
---|
894 | RT_NOREF(pDevice, hCryptoSession);
|
---|
895 | return;
|
---|
896 | }
|
---|
897 |
|
---|
898 | static VOID APIENTRY ddi11_1GetCertificateSize(
|
---|
899 | D3D10DDI_HDEVICE hDevice,
|
---|
900 | CONST D3D11_1DDI_CERTIFICATE_INFO *pCertificateInfo,
|
---|
901 | UINT *pCertificateSize)
|
---|
902 | {
|
---|
903 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
904 | DEBUG_BREAKPOINT_TEST();
|
---|
905 | RT_NOREF(pDevice, pCertificateInfo);
|
---|
906 | *pCertificateSize = 0;
|
---|
907 | return;
|
---|
908 | }
|
---|
909 |
|
---|
910 | static VOID APIENTRY ddi11_1GetCertificate(
|
---|
911 | D3D10DDI_HDEVICE hDevice,
|
---|
912 | CONST D3D11_1DDI_CERTIFICATE_INFO *pCertificateInfo,
|
---|
913 | UINT CertificateSize,
|
---|
914 | BYTE *pCertificate)
|
---|
915 | {
|
---|
916 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
917 | DEBUG_BREAKPOINT_TEST();
|
---|
918 | RT_NOREF(pDevice, pCertificateInfo, CertificateSize, pCertificate);
|
---|
919 | return;
|
---|
920 | }
|
---|
921 |
|
---|
922 | static HRESULT APIENTRY ddi11_1NegotiateCryptoSessionKeyExchange(
|
---|
923 | D3D10DDI_HDEVICE hDevice,
|
---|
924 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
925 | UINT DataSize,
|
---|
926 | BYTE *pData)
|
---|
927 | {
|
---|
928 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
929 | DEBUG_BREAKPOINT_TEST();
|
---|
930 | RT_NOREF(pDevice, hCryptoSession, DataSize ,pData);
|
---|
931 | return S_OK;
|
---|
932 | }
|
---|
933 |
|
---|
934 | static VOID APIENTRY ddi11_1EncryptionBlt(
|
---|
935 | D3D10DDI_HDEVICE hDevice,
|
---|
936 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
937 | D3D10DDI_HRESOURCE hSrcResource,
|
---|
938 | D3D10DDI_HRESOURCE hDstResource,
|
---|
939 | UINT IVSize,
|
---|
940 | CONST VOID *pIV)
|
---|
941 | {
|
---|
942 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
943 | DEBUG_BREAKPOINT_TEST();
|
---|
944 | RT_NOREF(pDevice, hCryptoSession, hSrcResource, hDstResource, IVSize, pIV);
|
---|
945 | return;
|
---|
946 | }
|
---|
947 |
|
---|
948 | static VOID APIENTRY ddi11_1DecryptionBlt(
|
---|
949 | D3D10DDI_HDEVICE hDevice,
|
---|
950 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
951 | D3D10DDI_HRESOURCE hSrcResource,
|
---|
952 | D3D10DDI_HRESOURCE hDstResource,
|
---|
953 | CONST D3D11_1DDI_ENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
|
---|
954 | UINT ContentKeySize,
|
---|
955 | CONST VOID *pContentKey,
|
---|
956 | UINT IVSize,
|
---|
957 | CONST VOID *pIV)
|
---|
958 | {
|
---|
959 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
960 | DEBUG_BREAKPOINT_TEST();
|
---|
961 | RT_NOREF(pDevice, hCryptoSession, hSrcResource, hDstResource, pEncryptedBlockInfo, ContentKeySize, pContentKey, IVSize, pIV);
|
---|
962 | return;
|
---|
963 | }
|
---|
964 |
|
---|
965 | static VOID APIENTRY ddi11_1StartSessionKeyRefresh(
|
---|
966 | D3D10DDI_HDEVICE hDevice,
|
---|
967 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
968 | UINT RandomNumberSize,
|
---|
969 | VOID *pRandomNumber)
|
---|
970 | {
|
---|
971 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
972 | DEBUG_BREAKPOINT_TEST();
|
---|
973 | RT_NOREF(pDevice, hCryptoSession, RandomNumberSize, pRandomNumber);
|
---|
974 | return;
|
---|
975 | }
|
---|
976 |
|
---|
977 | static VOID APIENTRY ddi11_1FinishSessionKeyRefresh(
|
---|
978 | D3D10DDI_HDEVICE hDevice,
|
---|
979 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession)
|
---|
980 | {
|
---|
981 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
982 | DEBUG_BREAKPOINT_TEST();
|
---|
983 | RT_NOREF(pDevice, hCryptoSession);
|
---|
984 | return;
|
---|
985 | }
|
---|
986 |
|
---|
987 | static VOID APIENTRY ddi11_1GetEncryptionBltKey(
|
---|
988 | D3D10DDI_HDEVICE hDevice,
|
---|
989 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
990 | UINT KeySize,
|
---|
991 | VOID *pReadbackKey)
|
---|
992 | {
|
---|
993 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
994 | DEBUG_BREAKPOINT_TEST();
|
---|
995 | RT_NOREF(pDevice, hCryptoSession, KeySize, pReadbackKey);
|
---|
996 | return;
|
---|
997 | }
|
---|
998 |
|
---|
999 | static SIZE_T APIENTRY ddi11_1CalcPrivateAuthenticatedChannelSize(
|
---|
1000 | D3D10DDI_HDEVICE hDevice,
|
---|
1001 | CONST D3D11_1DDIARG_CREATEAUTHENTICATEDCHANNEL *pCreateData)
|
---|
1002 | {
|
---|
1003 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1004 | //DEBUG_BREAKPOINT_TEST();
|
---|
1005 | RT_NOREF(pDevice, pCreateData);
|
---|
1006 | return sizeof(VBOXDXVIDEOAUTHCHANNEL);
|
---|
1007 | }
|
---|
1008 |
|
---|
1009 | static HRESULT APIENTRY ddi11_1CreateAuthenticatedChannel(
|
---|
1010 | D3D10DDI_HDEVICE hDevice,
|
---|
1011 | D3D11_1DDIARG_CREATEAUTHENTICATEDCHANNEL *pCreateData,
|
---|
1012 | D3D11_1DDI_HAUTHCHANNEL hAuthChannel,
|
---|
1013 | D3D11_1DDI_HRTAUTHCHANNEL hRTAuthChannel)
|
---|
1014 | {
|
---|
1015 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1016 | PVBOXDXVIDEOAUTHCHANNEL pAuthChannel = (PVBOXDXVIDEOAUTHCHANNEL)hAuthChannel.pDrvPrivate;
|
---|
1017 | DEBUG_BREAKPOINT_TEST();
|
---|
1018 | RT_NOREF(pDevice);
|
---|
1019 | RT_ZERO(*pAuthChannel);
|
---|
1020 | pAuthChannel->hRTAuthChannel = hRTAuthChannel;
|
---|
1021 | RT_NOREF(pCreateData);
|
---|
1022 | return S_OK;
|
---|
1023 | }
|
---|
1024 |
|
---|
1025 | static VOID APIENTRY ddi11_1DestroyAuthenticatedChannel(
|
---|
1026 | D3D10DDI_HDEVICE hDevice,
|
---|
1027 | D3D11_1DDI_HAUTHCHANNEL hAuthChannel)
|
---|
1028 | {
|
---|
1029 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1030 | DEBUG_BREAKPOINT_TEST();
|
---|
1031 | RT_NOREF(pDevice, hAuthChannel);
|
---|
1032 | return;
|
---|
1033 | }
|
---|
1034 |
|
---|
1035 | static HRESULT APIENTRY ddi11_1NegotiateAuthenticatedChannelKeyExchange(
|
---|
1036 | D3D10DDI_HDEVICE hDevice,
|
---|
1037 | D3D11_1DDI_HAUTHCHANNEL hAuthChannel,
|
---|
1038 | UINT DataSize,
|
---|
1039 | VOID *pData)
|
---|
1040 | {
|
---|
1041 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1042 | DEBUG_BREAKPOINT_TEST();
|
---|
1043 | RT_NOREF(pDevice, hAuthChannel, DataSize, pData);
|
---|
1044 | return S_OK;
|
---|
1045 | }
|
---|
1046 |
|
---|
1047 | static HRESULT APIENTRY ddi11_1QueryAuthenticatedChannel(
|
---|
1048 | D3D10DDI_HDEVICE hDevice,
|
---|
1049 | D3D11_1DDI_HAUTHCHANNEL hAuthChannel,
|
---|
1050 | UINT InputDataSize,
|
---|
1051 | CONST VOID *pInputData,
|
---|
1052 | UINT OutputDataSize,
|
---|
1053 | VOID *pOutputData)
|
---|
1054 | {
|
---|
1055 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1056 | DEBUG_BREAKPOINT_TEST();
|
---|
1057 | RT_NOREF(pDevice, hAuthChannel, InputDataSize, pInputData, OutputDataSize, pOutputData);
|
---|
1058 | return E_FAIL;
|
---|
1059 | }
|
---|
1060 |
|
---|
1061 | static HRESULT APIENTRY ddi11_1ConfigureAuthenticatedChannel(
|
---|
1062 | D3D10DDI_HDEVICE hDevice,
|
---|
1063 | D3D11_1DDI_HAUTHCHANNEL hAuthChannel,
|
---|
1064 | UINT InputDataSize,
|
---|
1065 | CONST VOID *pInputData,
|
---|
1066 | D3D11_1DDI_AUTHENTICATED_CONFIGURE_OUTPUT *pOutputData)
|
---|
1067 | {
|
---|
1068 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1069 | DEBUG_BREAKPOINT_TEST();
|
---|
1070 | RT_NOREF(pDevice, hAuthChannel, InputDataSize, pInputData, pOutputData);
|
---|
1071 | return E_FAIL;
|
---|
1072 | }
|
---|
1073 |
|
---|
1074 | static HRESULT APIENTRY ddi11_1VideoDecoderGetHandle(
|
---|
1075 | D3D10DDI_HDEVICE hDevice,
|
---|
1076 | D3D11_1DDI_HDECODE hDecoder,
|
---|
1077 | HANDLE *pContentProtectionHandle)
|
---|
1078 | {
|
---|
1079 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1080 | DEBUG_BREAKPOINT_TEST();
|
---|
1081 | RT_NOREF(pDevice, hDecoder, pContentProtectionHandle);
|
---|
1082 | return S_OK;
|
---|
1083 | }
|
---|
1084 |
|
---|
1085 | static HRESULT APIENTRY ddi11_1CryptoSessionGetHandle(
|
---|
1086 | D3D10DDI_HDEVICE hDevice,
|
---|
1087 | D3D11_1DDI_HCRYPTOSESSION hCryptoSession,
|
---|
1088 | HANDLE *pHandle)
|
---|
1089 | {
|
---|
1090 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1091 | DEBUG_BREAKPOINT_TEST();
|
---|
1092 | RT_NOREF(pDevice, hCryptoSession, pHandle);
|
---|
1093 | return S_OK;
|
---|
1094 | }
|
---|
1095 |
|
---|
1096 | static VOID APIENTRY ddi11_1GetCaptureHandle(
|
---|
1097 | D3D10DDI_HDEVICE hDevice,
|
---|
1098 | D3D11_1DDI_GETCAPTUREHANDLEDATA *pHandleData)
|
---|
1099 | {
|
---|
1100 | PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
|
---|
1101 | DEBUG_BREAKPOINT_TEST();
|
---|
1102 | RT_NOREF(pDevice, pHandleData);
|
---|
1103 | return;
|
---|
1104 | }
|
---|
1105 |
|
---|
1106 | HRESULT ddi11_1RetrieveVideoFunctions(PVBOXDX_DEVICE pDevice, D3D11_1DDI_VIDEO_INPUT *pVideoInput)
|
---|
1107 | {
|
---|
1108 | //DEBUG_BREAKPOINT_TEST();
|
---|
1109 | RT_NOREF(pDevice);
|
---|
1110 |
|
---|
1111 | D3D11_1DDI_VIDEODEVICEFUNCS *p = pVideoInput->p11VideoDeviceFuncs;
|
---|
1112 |
|
---|
1113 | p->pfnGetVideoDecoderProfileCount = ddi11_1GetVideoDecoderProfileCount;
|
---|
1114 | p->pfnGetVideoDecoderProfile = ddi11_1GetVideoDecoderProfile;
|
---|
1115 | p->pfnCheckVideoDecoderFormat = ddi11_1CheckVideoDecoderFormat;
|
---|
1116 | p->pfnGetVideoDecoderConfigCount = ddi11_1GetVideoDecoderConfigCount;
|
---|
1117 | p->pfnGetVideoDecoderConfig = ddi11_1GetVideoDecoderConfig;
|
---|
1118 | p->pfnGetVideoDecoderBufferTypeCount = ddi11_1GetVideoDecoderBufferTypeCount;
|
---|
1119 | p->pfnGetVideoDecoderBufferInfo = ddi11_1GetVideoDecoderBufferInfo;
|
---|
1120 | p->pfnCalcPrivateVideoDecoderSize = ddi11_1CalcPrivateVideoDecoderSize;
|
---|
1121 | p->pfnCreateVideoDecoder = ddi11_1CreateVideoDecoder;
|
---|
1122 | p->pfnDestroyVideoDecoder = ddi11_1DestroyVideoDecoder;
|
---|
1123 | p->pfnVideoDecoderExtension = ddi11_1VideoDecoderExtension;
|
---|
1124 | p->pfnVideoDecoderBeginFrame = ddi11_1VideoDecoderBeginFrame;
|
---|
1125 | p->pfnVideoDecoderEndFrame = ddi11_1VideoDecoderEndFrame;
|
---|
1126 | p->pfnVideoDecoderSubmitBuffers = ddi11_1VideoDecoderSubmitBuffers;
|
---|
1127 | p->pfnCalcPrivateVideoProcessorEnumSize = ddi11_1CalcPrivateVideoProcessorEnumSize;
|
---|
1128 | p->pfnCreateVideoProcessorEnum = ddi11_1CreateVideoProcessorEnum;
|
---|
1129 | p->pfnDestroyVideoProcessorEnum = ddi11_1DestroyVideoProcessorEnum;
|
---|
1130 | p->pfnCheckVideoProcessorFormat = ddi11_1CheckVideoProcessorFormat;
|
---|
1131 | p->pfnGetVideoProcessorCaps = ddi11_1GetVideoProcessorCaps;
|
---|
1132 | p->pfnGetVideoProcessorRateConversionCaps = ddi11_1GetVideoProcessorRateConversionCaps;
|
---|
1133 | p->pfnGetVideoProcessorCustomRate = ddi11_1GetVideoProcessorCustomRate;
|
---|
1134 | p->pfnGetVideoProcessorFilterRange = ddi11_1GetVideoProcessorFilterRange;
|
---|
1135 | p->pfnCalcPrivateVideoProcessorSize = ddi11_1CalcPrivateVideoProcessorSize;
|
---|
1136 | p->pfnCreateVideoProcessor = ddi11_1CreateVideoProcessor;
|
---|
1137 | p->pfnDestroyVideoProcessor = ddi11_1DestroyVideoProcessor;
|
---|
1138 | p->pfnVideoProcessorSetOutputTargetRect = ddi11_1VideoProcessorSetOutputTargetRect;
|
---|
1139 | p->pfnVideoProcessorSetOutputBackgroundColor = ddi11_1VideoProcessorSetOutputBackgroundColor;
|
---|
1140 | p->pfnVideoProcessorSetOutputColorSpace = ddi11_1VideoProcessorSetOutputColorSpace;
|
---|
1141 | p->pfnVideoProcessorSetOutputAlphaFillMode = ddi11_1VideoProcessorSetOutputAlphaFillMode;
|
---|
1142 | p->pfnVideoProcessorSetOutputConstriction = ddi11_1VideoProcessorSetOutputConstriction;
|
---|
1143 | p->pfnVideoProcessorSetOutputStereoMode = ddi11_1VideoProcessorSetOutputStereoMode;
|
---|
1144 | p->pfnVideoProcessorSetOutputExtension = ddi11_1VideoProcessorSetOutputExtension;
|
---|
1145 | p->pfnVideoProcessorGetOutputExtension = ddi11_1VideoProcessorGetOutputExtension;
|
---|
1146 | p->pfnVideoProcessorSetStreamFrameFormat = ddi11_1VideoProcessorSetStreamFrameFormat;
|
---|
1147 | p->pfnVideoProcessorSetStreamColorSpace = ddi11_1VideoProcessorSetStreamColorSpace;
|
---|
1148 | p->pfnVideoProcessorSetStreamOutputRate = ddi11_1VideoProcessorSetStreamOutputRate;
|
---|
1149 | p->pfnVideoProcessorSetStreamSourceRect = ddi11_1VideoProcessorSetStreamSourceRect;
|
---|
1150 | p->pfnVideoProcessorSetStreamDestRect = ddi11_1VideoProcessorSetStreamDestRect;
|
---|
1151 | p->pfnVideoProcessorSetStreamAlpha = ddi11_1VideoProcessorSetStreamAlpha;
|
---|
1152 | p->pfnVideoProcessorSetStreamPalette = ddi11_1VideoProcessorSetStreamPalette;
|
---|
1153 | p->pfnVideoProcessorSetStreamPixelAspectRatio = ddi11_1VideoProcessorSetStreamPixelAspectRatio;
|
---|
1154 | p->pfnVideoProcessorSetStreamLumaKey = ddi11_1VideoProcessorSetStreamLumaKey;
|
---|
1155 | p->pfnVideoProcessorSetStreamStereoFormat = ddi11_1VideoProcessorSetStreamStereoFormat;
|
---|
1156 | p->pfnVideoProcessorSetStreamAutoProcessingMode = ddi11_1VideoProcessorSetStreamAutoProcessingMode;
|
---|
1157 | p->pfnVideoProcessorSetStreamFilter = ddi11_1VideoProcessorSetStreamFilter;
|
---|
1158 | p->pfnVideoProcessorSetStreamExtension = ddi11_1VideoProcessorSetStreamExtension;
|
---|
1159 | p->pfnVideoProcessorGetStreamExtension = ddi11_1VideoProcessorGetStreamExtension;
|
---|
1160 | p->pfnVideoProcessorBlt = ddi11_1VideoProcessorBlt;
|
---|
1161 | p->pfnCalcPrivateVideoDecoderOutputViewSize = ddi11_1CalcPrivateVideoDecoderOutputViewSize;
|
---|
1162 | p->pfnCreateVideoDecoderOutputView = ddi11_1CreateVideoDecoderOutputView;
|
---|
1163 | p->pfnDestroyVideoDecoderOutputView = ddi11_1DestroyVideoDecoderOutputView;
|
---|
1164 | p->pfnCalcPrivateVideoProcessorInputViewSize = ddi11_1CalcPrivateVideoProcessorInputViewSize;
|
---|
1165 | p->pfnCreateVideoProcessorInputView = ddi11_1CreateVideoProcessorInputView;
|
---|
1166 | p->pfnDestroyVideoProcessorInputView = ddi11_1DestroyVideoProcessorInputView;
|
---|
1167 | p->pfnCalcPrivateVideoProcessorOutputViewSize = ddi11_1CalcPrivateVideoProcessorOutputViewSize;
|
---|
1168 | p->pfnCreateVideoProcessorOutputView = ddi11_1CreateVideoProcessorOutputView;
|
---|
1169 | p->pfnDestroyVideoProcessorOutputView = ddi11_1DestroyVideoProcessorOutputView;
|
---|
1170 | p->pfnVideoProcessorInputViewReadAfterWriteHazard = ddi11_1VideoProcessorInputViewReadAfterWriteHazard;
|
---|
1171 | p->pfnGetContentProtectionCaps = ddi11_1GetContentProtectionCaps;
|
---|
1172 | p->pfnGetCryptoKeyExchangeType = ddi11_1GetCryptoKeyExchangeType;
|
---|
1173 | p->pfnCalcPrivateCryptoSessionSize = ddi11_1CalcPrivateCryptoSessionSize;
|
---|
1174 | p->pfnCreateCryptoSession = ddi11_1CreateCryptoSession;
|
---|
1175 | p->pfnDestroyCryptoSession = ddi11_1DestroyCryptoSession;
|
---|
1176 | p->pfnGetCertificateSize = ddi11_1GetCertificateSize;
|
---|
1177 | p->pfnGetCertificate = ddi11_1GetCertificate;
|
---|
1178 | p->pfnNegotiateCryptoSessionKeyExchange = ddi11_1NegotiateCryptoSessionKeyExchange;
|
---|
1179 | p->pfnEncryptionBlt = ddi11_1EncryptionBlt;
|
---|
1180 | p->pfnDecryptionBlt = ddi11_1DecryptionBlt;
|
---|
1181 | p->pfnStartSessionKeyRefresh = ddi11_1StartSessionKeyRefresh;
|
---|
1182 | p->pfnFinishSessionKeyRefresh = ddi11_1FinishSessionKeyRefresh;
|
---|
1183 | p->pfnGetEncryptionBltKey = ddi11_1GetEncryptionBltKey;
|
---|
1184 | p->pfnCalcPrivateAuthenticatedChannelSize = ddi11_1CalcPrivateAuthenticatedChannelSize;
|
---|
1185 | p->pfnCreateAuthenticatedChannel = ddi11_1CreateAuthenticatedChannel;
|
---|
1186 | p->pfnDestroyAuthenticatedChannel = ddi11_1DestroyAuthenticatedChannel;
|
---|
1187 | p->pfnNegotiateAuthenticatedChannelKeyExchange = ddi11_1NegotiateAuthenticatedChannelKeyExchange;
|
---|
1188 | p->pfnQueryAuthenticatedChannel = ddi11_1QueryAuthenticatedChannel;
|
---|
1189 | p->pfnConfigureAuthenticatedChannel = ddi11_1ConfigureAuthenticatedChannel;
|
---|
1190 | p->pfnVideoDecoderGetHandle = ddi11_1VideoDecoderGetHandle;
|
---|
1191 | p->pfnCryptoSessionGetHandle = ddi11_1CryptoSessionGetHandle;
|
---|
1192 | p->pfnVideoProcessorSetStreamRotation = ddi11_1VideoProcessorSetStreamRotation;
|
---|
1193 | p->pfnGetCaptureHandle = ddi11_1GetCaptureHandle;
|
---|
1194 |
|
---|
1195 | return S_OK;
|
---|
1196 | }
|
---|