VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp

Last change on this file was 102505, checked in by vboxsync, 6 months ago

WDDM: user mode driver update: bugref:10529

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 47.2 KB
Line 
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
47static 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
56static 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
66static 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
77static 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
87static 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 */
103static 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
116static 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
127static 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
139static 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
149static 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
164static 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
175static 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
186static 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
201static 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
213static 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
235static 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
245static 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
260static 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
272static 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
285static 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
297static 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
311static 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
326static 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
339static 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
349static 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
365static 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
376static 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
389static 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
402static 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
414static 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
427static 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
440static 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
452static 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
465static 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
478static 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
491static 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
504static 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
519static 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
533static 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
547static 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
561static 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
575static 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
590static 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
605static 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
624static 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
637static 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
652static 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
666static 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
680static 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
694static 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
710static 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
720static 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
737static 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
748static 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
758static 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
775static 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
786static 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
796static 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
813static 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
824static 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
837static 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
849static 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
862static 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
872static 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
888static 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
898static 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
910static 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
922static 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
934static 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
948static 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
965static 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
977static 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
987static 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
999static 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
1009static 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
1025static 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
1035static 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
1047static 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
1061static 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
1074static 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
1085static 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
1096static 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
1106HRESULT 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}
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use