Metodo IMFTransform::P rocessInput (mftransform.h)
Fornisce dati a un flusso di input in questa trasformazione di Media Foundation (MFT).
Sintassi
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
Parametri
[in] dwInputStreamID
Identificatore del flusso di input. Per ottenere l'elenco di identificatori di flusso, chiamare FMTransform::GetStreamIDs.
[in] pSample
Puntatore all'interfaccia FMSample dell'esempio di input. L'esempio deve contenere almeno un buffer multimediale contenente dati di input validi.
[in] dwFlags
Riservato. Deve essere zero.
Valore restituito
Il metodo restituisce un HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.
Codice restituito | Descrizione |
---|---|
|
Il metodo è riuscito. |
|
Argomento non valido. |
|
Identificatore di flusso non valido. |
|
L'esempio di input richiede una durata di esempio valida. Per impostare la durata, chiamare FMSample::SetSampleDuration.
Alcune MFP richiedono che gli esempi di input abbiano durate valide. Alcune MFP non richiedono durate di esempio. |
|
L'esempio di input richiede un timestamp. Per impostare il timestamp, chiamare FMSample::SetSampleTime.
Alcune MFP richiedono che gli esempi di input abbiano timestamp validi. Alcune MFT non richiedono timestamp. |
|
La trasformazione non può elaborare più input in questo momento. |
|
Il tipo di supporto non è impostato su uno o più flussi. |
|
Il tipo di supporto non è supportato per l'accelerazione video DirectX (DXVA). Un decodificatore abilitato per DXVA potrebbe restituire questo codice di errore. |
Commenti
Nella maggior parte dei casi, se il metodo ha esito positivo, MFT archivia l'esempio e contiene un conteggio di riferimento sul puntatore FMSample . Non usare nuovamente l'esempio fino a quando il MFT rilascia l'esempio. Anziché archiviare l'esempio, tuttavia, un MFT potrebbe copiare i dati di esempio in un nuovo buffer. In tal caso, il MFT deve impostare il flag di MFT_INPUT_STREAM_DOES_NOT_ADDREF nel metodo IMFTransform::GetInputStreamInfo .
Se MFT dispone già di dati di input sufficienti per produrre un esempio di output, non accetta nuovi dati di input e ProcessInput restituisce MF_E_NOTACCEPTING. A questo punto, il client deve cancellare i dati di input in sospeso eseguendo una delle operazioni seguenti:
- Generare un nuovo output chiamando FMTransform::P rocessOutput.
- Scaricare i dati di input chiamando FMTransform::P rocessMessage con il messaggio MFT_MESSAGE_COMMAND_FLUSH .
Un MFT può elaborare i dati di input nel metodo ProcessInput . Tuttavia, la maggior parte delle reti MULTIFUNZIONe attende fino a quando il client chiama ProcessOutput.
Dopo che il client ha impostato tipi di supporti validi su tutti i flussi, il MFT deve sempre trovarsi in uno dei due stati: In grado di accettare più input o di produrre più output. Non dovrebbe mai essere in entrambi gli stati o nessuno dei due stati. Un MFT deve accettare solo l'input necessario per generare almeno un esempio di output, a quel punto ProcessInput restituisce MF_E_NOTACCEPTING. Quando ProcessInput restituisce MF_E_NOTACCEPTING, il client può presupporre che MFT sia pronto per produrre l'output.
Se un MFT rileva un errore non irreversibile nei dati di input, può semplicemente eliminare i dati e tentare di recuperare quando ottiene più dati di input. Per richiedere più dati di input, MFT restituisce MF_E_TRANSFORM_NEED_MORE_INPUT dal metodo FMTransform::P rocessOutput . Se MFT elimina i dati, deve impostare l'attributo dell'attributo MFSampleExtension_Discontinuity nell'esempio di output successivo, per notificare al chiamante che esiste un gap nel flusso di dati.
Se MFT_UNIQUE_METHOD_NAMES viene definito prima di includere mftransform.h, questo metodo viene rinominato MFTProcessInput. Vedere Creazione di oggetti DMO/MFT ibridi.
Elaborazione asincrona
Le osservazioni precedenti descrivono il modello di elaborazione sincrona . Per supportare l'elaborazione asincrona, vedere MFT asincroni.Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [app desktop | App UWP] |
Server minimo supportato | Windows Server 2008 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | mftransform.h |
Libreria | Mfuuid.lib |