Metodo CBaseInputPin.Receive
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine 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, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Il Receive
metodo riceve l'esempio multimediale successivo nel flusso. Questo metodo implementa il metodo IMemInputPin::Receive .
Sintassi
HRESULT Receive(
IMediaSample *pSample
);
Parametri
-
pSample
-
Puntatore all'interfaccia IMediaSample dell'esempio.
Valore restituito
Restituisce un valore HRESULT . I valori possibili includono quelli elencati nella tabella seguente.
Codice restituito | Descrizione |
---|---|
|
Operazione completata. |
|
Il pin è attualmente scaricamento; il campione è stato rifiutato. |
|
Argomento puntatore NULL. |
|
Tipo di supporto non valido. |
|
Si è verificato un errore di run-time. |
|
Il segnaposto viene arrestato. |
Commenti
Il pin di output upstream chiama questo metodo per recapitare un esempio al pin di input. Il pin di input deve eseguire una delle operazioni seguenti:
- Elaborare l'esempio prima di restituire.
- Restituire ed elaborare l'esempio in un thread di lavoro.
- Rifiutare l'esempio.
Se il pin usa un thread di lavoro per elaborare l'esempio, aggiungere un conteggio dei riferimenti all'esempio all'interno di questo metodo. Al termine del metodo, il pin upstream rilascia l'esempio. Quando il conteggio dei riferimenti dell'esempio raggiunge zero, l'esempio torna all'allocatore per il riutilizzo.
Questo metodo è sincrono e può bloccarsi. Se il metodo potrebbe bloccarsi, il metodo CBaseInputPin::ReceiveCanBlock del pin deve restituire S_OK.
Nella classe base questo metodo esegue i passaggi seguenti:
- Chiama il metodo CBaseInputPin::CheckStreaming per verificare che il pin possa elaborare ora esempi. Se ad esempio non è possibile, se il pin viene arrestato, il metodo ha esito negativo.
- Recupera le proprietà di esempio e controlla se il formato è stato modificato (vedere di seguito).
- Se il formato è stato modificato, il metodo chiama il metodo CBasePin::CheckMediaType per determinare se il nuovo formato è accettabile.
- Se il nuovo formato non è accettabile, il metodo chiama il metodo CBasePin::EndOfStream , invia un evento EC_ERRORABORT e restituisce un codice di errore.
- Supponendo che non ci siano errori, il metodo restituisce S_OK.
Testare la modifica di un formato nel modo seguente:
- Se l'esempio supporta l'interfaccia IMediaSample2 , controllare il membro dwSampleFlags della struttura AM_SAMPLE2_PROPERTIES . Se il flag AM_SAMPLE_TYPECHANGED è presente, il formato è stato modificato.
- In caso contrario, se l'esempio non supporta IMediaSample2, chiamare il metodo IMediaSample::GetMediaType . Se il metodo restituisce un valore non NULL , il formato è stato modificato.
Nella classe di base questo metodo non elabora l'esempio. La classe derivata deve eseguire l'override di questo metodo per eseguire l'elaborazione. Ciò che comporta dipende interamente dal filtro. La classe derivata deve chiamare il metodo della classe base per verificare la presenza degli errori descritti in precedenza.
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Libreria |
|