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

若要使用 2D 緩衝區,請務必知道 步幅,這是從一個像素數據列移至下一個像素數據列所需的位元元數目。 該步幅可能大於影像寬度,因為表面可能包含每個像素數據列之後的填補位元組。 如果圖元在記憶體中由下而上導向,則進階也可以是負數。 如需詳細資訊,請參閱 Image Stride

每個視訊格式都會定義 連續封裝 的表示法。 此表示法與系統記憶體中 DirectX 介面的標準版面配置相容,不需要額外的邊框間距。 針對 RGB 視訊,連續表示法的間距等於影像寬度,以位元組為單位,四捨五入到最接近 的 DWORD 界限。 對於 YUV 影片,連續表示法的配置取決於 YUV 格式。 針對平面 YUV 格式,Y 平面的音調可能與您和 V 平面不同。

如果媒體緩衝區支援 IMF2DBuffer 介面,則基礎緩衝區不保證具有連續表示法,因為每個像素數據列之後可能會有額外的填補位元組。 當緩衝區非連續時, LockLock2D 方法的行為不同:

  • Lock2D 方法會傳回基礎緩衝區的指標。 緩衝區可能不連續。
  • Lock 方法會傳回保證連續的緩衝區。 如果基礎緩衝區不連續,方法會將數據複製到新的緩衝區,而 Unlock 方法會將它複製到原始緩衝區。
呼叫 Lock2D 方法來存取其原生格式的 2D 緩衝區。 原生格式可能不連續。 緩衝區的 IMFMediaBuffer::Lock 方法會傳回緩衝區的連續表示法。 不過,這可能需要原生格式的內部複本。 因此,對於 2D 緩衝區,您應該使用 Lock2D 方法,並避免 Lock 方法。 因為 Lock 方法可能會造成最多兩個緩衝區複本, 所以 Lock2D 方法通常更有效率,而且應該盡可能使用。 若要找出基礎緩衝區是否連續,請呼叫 IMF2DBuffer::IsContiguousFormat

對於未壓縮的影像,緩衝區中的有效數據量取決於影像的寬度、高度和像素配置。 基於這個理由,如果您呼叫 Lock2D 來存取緩衝區,請勿依賴 IMFMediaBuffer::GetCurrentLengthIMFMediaBuffer::GetMaxLength 所傳回的值。 同樣地,如果您修改緩衝區中的數據,就不需要呼叫 IMFMediaBuffer::SetCurrentLength 來更新大小。 一般而言,您應該避免在相同的媒體緩衝區上混合對 IMF2DBufferIMFMediaBuffer 方法的呼叫。

規格需求

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

另請參閱

媒體緩衝區

媒體基礎介面

未壓縮的視訊緩衝區