【发布时间】:2017-09-11 23:03:45
【问题描述】:
我想使用“英特尔® 快速同步视频 H.264 编码器 MFT”对视频进行编码。 如果我从系统缓冲区创建 IMFSample,它运行良好。就像下面这样:
IMFMediaBuffer *pBuffer = NULL;
MFCreateMemoryBuffer(cbSize, &pBuffer);
BYTE *pData = NULL;
pBuffer->Lock(&pData, NULL, NULL);
memcpy(pData, bufferIhaveinYYYYUV format, buffer size);
pBuffer->Unlock();
IMFSample *pSample = NULL;
MFCreateSample(&pSample);
pSample->AddBuffer(pBuffer);
现在我正在研究是否可以将 ID3D11Texture2D 表面作为输入 (DXGI_FORMAT_NV12, 1280x720) 以提高性能。我尝试将使用 MFCreateVideoSampleFromSurface 或 MFCreateDXGISurfaceBuffer 创建的 IMFSample 实例传递给 IMFTransform::ProcessInput 并进行了多次实验(尝试不同的纹理创建标志),但最好的结果是所有输入样本都被接受,但没有产生输出样本。万一这很重要,我实际上从未尝试将数据上传到纹理,假设这不会对填充垃圾像素数据的纹理产生影响。
我做错了吗?
【问题讨论】:
-
当你遇到像你这样的问题时,你能给我一些帮助吗? here!
-
陶马克,你找到解决这个问题的方法了吗?我也遇到了同样的问题。出于性能原因,我目前正在尝试以 NV12 格式提供 ID3D11Texture2D 表面。您能指导我访问任何在线资源吗?
标签: c++ video-encoding ms-media-foundation