Index: trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp
===================================================================
--- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp	(revision 101254)
+++ trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp	(revision 101303)
@@ -45,44 +45,58 @@
 static const GUID gaDecoderProfiles[] =
 {
-    D3D11_DECODER_PROFILE_MPEG2_MOCOMP,
-    D3D11_DECODER_PROFILE_MPEG2_IDCT,
-    D3D11_DECODER_PROFILE_MPEG2_VLD,
-    D3D11_DECODER_PROFILE_MPEG1_VLD,
-    D3D11_DECODER_PROFILE_MPEG2and1_VLD,
-    D3D11_DECODER_PROFILE_H264_MOCOMP_NOFGT,
-    D3D11_DECODER_PROFILE_H264_MOCOMP_FGT,
-    D3D11_DECODER_PROFILE_H264_IDCT_NOFGT,
-    D3D11_DECODER_PROFILE_H264_IDCT_FGT,
+    //D3D11_DECODER_PROFILE_MPEG2_MOCOMP,
+    //D3D11_DECODER_PROFILE_MPEG2_IDCT,
+    //D3D11_DECODER_PROFILE_MPEG2_VLD,
+    //D3D11_DECODER_PROFILE_MPEG1_VLD,
+    //D3D11_DECODER_PROFILE_MPEG2and1_VLD,
+    //D3D11_DECODER_PROFILE_H264_MOCOMP_NOFGT,
+    //D3D11_DECODER_PROFILE_H264_MOCOMP_FGT,
+    //D3D11_DECODER_PROFILE_H264_IDCT_NOFGT,
+    //D3D11_DECODER_PROFILE_H264_IDCT_FGT,
     D3D11_DECODER_PROFILE_H264_VLD_NOFGT,
-    D3D11_DECODER_PROFILE_H264_VLD_FGT,
+    //D3D11_DECODER_PROFILE_H264_VLD_FGT,
     //D3D11_DECODER_PROFILE_H264_VLD_WITHFMOASO_NOFGT,
     //D3D11_DECODER_PROFILE_H264_VLD_STEREO_PROGRESSIVE_NOFGT,
     //D3D11_DECODER_PROFILE_H264_VLD_STEREO_NOFGT,
     //D3D11_DECODER_PROFILE_H264_VLD_MULTIVIEW_NOFGT,
-    D3D11_DECODER_PROFILE_WMV8_POSTPROC,
-    D3D11_DECODER_PROFILE_WMV8_MOCOMP,
-    D3D11_DECODER_PROFILE_WMV9_POSTPROC,
-    D3D11_DECODER_PROFILE_WMV9_MOCOMP,
-    D3D11_DECODER_PROFILE_WMV9_IDCT,
-    D3D11_DECODER_PROFILE_VC1_POSTPROC,
-    D3D11_DECODER_PROFILE_VC1_MOCOMP,
-    D3D11_DECODER_PROFILE_VC1_IDCT,
-    D3D11_DECODER_PROFILE_VC1_VLD,
-    D3D11_DECODER_PROFILE_VC1_D2010,
-    D3D11_DECODER_PROFILE_MPEG4PT2_VLD_SIMPLE,
-    D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_NOGMC,
-    D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_GMC,
-    D3D11_DECODER_PROFILE_HEVC_VLD_MAIN,
-    D3D11_DECODER_PROFILE_HEVC_VLD_MAIN10,
-    D3D11_DECODER_PROFILE_VP9_VLD_PROFILE0,
-    D3D11_DECODER_PROFILE_VP9_VLD_10BIT_PROFILE2,
-    D3D11_DECODER_PROFILE_VP8_VLD,
-    D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0,
-    D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1,
-    D3D11_DECODER_PROFILE_AV1_VLD_PROFILE2,
-    D3D11_DECODER_PROFILE_AV1_VLD_12BIT_PROFILE2,
-    D3D11_DECODER_PROFILE_AV1_VLD_12BIT_PROFILE2_420,
+    //D3D11_DECODER_PROFILE_WMV8_POSTPROC,
+    //D3D11_DECODER_PROFILE_WMV8_MOCOMP,
+    //D3D11_DECODER_PROFILE_WMV9_POSTPROC,
+    //D3D11_DECODER_PROFILE_WMV9_MOCOMP,
+    //D3D11_DECODER_PROFILE_WMV9_IDCT,
+    //D3D11_DECODER_PROFILE_VC1_POSTPROC,
+    //D3D11_DECODER_PROFILE_VC1_MOCOMP,
+    //D3D11_DECODER_PROFILE_VC1_IDCT,
+    //D3D11_DECODER_PROFILE_VC1_VLD,
+    //D3D11_DECODER_PROFILE_VC1_D2010,
+    //D3D11_DECODER_PROFILE_MPEG4PT2_VLD_SIMPLE,
+    //D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_NOGMC,
+    //D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_GMC,
+    //D3D11_DECODER_PROFILE_HEVC_VLD_MAIN,
+    //D3D11_DECODER_PROFILE_HEVC_VLD_MAIN10,
+    //D3D11_DECODER_PROFILE_VP9_VLD_PROFILE0,
+    //D3D11_DECODER_PROFILE_VP9_VLD_10BIT_PROFILE2,
+    //D3D11_DECODER_PROFILE_VP8_VLD,
+    //D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0,
+    //D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1,
+    //D3D11_DECODER_PROFILE_AV1_VLD_PROFILE2,
+    //D3D11_DECODER_PROFILE_AV1_VLD_12BIT_PROFILE2,
+    //D3D11_DECODER_PROFILE_AV1_VLD_12BIT_PROFILE2_420,
 };
 
+
+typedef struct VBOXDXVIDEOPROCESSORINPUTVIEW
+{
+    PVBOXDX_DEVICE pDevice;
+    D3D11_1DDI_HRTVIDEOPROCESSORINPUTVIEW hRTView;
+    D3D11_1DDIARG_CREATEVIDEOPROCESSORINPUTVIEW CreateData;
+} VBOXDXVIDEOPROCESSORINPUTVIEW, *PVBOXDXVIDEOPROCESSORINPUTVIEW;
+
+typedef struct VBOXDXVIDEOPROCESSOROUTPUTVIEW
+{
+    PVBOXDX_DEVICE pDevice;
+    D3D11_1DDI_HRTVIDEOPROCESSOROUTPUTVIEW hRTView;
+    D3D11_1DDIARG_CREATEVIDEOPROCESSOROUTPUTVIEW CreateData;
+} VBOXDXVIDEOPROCESSOROUTPUTVIEW, *PVBOXDXVIDEOPROCESSOROUTPUTVIEW;
 
 typedef struct VBOXDXVIDEOPROCESSORFILTER
@@ -150,4 +164,22 @@
 } VBOXDXVIDEOPROCESSORENUM, *PVBOXDXVIDEOPROCESSORENUM;
 
+
+typedef struct VBOXDXVIDEODECODEROUTPUTVIEW
+{
+    PVBOXDX_DEVICE pDevice;
+    D3D11_1DDI_HRTVIDEODECODEROUTPUTVIEW hRTView;
+    D3D11_1DDIARG_CREATEVIDEODECODEROUTPUTVIEW CreateData;
+} VBOXDXVIDEODECODEROUTPUTVIEW, *PVBOXDXVIDEODECODEROUTPUTVIEW;
+
+typedef struct VBOXDXVIDEODECODER
+{
+    PVBOXDX_DEVICE pDevice;
+    D3D11_1DDI_HRTDECODE hRTVideoDecoder;
+    D3D11_1DDIARG_CREATEVIDEODECODER CreateData;
+    struct {
+        PVBOXDXVIDEODECODEROUTPUTVIEW pOutputView;
+    } Frame;
+} VBOXDXVIDEODECODER, *PVBOXDXVIDEODECODER;
+
 typedef struct VBOXDXVIDEOCRYPTOSESSION
 {
@@ -170,5 +202,5 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice);
     *pDecodeProfileCount = RT_ELEMENTS(gaDecoderProfiles);
@@ -183,5 +215,5 @@
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     D3D11_1DDI_VIDEO_DECODER_DESC *pDecodeDesc = (D3D11_1DDI_VIDEO_DECODER_DESC *)pGuid;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, Index, pDecodeDesc);
     *pGuid = gaDecoderProfiles[Index];
@@ -196,7 +228,11 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pDecoderProfile, Format);
-    *pSupported = TRUE;
+    if (   Format == DXGI_FORMAT_NV12
+        || Format == DXGI_FORMAT_B8G8R8A8_UNORM)
+        *pSupported = TRUE;
+    else
+        *pSupported = FALSE;
     return;
 }
@@ -208,5 +244,5 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pDecodeDesc);
     *pConfigCount = 1;
@@ -221,5 +257,5 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pDecodeDesc, Index);
     pConfig->guidConfigBitstreamEncryption = DXVADDI_NoEncrypt;
@@ -243,4 +279,20 @@
 }
 
+/* D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO::Usage has to be D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY,
+ * otherwise Windows refuses to use the decoder.
+ */
+static D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO const aBufferInfo[] =
+{
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_SLICE_CONTROL, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_BITSTREAM, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_MOTION_VECTOR, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+    { D3D11_1DDI_VIDEO_DECODER_BUFFER_FILM_GRAIN, _64K, D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY },
+};
+
 static VOID APIENTRY ddi11_1GetVideoDecoderBufferTypeCount(
     D3D10DDI_HDEVICE hDevice,
@@ -251,5 +303,5 @@
     DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pDecodeDesc);
-    *pBufferTypeCount = 0;
+    *pBufferTypeCount = RT_ELEMENTS(aBufferInfo);
     return;
 }
@@ -263,5 +315,6 @@
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, pDecodeDesc, Index, pInfo);
+    RT_NOREF(pDevice, pDecodeDesc);
+    *pInfo = aBufferInfo[Index];
     return;
 }
@@ -274,5 +327,5 @@
     DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pDecoder);
-    return 0;
+    return sizeof(VBOXDXVIDEODECODER);
 }
 
@@ -280,10 +333,15 @@
     D3D10DDI_HDEVICE hDevice,
     CONST D3D11_1DDIARG_CREATEVIDEODECODER *pCreateData,
-    D3D11_1DDI_HDECODE hDecode,
-    D3D11_1DDI_HRTDECODE hRTDecode)
-{
-    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, pCreateData, hDecode, hRTDecode);
+    D3D11_1DDI_HDECODE hDecoder,
+    D3D11_1DDI_HRTDECODE hRTDecoder)
+{
+    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
+    PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    RT_ZERO(*pVideoDecoder);
+    pVideoDecoder->pDevice = pDevice;
+    pVideoDecoder->hRTVideoDecoder = hRTDecoder;
+    pVideoDecoder->CreateData = *pCreateData;
     return S_OK;
 }
@@ -294,6 +352,7 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hDecoder);
+    PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoDecoder);
     return;
 }
@@ -316,6 +375,10 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hDecoder, pBeginFrame);
+    PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    pVideoDecoder->Frame.pOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)pBeginFrame->hOutputView.pDrvPrivate;
+    //pBeginFrame->pContentKey;
+    //pBeginFrame->ContentKeySize;
     return S_OK;
 }
@@ -326,6 +389,8 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hDecoder);
+    PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    pVideoDecoder->Frame.pOutputView = NULL;
     return;
 }
@@ -338,6 +403,13 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hDecoder, BufferCount, pBufferDesc);
+    PVBOXDXVIDEODECODER pVideoDecoder = (PVBOXDXVIDEODECODER)hDecoder.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoDecoder);
+    for (UINT i = 0; i < BufferCount; ++i)
+    {
+        D3D11_1DDI_VIDEO_DECODER_BUFFER_DESC const *pDesc = &pBufferDesc[i];
+        LogFlowFunc(("at %d, size %d\n", pDesc->DataOffset, pDesc->DataSize));
+        RT_NOREF(pDesc);
+    }
     return S_OK;
 }
@@ -388,8 +460,12 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, hVideoProcessorEnum, Format);
-    *pSupported = D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT
-                | D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT;
+    if (   Format == DXGI_FORMAT_NV12
+        || Format == DXGI_FORMAT_B8G8R8A8_UNORM)
+        *pSupported = D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT
+                    | D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT;
+    else
+        *pSupported = 0;
     return;
 }
@@ -402,5 +478,5 @@
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pVideoProcessorEnum);
     RT_ZERO(*pCaps);
@@ -435,5 +511,5 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, hProcessorEnum, RateConversionIndex);
     RT_ZERO(*pCaps);
@@ -474,5 +550,5 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    //DEBUG_BREAKPOINT_TEST();
+    DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, hProcessorEnum, Filter);
     pFilterRange->Minimum = 0;
@@ -511,9 +587,10 @@
 static VOID APIENTRY ddi11_1DestroyVideoProcessor(
     D3D10DDI_HDEVICE hDevice,
-    D3D11_1DDI_HVIDEOPROCESSOR hProcessor)
-{
-    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hProcessor);
+    D3D11_1DDI_HVIDEOPROCESSOR hVideoProcessor)
+{
+    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
+    PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoProcessor);
     return;
 }
@@ -874,5 +951,5 @@
     DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pView);
-    return 0;
+    return sizeof(VBOXDXVIDEODECODEROUTPUTVIEW);
 }
 
@@ -884,6 +961,10 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, pCreateData, hView, hRTView);
+    PVBOXDXVIDEODECODEROUTPUTVIEW pVideoDecoderOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    pVideoDecoderOutputView->pDevice = pDevice;
+    pVideoDecoderOutputView->hRTView = hRTView;
+    pVideoDecoderOutputView->CreateData = *pCreateData;
     return S_OK;
 }
@@ -894,6 +975,7 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hView);
+    PVBOXDXVIDEODECODEROUTPUTVIEW pVideoDecoderOutputView = (PVBOXDXVIDEODECODEROUTPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoDecoderOutputView);
     return;
 }
@@ -906,5 +988,5 @@
     DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pView);
-    return 0;
+    return sizeof(VBOXDXVIDEOPROCESSORINPUTVIEW);
 }
 
@@ -916,6 +998,10 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, pCreateData, hView, hRTView);
+    PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    pVideoProcessorInputView->pDevice = pDevice;
+    pVideoProcessorInputView->hRTView = hRTView;
+    pVideoProcessorInputView->CreateData = *pCreateData;
     return S_OK;
 }
@@ -926,6 +1012,7 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hView);
+    PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoProcessorInputView);
     return;
 }
@@ -938,5 +1025,5 @@
     DEBUG_BREAKPOINT_TEST();
     RT_NOREF(pDevice, pView);
-    return 0;
+    return sizeof(VBOXDXVIDEOPROCESSOROUTPUTVIEW);
 }
 
@@ -948,6 +1035,10 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, pCreateData, hView, hRTView);
+    PVBOXDXVIDEOPROCESSOROUTPUTVIEW pVideoProcessorOutputView = (PVBOXDXVIDEOPROCESSOROUTPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice);
+    pVideoProcessorOutputView->pDevice = pDevice;
+    pVideoProcessorOutputView->hRTView = hRTView;
+    pVideoProcessorOutputView->CreateData = *pCreateData;
     return S_OK;
 }
@@ -958,6 +1049,7 @@
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-    RT_NOREF(pDevice, hView);
+    PVBOXDXVIDEOPROCESSOROUTPUTVIEW pVideoProcessorOutputView = (PVBOXDXVIDEOPROCESSOROUTPUTVIEW)hView.pDrvPrivate;
+    DEBUG_BREAKPOINT_TEST();
+    RT_NOREF(pDevice, pVideoProcessorOutputView);
     return;
 }
