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 介面,則基礎緩衝區不保證具有連續表示法,因為每個像素數據列之後可能會有額外的填補位元組。 當緩衝區非連續時, Lock 和 Lock2D 方法的行為不同:
- Lock2D 方法會傳回基礎緩衝區的指標。 緩衝區可能不連續。
- Lock 方法會傳回保證連續的緩衝區。 如果基礎緩衝區不連續,方法會將數據複製到新的緩衝區,而 Unlock 方法會將它複製到原始緩衝區。
對於未壓縮的影像,緩衝區中的有效數據量取決於影像的寬度、高度和像素配置。 基於這個理由,如果您呼叫 Lock2D 來存取緩衝區,請勿依賴 IMFMediaBuffer::GetCurrentLength 或 IMFMediaBuffer::GetMaxLength 所傳回的值。 同樣地,如果您修改緩衝區中的數據,就不需要呼叫 IMFMediaBuffer::SetCurrentLength 來更新大小。 一般而言,您應該避免在相同的媒體緩衝區上混合對 IMF2DBuffer 和 IMFMediaBuffer 方法的呼叫。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | mfobjects.h (include Mfidl.h) |