是否可以共享 DXVA 表面?

Posted

技术标签:

【中文标题】是否可以共享 DXVA 表面?【英文标题】:Is it possible to share a DXVA surface? 【发布时间】:2014-06-24 01:52:58 【问题描述】:

我正在使用 DXVA 视频解码器。它工作正常,但我想与另一个 IDirect3D9 设备对象共享解压缩的表面。

我阅读了this 文档,我正在调用 IDirectXVideoDecoderService::CreateSurface() 方法来创建表面,并且我尝试传递一个非 NULL HANDLE* 指向NULL 作为该方法的最后一个参数。但该方法失败,结果为 0x8876086c (D3DERR_INVALIDCALL)。我还尝试分配一个 HANDLE 数组并将每个元素设置为 NULL,然后将该数组作为参数传递,但仍然得到相同的错误。

有没有办法在 IDirect3D9 设备之间共享 DXVA 表面?

【问题讨论】:

"...传递一个指向 NULL 的非 NULL HANDLE..."* - 你能显示这段代码吗?当我读到它时,我不清楚你到底在传递什么。 【参考方案1】:

阅读文档:

资源创建 API 包括 - CreateTexture、CreateVolumeTexture、CreateCubeTexture、CreateRenderTarget、CreateVertexBuffer、CreateIndexBuffer、CreateDepthStencilSurface、CreateOffscreenPlainSurface、CreateDepthStencilSurfaceEx、CreateOffscreenPlainSurfaceEx 和 CreateRenderTargetEx。

IDirectXVideoAccelerationService::CreateSurface 似乎不包括在内。

还有:

pSharedHandle [输入,输出]

指向句柄的指针,该句柄用于在 Direct3D 设备之间共享表面。将此参数设置为NULL。

好像不能用。

【讨论】:

以上是关于是否可以共享 DXVA 表面?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法限制哪些表面铬可以屏幕记录?

使用 DX11 和 DXVA2

如何判断 DXVA 解码器是不是已退回到软件解码

是否可以在子域之间共享 cookie

是否可以使用共享托管服务发送推送通知?

是否可以防止 C 共享库中的函数覆盖?