Condividi tramite


Metodo IMFSourceReaderEx::AddTransformForStream (mfreadwrite.h)

Aggiunge una trasformazione, ad esempio un effetto audio o video, a un flusso.

Sintassi

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

Parametri

[in] dwStreamIndex

Flusso da configurare. Il valore può essere uno dei seguenti.

Valore Significato
0-0xFFFFFFFB
Indice in base zero di un flusso.
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
Primo flusso video.
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
Primo flusso audio.

[in] pTransformOrActivate

Puntatore a uno dei seguenti:

  • Trasformazione MFT (Media Foundation) che espone l'interfaccia IMFTransform .
  • Oggetto attivazione MFT che espone l'interfaccia IMFActivate .

Valore restituito

Questo metodo può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
MF_E_INVALIDMEDIATYPE
La trasformazione non supporta il formato del flusso corrente e non è stata possibile alcuna conversione. Per ulteriori informazioni, vedere la sezione Osservazioni.
MF_E_INVALIDREQUEST
Richiesta non valida.
MF_E_INVALIDSTREAMNUMBER
Il parametro dwStreamIndex non è valido.

Commenti

Questo metodo tenta di aggiungere la trasformazione alla fine della catena di elaborazione corrente.

Per usare questo metodo, effettuare la sequenza di chiamate seguente:

  1. Chiamare IMFSourceReader::SetCurrentMediaType per impostare il tipo di output desiderato per il flusso. In questo passaggio è possibile specificare un tipo di supporto contenente solo il tipo principale e i GUID del sottotipo. Ad esempio, per ottenere l'output RGB a 32 bit, impostare un tipo principale di MFMediaType_Video e un sottotipo di MFVideoFormat_RGB32. Per altre informazioni, vedere GUID del tipo di supporto.
  2. Chiamare AddTransformForStream. Se il lettore di origine connette correttamente la trasformazione, imposta il tipo di output nella trasformazione.
  3. Chiamare IMFSourceReader::GetCurrentMediaType per ottenere il tipo di output dalla trasformazione. Questo metodo restituisce un tipo di supporto con una descrizione completa del formato.
  4. Facoltativamente, se si desidera modificare il tipo di output, chiamare di nuovo IMFSourceReader::SetCurrentMediaType per impostare un tipo di supporto completo nella trasformazione.
Il metodo AddTransformForStream non inserisce un decodificatore nella catena di elaborazione. Se il formato del flusso nativo è codificato e la trasformazione richiede un formato non compresso, chiamare SetCurrentMediaType per impostare il formato non compresso (passaggio 1 nell'elenco precedente). Tuttavia, il metodo inserisce un processore video per la conversione tra formati RGB e YUV, se necessario.

Il metodo ha esito negativo se il lettore di origine è stato configurato con gli attributi MF_READWRITE_DISABLE_CONVERTERS o MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING .

In modalità asincrona, il metodo ha esito negativo anche se una richiesta di esempio è in sospeso. In tal caso, attendere che il callback OnReadSample venga richiamato prima di chiamare il metodo . Per altre informazioni sull'uso del lettore di origine in modalità asincrona, vedere IMFSourceReader::ReadSample.

È possibile aggiungere una trasformazione in qualsiasi momento durante lo streaming. Tuttavia, il metodo non scarica o svuota la pipeline prima di inserire la trasformazione. Pertanto, se i dati sono già presenti nella pipeline, l'esempio successivo non garantisce l'applicazione della trasformazione.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfreadwrite.h

Vedi anche

IMFSourceReaderEx

Lettore di origine