Metodo CBaseAllocator.GetBuffer

[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.

Il GetBuffer metodo recupera un esempio multimediale che contiene un buffer. Questo metodo implementa il metodo IMemAllocator::GetBuffer .

Sintassi

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Parametri

ppBuffer

Riceve un puntatore all'interfaccia IMediaSample del buffer. Il chiamante deve rilasciare l'interfaccia.

pStartTime

Puntatore all'ora di inizio dell'esempio.

pEndTime

Puntatore all'ora di fine dell'esempio.

dwFlags

Combinazione bit per bit di zero o più flag. La classe base supporta il flag seguente.

Valore Significato
AM_GBF_NOWAIT
Non attendere che un buffer diventi disponibile.

Valore restituito

Restituisce uno dei valori HRESULT seguenti.

Codice restituito Descrizione
S_OK
Operazione completata.
VFW_E_NOT_COMMITTED
Allocatore non è stato eseguito il commit.
VFW_E_TIMEOUT
Timeout.

Commenti

A meno che il chiamante non specifichi il flag AM_GBF_NOWAIT in dwFlags, questo metodo blocca fino a quando non è disponibile l'esempio successivo.

L'esempio di supporto recuperato ha un puntatore valido al buffer allocato. Il chiamante è responsabile dell'impostazione di qualsiasi altra proprietà nell'esempio, ad esempio i timestamp, i tempi multimediali o la proprietà del punto di sincronizzazione. Per altre informazioni, vedere IMediaSample.

Nella classe di base i parametri pStartTime e pEndTime vengono ignorati. Le classi derivate possono usare questi valori. Ad esempio, l'allocatore per il filtro Video Renderer usa questi valori per sincronizzare l'opzione tra le superfici DirectDraw.

Se il metodo deve attendere un esempio, incrementa il numero di oggetti in attesa (CBaseAllocator::m_lCount) e la funzione WaitForSingleObject nel semaforo (CBaseAllocator::m_hSem). Quando un esempio diventa disponibile, chiama il metodo CBaseAllocator::ReleaseBuffer nell'allocatore, che aumenta il conteggio dei semafori per m_lCount (rilasciando quindi i thread in attesa) e imposta m_lCount indietro su zero.

Requisiti

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

Vedi anche

Classe CBaseAllocator