Condividi tramite


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
S_OK
Il metodo è riuscito.
E_INVALIDARG
Argomento non valido.
MF_E_INVALIDSTREAMNUMBER
Identificatore di flusso non valido.
MF_E_NO_SAMPLE_DURATION
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.

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

MF_E_NOTACCEPTING
La trasformazione non può elaborare più input in questo momento.
MF_E_TRANSFORM_TYPE_NOT_SET
Il tipo di supporto non è impostato su uno o più flussi.
MF_E_UNSUPPORTED_D3D_TYPE
Il tipo di supporto non è supportato per l'accelerazione video DirectX (DXVA). Un decodificatore abilitato per DXVA potrebbe restituire questo codice di errore.
 
Nota Se si converte un oggetto DirectX Media (DMO) in un MFT, tenere presente che S_FALSE non è un codice restituito valido per FMTransform::P rocessInput, a differenza del metodo IMediaObject::P rocessInput .
 

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:

Un'eccezione a questa regola è il flag MFT_OUTPUT_STREAM_LAZY_READ . Quando questo flag è presente, la trasformazione eliminerà gli esempi archiviati se lo si dà più input. Per altre informazioni, vedere FMTransform::GetOutputStreamInfo. Una trasformazione non deve mai accodare più dati di input di quanto sia necessario per produrre l'output corretto.

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

Vedi anche

FMTransform

Trasformazioni di Media Foundation