STDMETHODIMP CVideoDecOutputPin::GetCreateVideoAcceleratorData(const GUID *pGuid, LPDWORD pdwSizeMiscData, LPVOID *ppMiscData) { HRESULT hr = E_UNEXPECTED; AMVAUncompDataInfo UncompInfo; AMVACompBufferInfo CompInfo[30]; DWORD dwNumTypesCompBuffers = countof(CompInfo); CComQIPtr<IAMVideoAccelerator> pAMVideoAccelerator = GetConnected(); DXVA_ConnectMode* pConnectMode; if (pAMVideoAccelerator) { memcpy (&UncompInfo.ddUncompPixelFormat, &m_ddUncompPixelFormat, sizeof (DDPIXELFORMAT)); UncompInfo.dwUncompWidth = m_pVideoDecFilter->PictWidthRounded(); UncompInfo.dwUncompHeight = m_pVideoDecFilter->PictHeightRounded(); hr = pAMVideoAccelerator->GetCompBufferInfo(&m_GuidDecoderDXVA1, &UncompInfo, &dwNumTypesCompBuffers, CompInfo); if (SUCCEEDED (hr)) { hr = m_pVideoDecFilter->CreateDXVA1Decoder (pAMVideoAccelerator, pGuid, m_dwDXVA1SurfaceCount); if (SUCCEEDED (hr)) { m_pVideoDecFilter->SetDXVA1Params (&m_GuidDecoderDXVA1, &m_ddUncompPixelFormat); pConnectMode = (DXVA_ConnectMode*)CoTaskMemAlloc (sizeof(DXVA_ConnectMode)); pConnectMode->guidMode = m_GuidDecoderDXVA1; pConnectMode->wRestrictedMode = m_pVideoDecFilter->GetDXVA1RestrictedMode(); *pdwSizeMiscData = sizeof(DXVA_ConnectMode); *ppMiscData = pConnectMode; } } } return hr; }