windows sdk8.1的pDXVAHDVP->VideoProcessBltHD使用示例
时间: 2024-03-17 19:40:49 浏览: 116
Windows SDK 8.1离线包
以下是 Windows SDK 8.1 中使用 VideoProcessBltHD 的示例代码:
```c++
HRESULT hr = S_OK;
ID3D11Texture2D* pSourceTexture = nullptr; // 源纹理
ID3D11Texture2D* pDestinationTexture = nullptr; // 目标纹理
DXVAHDDDI_STREAM_STATE_PRIVATE_DATA* pStreamStatePrivateData = nullptr; // 流状态私有数据
DXVAHD_STREAM_STATE_INPUT_DATA* pStreamStateInputData = nullptr; // 流状态输入数据
DXVAHD_STREAM_STATE_OUTPUT_DATA* pStreamStateOutputData = nullptr; // 流状态输出数据
DXVAHD_BLT_STATE* pBltState = nullptr; // BLT 状态
// 填充流状态私有数据、流状态输入数据和流状态输出数据
// 创建源纹理和目标纹理
// 创建 DXVA-HD Video Processor 对象
ID3D11VideoDevice* pVideoDevice = nullptr; // D3D11 Video 设备
ID3D11VideoContext* pVideoContext = nullptr; // D3D11 Video 上下文
DXVAHD_VPDESCRIPTOR vpDescriptor = {}; // VP 描述符
ID3D11VideoProcessor* pVideoProcessor = nullptr; // VP 对象
hr = pVideoDevice->CreateVideoProcessor(&vpDescriptor, pStreamStatePrivateData, &pVideoProcessor);
// 创建 BLT 状态
DXVAHD_BLT_STATE_DESCRIPTION bltStateDesc = {}; // BLT 状态描述符
ID3D11VideoProcessorEnumerator* pEnum = nullptr; // VP 枚举器
hr = pVideoProcessor->GetVideoProcessorEnumerator(&pEnum);
hr = pEnum->CreateVideoProcessorState(&bltStateDesc, &pBltState);
// 调用 VideoProcessBltHD 处理帧
DXVAHD_STREAM_STATE_PRIVATE_DATA vpPrivateData = {}; // VP 私有数据
DXVAHD_STREAM_DATA streamData = {}; // 流数据
streamData.Enable = TRUE;
streamData.OutputIndex = 0;
streamData.PictureParameters = nullptr;
streamData.Quality = DXVAHD_STREAM_QUALITY_NORMAL;
streamData.StreamNumber = 0;
streamData.StreamState = DXVAHD_STREAM_STATE_D3DFORMAT;
streamData.pPrivateData = &vpPrivateData;
streamData.PrivateDataSize = sizeof(DXVAHD_STREAM_STATE_PRIVATE_DATA);
hr = pVideoContext->VideoProcessorBltHD(pVideoProcessor, pBltState, pStreamStateInputData, pStreamStateOutputData, &streamData);
// 释放资源
pSourceTexture->Release();
pDestinationTexture->Release();
pStreamStatePrivateData->pData = nullptr;
pStreamStatePrivateData->DataSize = 0;
CoTaskMemFree(pStreamStatePrivateData);
CoTaskMemFree(pStreamStateInputData);
CoTaskMemFree(pStreamStateOutputData);
pVideoProcessor->Release();
pEnum->Release();
pBltState->Release();
```
与之前的示例代码相比,此代码的主要区别在于使用了 D3D11 Video 上下文的 VideoProcessorBltHD 方法来调用 VideoProcessBltHD。此外,创建 DXVA-HD Video Processor 对象时,不再需要指定 D3D11_CREATE_DEVICE_VIDEO_PROCESSOR_REAL_TIME 标志。
阅读全文