Negoziazione del tipo di supporto EVR

[Il componente descritto in questa pagina, Il renderer video avanzato è una funzionalità legacy. È stato sostituito dal Simple Video Renderer (SVR) esposto attraverso i componenti MediaPlayer e IMFMediaEngine . Per riprodurre contenuti video, è necessario inviare dati a uno di questi componenti e consentire loro di creare un'istanza del nuovo renderer video. Questi componenti sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer o le API IMFMediaEngine di livello inferiore per riprodurre contenuti multimediali video in Windows anziché EVR, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

In questo argomento viene descritto il modo in cui il renderer video avanzato convalida i tipi di supporti.

  • Per il filtro EVR DirectShow, la negoziazione dei tipi si verifica quando i pin del filtro sono connessi.

  • Per il sink multimediale EVR, i tipi di supporto vengono impostati tramite l'interfaccia IMFMediaTypeHandler nei sink di flusso. In genere il caricatore della topologia negozia i tipi di supporti, anche se l'applicazione può impostare direttamente i tipi di supporti.

EVR non segnala alcun tipo di supporto preferito. Il client deve testare i tipi di supporti finché non trova un tipo accettabile. Il tipo di supporto per il flusso di riferimento deve essere impostato prima che i tipi possano essere impostati su uno dei sottostream.

Per il flusso di riferimento, il mixer EVR ottiene un elenco di formati di destinazione di rendering DXVA (DirectX Video Acceleration). Il relatore EVR usa questo elenco per selezionare il formato per la catena di scambio Direct3D. Se non è possibile trovare alcun formato di destinazione di rendering compatibile, EVR rifiuta il tipo di supporto.

Per i sottostream, il mixer EVR esegue una query se il dispositivo DXVA supporta il formato substream in combinazione con il formato di destinazione di rendering selezionato per il flusso di riferimento. Di conseguenza, i formati di substream disponibili potrebbero cambiare a seconda del flusso di riferimento.

Ecco il processo in modo più dettagliato. Questi dettagli non sono importanti per la maggior parte delle applicazioni, ma potrebbero essere utili se si scrive un mixer personalizzato o relatore.

Per il flusso di riferimento, la negoziazione avviene nel modo seguente:

  1. L'EVR chiama IMFTransform::SetInputType sul mixer.

  2. Il mixer converte il tipo di supporto in una descrizione DXVA 2.0, usando la struttura DXVA2_VideoDesc.

  3. Il mixer chiama IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids per ottenere un elenco di GUID del processore video.

  4. Per ogni GUID del processore video, il mixer chiama IDirectXVideoProcessorService::GetVideoProcessorRenderTargets per ottenere i formati di destinazione di rendering supportati.

  5. L'EVR chiama IMFVideoPresenter::P rocessMessage sul relatore con il messaggio MFVP_MESSAGE_INVALIDATEMEDIATYPE. Questo messaggio fa sì che il relatore selezioni un nuovo formato.

  6. Il relatore chiama IMFTransform::GetOutputAvailableType per ottenere un elenco dei formati di output disponibili dal mixer. Il mixer genera questo elenco dai formati ottenuti nel passaggio 4.

  7. Il relatore seleziona un formato e chiama IMFTransform::SetOutputType nel mixer.

Per i sottostream, il processo è più semplice:

  1. L'EVR chiama IMFTransform::SetInputType sul mixer.

  2. Il mixer chiama IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats per ottenere un elenco dei formati substream disponibili.

  3. Se il formato proposto è contenuto in questo elenco, L'EVR accetta il tipo di input.

Renderer video avanzato