IMF2DBuffer::Lock2D 方法 (mfobjects.h)
向调用方授予对缓冲区中的内存的访问权限。
语法
HRESULT Lock2D(
[out] BYTE **ppbScanline0,
[out] LONG *plPitch
);
参数
[out] ppbScanline0
接收指向图像中像素顶部行的第一个字节的指针。 当图像呈现给查看器时,首行定义为首行,并且可能不是内存中的第一行。
[out] plPitch
接收图面步幅(以字节为单位)。 步幅可能为负数,指示图像在内存中自下而上的方向。
返回值
该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。
返回代码 | 说明 |
---|---|
|
方法成功。 |
|
无法锁定 Direct3D 图面。 |
|
此时无法锁定缓冲区。 |
注解
如果 p 是指向像素行中第一个字节的指针, 则 p + (*plPitch) 指向下一行像素中的第一个字节。 缓冲区可能包含每行像素后的填充,因此步幅可能比图像宽度宽(以字节为单位)。 不要访问为填充字节保留的内存,因为它可能无法读取或写入访问。 有关详细信息,请参阅 Image Stride。
只要调用方持有锁, pbScanline0 中返回的指针就保持有效。 访问完内存后,调用 IMF2DBuffer::Unlock2D 以解锁缓冲区。 每次调用 Lock2D 时,都必须调用 Unlock2D 一次。 解锁缓冲区后, pbScanline0 中返回的指针不再有效,不应使用。 通常,最好仅在需要访问缓冲区内存时调用 Lock2D ,而不是更早调用。
IMFMediaBuffer::GetCurrentLength 和 IMFMediaBuffer::GetMaxLength 方法返回的值不适用于 Lock2D 方法返回的缓冲区。 出于同一原因,在操作 Lock2D 方法返回的缓冲区中的数据后,无需调用 IMFMediaBuffer::SetCurrentLength。
IMFMediaBuffer::Lock 方法在 Lock2D 锁保持时失败,反之亦然。 应用程序一次只应使用其中一种方法。
当基础缓冲区是 Direct3D 图面时,如果图面不可锁定,该方法将失败。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | mfobjects.h (包括 Mfidl.h) |
Library | Mfuuid.lib |