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.
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:
- Chiamare il metodo CBaseAllocator::SetProperties per specificare i requisiti del buffer, tra cui il numero di buffer e le dimensioni di ogni buffer.
- Chiamare il metodo CBaseAllocator::Commit per allocare i buffer.
- Chiamare il metodo CBaseAllocator::GetBuffer per recuperare esempi multimediali. Questo metodo blocca fino a quando l'esempio successivo non diventa disponibile.
- 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.
- 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 |
|
Libreria |
|