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

保留 Lock2D鎖定時,IMFMediaBuffer::Lock 方法會失敗,反之亦然。 應用程式一次只能使用其中一種方法。

當基礎緩衝區是 Direct3D 表面時,如果介面無法鎖定,方法就會失敗。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 mfobjects.h (包含 Mfidl.h)
程式庫 Mfuuid.lib

另請參閱

IMF2DBuffer

媒體緩衝區

未壓縮的視訊緩衝區