1

我有一个产生 NV12 yuv 帧的解码器。我想做的是使用单个 memcpy 将该帧复制到 ID3D11Texture2D 纹理。因为 D3D11_MAPPED_SUBRESOURCE 的 RowPitch 与我的 NV12 帧不同,所以我必须逐行复制整个 yuv,这非常昂贵。有一个更好的方法吗?

我试图找到有关此主题的任何信息,但到目前为止没有任何运气。

// Copy from CPU access texture to bitmap buffer
D3D11_MAPPED_SUBRESOURCE resource;
UINT subresource = D3D11CalcSubresource(0, 0, 0);
OutMgr.m_DeviceContext->Map(OutMgr.m_texture, subresource, D3D11_MAP_WRITE_DISCARD, 0, &resource);

BYTE* dptr = reinterpret_cast<BYTE*>(resource.pData);

for (int i = 0; i < nv12Frame->height; i++)
{
    memcpy(dptr + resource.RowPitch * i, nv12Frame->Y + nv12Frame->pitch * i, nv12Frame->pitch);
}

for (int i = 0; i < nv12Frame->height / 2; i++)
{
    memcpy(dptr + resource.RowPitch *(nv12Frame->height + i), nv12Frame->UV + nv12Frame->pitch * i, nv12Frame->pitch);
}

OutMgr.m_DeviceContext->Unmap(OutMgr.m_texture, subresource);
4

0 回答 0