从 IMFSample 中提取 RGB32 字节数据
Extract RGB32 Byte Data from IMFSample
我有 IMFSample 数据,即 RGB32,我想将此格式转换为 BMP,或者我想提取实际的 RGB32 字节并保存到文件和然后使用一些外部工具转换为 BMP 或任何其他格式。
所以问题是如何从 IMFSample
中获取 RGB32 数据
IMFSample::ConvertToContiguousBuffer
让你 IMFMediaBuffer
与数据交互
IMFMediaBuffer::Lock
让您可以访问原始数据
确保完成后解锁。然后照常释放COM接口指针。
可以通过 ConvertToContiguousBuffer 调用获取 IMFMediaBuffer 接口(如另一个答案中所述)。
此外,可以在 IMFMediaBuffer 中查询 IMF2DBuffer:https://msdn.microsoft.com/en-us/library/windows/desktop/ms699894(v=vs.85).aspx。
它的Lock2D方法在访问原始数据时更方便快捷:https://msdn.microsoft.com/en-us/library/windows/desktop/aa473821(v=vs.85).aspx。例如,Lock2D 返回的指向数据的指针和音调可用于 SetDiBitsToDevice 调用。
此外,如果缓冲区来自硬件加速解码器,您还可以查询 IMFMediaBuffer 以获取 IMFDXGIBuffer 以访问底层 DXGI 表面作为 ID3D11Texture2D:https://msdn.microsoft.com/en-us/library/windows/desktop/hh447901(v=vs.85).aspx。
您可以通过 Map/Unmap DirectX 11 方法访问 DXGI 缓冲区中的原始数据:https://msdn.microsoft.com/en-us/library/windows/desktop/ff476457(v=vs.85).aspx
您还可以查询 IMFMediaBuffer 的 IMFGetService 并从中获取 IDirect3DSurface9 接口。可以通过它的 Lock/Unlock 方法访问基础数据。
以下是访问 IMFSample 的 IMFMediaBuffer 中的原始数据的首选顺序:https://msdn.microsoft.com/en-us/library/windows/desktop/bb530112(v=vs.85).aspx
如果 IMFGetService / IDirect3DSurface9 失败,可以查询 IMFDXGIBuffer。
我有 IMFSample 数据,即 RGB32,我想将此格式转换为 BMP,或者我想提取实际的 RGB32 字节并保存到文件和然后使用一些外部工具转换为 BMP 或任何其他格式。
所以问题是如何从 IMFSample
IMFSample::ConvertToContiguousBuffer
让你IMFMediaBuffer
与数据交互IMFMediaBuffer::Lock
让您可以访问原始数据
确保完成后解锁。然后照常释放COM接口指针。
可以通过 ConvertToContiguousBuffer 调用获取 IMFMediaBuffer 接口(如另一个答案中所述)。 此外,可以在 IMFMediaBuffer 中查询 IMF2DBuffer:https://msdn.microsoft.com/en-us/library/windows/desktop/ms699894(v=vs.85).aspx。 它的Lock2D方法在访问原始数据时更方便快捷:https://msdn.microsoft.com/en-us/library/windows/desktop/aa473821(v=vs.85).aspx。例如,Lock2D 返回的指向数据的指针和音调可用于 SetDiBitsToDevice 调用。
此外,如果缓冲区来自硬件加速解码器,您还可以查询 IMFMediaBuffer 以获取 IMFDXGIBuffer 以访问底层 DXGI 表面作为 ID3D11Texture2D:https://msdn.microsoft.com/en-us/library/windows/desktop/hh447901(v=vs.85).aspx。 您可以通过 Map/Unmap DirectX 11 方法访问 DXGI 缓冲区中的原始数据:https://msdn.microsoft.com/en-us/library/windows/desktop/ff476457(v=vs.85).aspx
您还可以查询 IMFMediaBuffer 的 IMFGetService 并从中获取 IDirect3DSurface9 接口。可以通过它的 Lock/Unlock 方法访问基础数据。 以下是访问 IMFSample 的 IMFMediaBuffer 中的原始数据的首选顺序:https://msdn.microsoft.com/en-us/library/windows/desktop/bb530112(v=vs.85).aspx 如果 IMFGetService / IDirect3DSurface9 失败,可以查询 IMFDXGIBuffer。