IMF2DBuffer2::Lock2DSize 方法 (mfobjects.h)

使调用方能够访问缓冲区中的内存。

语法

HRESULT Lock2DSize(
  [in]  MF2DBuffer_LockFlags lockFlags,
  [out] BYTE                 **ppbScanline0,
  [out] LONG                 *plPitch,
  [out] BYTE                 **ppbBufferStart,
  [out] DWORD                *pcbBufferLength
);

参数

[in] lockFlags

MF2DBuffer_LockFlags枚举的成员,指定是锁定缓冲区以读取和/或写入。

[out] ppbScanline0

接收指向图像中像素顶部行的第一个字节的指针。 当图像呈现给查看器时,首行定义为首行,并且可能不是内存中的第一行。

[out] plPitch

接收图面步幅(以字节为单位)。 步幅可能为负值,表示图像在内存中从下向上方向。

[out] ppbBufferStart

接收指向内存中可访问缓冲区的开头的指针。

[out] pcbBufferLength

接收缓冲区的长度(以字节为单位)。

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK
成功。
MF_E_INVALIDREQUEST
请求无效。 缓冲区可能已使用不兼容的锁定标志锁定。 请参阅“备注”。
E_OUTOFMEMORY
内存不足,无法完成操作。

注解

访问完内存后,调用 IMF2DBuffer::Unlock2D 以解锁缓冲区。 每次调用 Lock2DSize 时,都必须调用 Unlock2D 一次。

此方法等效于 IMF2DBuffer::Lock2D 方法。 但是, 首选 Lock2DSize ,因为它使调用方能够验证内存指针,并且它支持只读锁。 缓冲区不保证支持 IMF2DBuffer2 接口。 若要访问缓冲区,应按列出的顺序尝试以下方法:

  1. IMF2DBuffer2::Lock2DSize
  2. IMF2DBuffer::Lock2D
  3. IMFMediaBuffer::Lock
ppbBufferStart印刷板BufferLength 参数接收缓冲区内存的边界。 使用这些值来防止缓冲区溢出。 使用 ppbScanline0plPitch 的值访问图像数据。 如果图像在内存中自下而上, ppbScanline0 将指向内存中的最后一个扫描行, plPitch 将为负值。 有关详细信息,请参阅 图像步幅

lockFlags 参数指定是针对只读访问、只写访问还是读/写访问锁定缓冲区。

  • 如果已锁定缓冲区以便进行只读访问,则无法将其锁定以便进行写入访问。
  • 如果已锁定缓冲区以便进行写入访问,则无法将其锁定以用于读取访问。
  • 如果缓冲区已锁定以便进行读/写访问,则可以将其锁定以用于读取或写入访问。
如果可能,请使用只读或只写锁,并避免锁定缓冲区以便进行读/写访问。 如果缓冲区表示 DirectX 图形基础结构 (DXGI) 图面,读/写锁可能会导致 CPU 内存和 GPU 内存之间发生额外复制。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 mfobjects.h (包括 Mfidl.h)

另请参阅

IMF2DBuffer2