CBaseAllocator 類別
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
CBaseAllocator類別是實作配置器的抽象基類。 配置器會公開 IMemAllocator 介面。
配置器是配置記憶體緩衝區的物件。 配置器會維護可用的緩衝區清單。 當用戶端 (篩選) 要求緩衝區時,配置器會從清單中擷取一個。 用戶端會以資料填滿緩衝區,而且可能會將緩衝區傳遞至另一個物件。 最後會釋放緩衝區,配置器會將它傳回至可用的緩衝區清單。
每個緩衝區都是由稱為 媒體範例的物件所封裝。 媒體範例是將元件物件模型 (COM) 架構內記憶體區塊指標封裝的方式。 媒體範例會公開 IMediaSample 介面,並使用 CMediaSample 類別來實作。 媒體範例包含相關聯緩衝區的指標,可藉由呼叫 IMediaSample::GetPointer 方法來存取。 如需詳細資訊,請參閱 範例和配置器。
若要使用此類別,請執行下列步驟:
- 呼叫 CBaseAllocator::SetProperties 方法來指定緩衝區需求,包括緩衝區數目和每個緩衝區的大小。
- 呼叫 CBaseAllocator::Commit 方法來配置緩衝區。
- 呼叫 CBaseAllocator::GetBuffer 方法來擷取媒體範例。 這個方法會封鎖直到下一個範例可供使用為止。
- 當您完成每個範例時,請在範例上呼叫 IUnknown::Release 方法。 當樣本的參考計數達到零時,不會刪除。 相反地,此範例會返回配置器的免費清單。
- 當您使用配置器完成時,請呼叫 CBaseAllocator::D ecommit 方法來釋放緩衝區的記憶體。
Commit方法會呼叫虛擬方法CBaseAllocator::Alloc,以配置緩衝區的記憶體。 Decommit方法會呼叫純虛擬方法CBaseAllocator::Free,以釋放記憶體。 衍生類別必須覆寫這兩種方法。
CMemAllocator基類衍生自CBaseAllocator。 篩選基類會使用 CMemAllocator 類別。
受保護的成員變數 | Description |
---|---|
m_lFree | 可用 (可用) 媒體範例清單的指標。 |
m_hSem | 當樣本可供使用時發出訊號的旗號。 |
m_lWaiting | 等候樣本的執行緒計數。 |
m_lCount | 要提供的緩衝區數目。 |
m_lAllocated | 目前配置的緩衝區數目。 |
m_lSize | 每個緩衝區的大小。 |
m_lAlignment | 每個緩衝區的對齊方式。 |
m_lPrefix | 每個緩衝區的前置詞。 |
m_bChanged | 指出緩衝區需求是否已變更的旗標。 |
m_bCommitted | 旗標,指出配置器是否已認可。 |
m_bDecommitInProgress | 旗標,指出取消認可作業是否正在進行中。 |
m_pNotify | 回呼介面的指標,在釋放樣本時會呼叫此介面。 |
m_fEnableReleaseCallback | 指出是否啟用發行回呼的旗標。 |
保護方法 | Description |
Alloc | 為緩衝區配置記憶體。 虛擬。 |
公用方法 | Description |
CBaseAllocator | 建構函式方法。 |
~ CBaseAllocator | 解構函式方法。 |
SetNotify | 已過時。 |
GetFreeCount | 擷取未使用中的媒體範例數目。 |
NotifySample | 釋放正在等候範例的任何執行緒。 |
SetWaiting | 遞增等候執行緒的計數。 |
純虛擬方法 | Description |
免費 | 釋放所有緩衝區記憶體。 |
IMemAllocator 方法 | Description |
SetProperties | 指定要配置的緩衝區數目,以及每個緩衝區的大小。 |
GetProperties | 擷取配置器將建立的緩衝區數目,以及緩衝區屬性。 |
Commit | 配置緩衝區的記憶體。 |
取消認可 | 取消認可緩衝區。 |
GetBuffer | 擷取包含緩衝區的媒體範例。 |
ReleaseBuffer | 將媒體範例傳回免費媒體範例清單。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|