IMF2DBuffer 接口 (mfobjects.h)
表示包含二维图面(如视频帧)的缓冲区。
继承
IMF2DBuffer 接口继承自 IUnknown 接口。 IMF2DBuffer 也有以下类型的成员:
方法
IMF2DBuffer 接口具有这些方法。
IMF2DBuffer::ContiguousCopyFrom 将数据从具有连续格式的缓冲区复制到此缓冲区。 |
IMF2DBuffer::ContiguousCopyTo 将此缓冲区复制到调用方缓冲区,将数据转换为连续格式。 |
IMF2DBuffer::GetContiguousLength 检索以连续格式存储缓冲区内容所需的字节数。 |
IMF2DBuffer::GetScanline0AndPitch 检索指向缓冲区内存和图面步幅的指针。 |
IMF2DBuffer::IsContiguousFormat 查询缓冲区的本机格式是否连续。 |
IMF2DBuffer::Lock2D 使调用方能够访问缓冲区中的内存。 (IMF2DBuffer.Lock2D) |
IMF2DBuffer::Unlock2D 解锁以前锁定的缓冲区。 每次调用 IMF2DBuffer::Lock2D 时调用此方法一次。 |
注解
若要获取指向此接口的指针,请在媒体缓冲区上调用 QueryInterface 。
若要使用二维缓冲区,必须知道 步幅,这是从一行像素到下一行像素所需的字节数。 步幅可能大于图像宽度,因为图面可能包含每行像素后的填充字节。 如果像素在内存中自下而上的方向,则步幅也可以为负数。 有关详细信息,请参阅 图像步幅。
每种视频格式都定义 连续 或 打包表示 形式。 此表示形式与系统内存中 DirectX 图面的标准布局兼容,无需额外的填充。 对于 RGB 视频,连续表示形式的音高等于图像宽度(以字节为单位),向上舍入到最近的 DWORD 边界。 对于 YUV 视频,连续表示形式的布局取决于 YUV 格式。 对于平面 YUV 格式,Y 平面的间距可能与 you 和 V 平面不同。
如果媒体缓冲区支持 IMF2DBuffer 接口,则不保证基础缓冲区具有连续表示形式,因为每行像素后可能会有额外的填充字节。 当缓冲区不连续时, Lock 和 Lock2D 方法具有不同的行为:
- Lock2D 方法返回指向基础缓冲区的指针。 缓冲区可能不连续。
- Lock 方法返回保证连续的缓冲区。 如果基础缓冲区不连续,则 方法将数据复制到新 缓冲区,Unlock 方法将其复制回原始缓冲区。
对于未压缩的图像,缓冲区中的有效数据量取决于图像的宽度、高度和像素布局。 出于此原因,如果调用 Lock2D 来访问缓冲区,请不要依赖于 IMFMediaBuffer::GetCurrentLength 或 IMFMediaBuffer::GetMaxLength 返回的值。 同样,如果修改缓冲区中的数据,则不必调用 IMFMediaBuffer::SetCurrentLength 来更新大小。 通常,应避免在同一媒体缓冲区上混合调用 IMF2DBuffer 和 IMFMediaBuffer 方法。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | mfobjects.h (包括 Mfidl.h) |