Classe CBaseAllocator

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

gerarchia di classi cbaseallocator

La classe CBaseAllocator è una classe base astratta che implementa un allocatore. Gli allocatori espongono l'interfaccia IMemAllocator .

Un allocatore è un oggetto che alloca buffer di memoria. L'allocatore gestisce un elenco di buffer disponibili. Quando un client (in genere un filtro) richiede un buffer, l'allocatore recupera uno dall'elenco. Il client riempie il buffer con dati e potrebbe passare il buffer a un altro oggetto. Alla fine il buffer viene rilasciato e l'allocatore lo restituisce all'elenco dei buffer disponibili.

Ogni buffer viene incapsulato da un oggetto denominato esempio multimediale. Gli esempi multimediali sono un modo per creare un pacchetto di puntatori a blocchi di memoria all'interno del framework COM (Component Object Model). Gli esempi multimediali espongono l'interfaccia IMediaSample e vengono implementati usando la classe CMediaSample . Un esempio multimediale contiene un puntatore al buffer associato, a cui è possibile accedere chiamando il metodo IMediaSample::GetPointer . Per altre informazioni, vedere Esempi e allocatori.

Per usare questa classe, seguire questa procedura:

  1. Chiamare il metodo CBaseAllocator::SetProperties per specificare i requisiti del buffer, tra cui il numero di buffer e le dimensioni di ogni buffer.
  2. Chiamare il metodo CBaseAllocator::Commit per allocare i buffer.
  3. Chiamare il metodo CBaseAllocator::GetBuffer per recuperare esempi multimediali. Questo metodo blocca fino a quando l'esempio successivo non diventa disponibile.
  4. Al termine di ogni esempio, chiamare il metodo IUnknown::Release nell'esempio. L'esempio non viene eliminato quando il numero di riferimenti raggiunge zero. L'esempio restituisce invece all'elenco gratuito dell'allocatore.
  5. Al termine dell'uso dell'allocatore, chiamare il metodo CBaseAllocator::D ecommit per liberare la memoria per i buffer.

Il metodo Commit chiama il metodo virtuale CBaseAllocator::Alloc, che alloca la memoria per i buffer. Il metodo Decommit chiama il metodo virtuale puro CBaseAllocator::Free, che libera la memoria. Le classi derivate devono eseguire l'override di questi due metodi.

La classe di base CMemAllocator deriva da CBaseAllocator. Le classi di base del filtro usano la classe CMemAllocator .

Variabili membro protette Descrizione
m_lFree Puntatore a un elenco di esempi multimediali disponibili (gratuiti).
m_hSem Semaforo segnalato quando un campione diventa disponibile.
m_lWaiting Numero di thread in attesa di esempi.
m_lCount Numero di buffer da fornire.
m_lAllocated Numero di buffer attualmente allocati.
m_lSize Dimensioni di ogni buffer.
m_lAlignment Allineamento di ogni buffer.
m_lPrefix Prefisso di ogni buffer.
m_bChanged Flag che indica se i requisiti del buffer sono stati modificati.
m_bCommitted Flag che indica se l'allocatore è stato eseguito il commit.
m_bDecommitInProgress Flag che indica se un'operazione di decommit è in corso.
m_pNotify Puntatore a un'interfaccia di callback, chiamata quando vengono rilasciati esempi.
m_fEnableReleaseCallback Flag che indica se il callback della versione è abilitato.
Metodi protetti Descrizione
Alloc Alloca memoria per i buffer. Virtuale.
Metodi pubblici Descrizione
CBaseAllocator Metodo costruttore.
~ CBaseAllocator Metodo distruttore.
SetNotify Obsoleta.
GetFreeCount Recupera il numero di campioni multimediali che non sono in uso.
NotifySample Rilascia tutti i thread in attesa di esempi.
SetWaiting Incrementa il numero di thread in attesa.
Metodi virtuali pure Descrizione
Gratuito Rilascia tutta la memoria del buffer.
Metodi IMemAllocator Descrizione
SetProperties Specifica il numero di buffer da allocare e le dimensioni di ogni buffer.
GetProperties Recupera il numero di buffer creati dall'allocatore e le proprietà del buffer.
Commettere Alloca la memoria per i buffer.
Decommit Decommette i buffer.
GetBuffer Recupera un esempio multimediale che contiene un buffer.
Releasebuffer Restituisce un esempio multimediale all'elenco di esempi multimediali gratuiti.

Requisiti

Requisito Valore
Intestazione
Amfilter.h (include Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)

Vedi anche

Fornire un allocatore personalizzato