IMF2DBuffer::Lock2D 方法 (mfobjects.h)

向调用方授予对缓冲区中的内存的访问权限。

语法

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

参数

[out] ppbScanline0

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

[out] plPitch

接收图面步幅(以字节为单位)。 步幅可能为负数,指示图像在内存中自下而上的方向。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
D3DERR_INVALIDCALL
无法锁定 Direct3D 图面。
MF_E_INVALIDREQUEST
此时无法锁定缓冲区。

注解

如果 p 是指向像素行中第一个字节的指针, 则 p + (*plPitch) 指向下一行像素中的第一个字节。 缓冲区可能包含每行像素后的填充,因此步幅可能比图像宽度宽(以字节为单位)。 不要访问为填充字节保留的内存,因为它可能无法读取或写入访问。 有关详细信息,请参阅 Image Stride

只要调用方持有锁, pbScanline0 中返回的指针就保持有效。 访问完内存后,调用 IMF2DBuffer::Unlock2D 以解锁缓冲区。 每次调用 Lock2D 时,都必须调用 Unlock2D 一次。 解锁缓冲区后, pbScanline0 中返回的指针不再有效,不应使用。 通常,最好仅在需要访问缓冲区内存时调用 Lock2D ,而不是更早调用。

IMFMediaBuffer::GetCurrentLengthIMFMediaBuffer::GetMaxLength 方法返回的值不适用于 Lock2D 方法返回的缓冲区。 出于同一原因,在操作 Lock2D 方法返回的缓冲区中的数据后,无需调用 IMFMediaBuffer::SetCurrentLength

IMFMediaBuffer::Lock 方法在 Lock2D 锁保持时失败,反之亦然。 应用程序一次只应使用其中一种方法。

当基础缓冲区是 Direct3D 图面时,如果图面不可锁定,该方法将失败。

要求

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

另请参阅

IMF2DBuffer

媒体缓冲区

未压缩的视频缓冲区