Mixer personalizzati
[Il componente descritto in questa pagina, Enhanced Video Renderer, è una funzionalità legacy. È stato sostituito dal Simple Video Renderer (SVR) esposto tramite 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 il livello inferiore IMFMediaEngine API 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.
Questo argomento descrive come scrivere un mixer personalizzato per il renderer video avanzato (EVR). È possibile usare un mixer personalizzato con il sink multimediale EVR di Media Foundation o il filtro EVR DirectShow. Per altre informazioni su mixer e relatori, vedere Enhanced Video Renderer.
Il mixer è una trasformazione Media Foundation (MFT) con uno o più input (il flusso di riferimento più i sottostream) e un output. Il flusso di input riceve campioni da upstream. Il flusso di output fornisce esempi al relatore. L'EVR è responsabile di chiamare IMFTransform::P rocessInput sul mixer e il relatore è responsabile di chiamare IMFTransform::P rocessOutput.
Come minimo, un mixer EVR deve implementare le interfacce seguenti:
Interfaccia | Descrizione |
---|---|
IMFTransform | Fornisce la funzionalità MFT di base. |
IMFTopologyServiceLookupClient | Consente al mixer di ottenere le interfacce dall'EVR. |
IMFVideoDeviceID | Consente al mixer di ottenere le interfacce dall'EVR. |
IMFAttributes | Usato per esporre l'attributo MF_SA_D3D_AWARE all'EVR. |
Facoltativamente, un MFT può implementare una delle interfacce seguenti:
Interfaccia | Descrizione |
---|---|
IEVRTrustedVideoPlugin | Obbligatorio per riprodurre contenuto protetto. |
IMFGetService | Espone interfacce come IMFVideoMixerBitmap e IMFVideoProcessor all'applicazione. |
IMFQualityAdvise | Consente al gestore qualità di regolare la qualità del video. |
IMFVideoMixerBitmap | Consente all'applicazione di combinare una bitmap statica nel video. |
IMFVideoPositionMapper | Esegue il mapping delle coordinate sul fotogramma video di output alle coordinate sul fotogramma video di input. |
IMFVideoProcessor | Espone alcune funzionalità di elaborazione video DXVA all'applicazione. |
La negoziazione del formato con il mixer funziona come segue:
EVR imposta il tipo di supporto nel flusso di riferimento.
L'EVR chiama IMFVideoPresenter::P rocessMessage sul relatore con il messaggio MFVP_MESSAGE_INVALIDATEMEDIATYPE.
Il relatore imposta il tipo di supporto nel flusso di output del mixer.
L'EVR imposta il tipo di supporto nei sottostream.
Se il tipo di supporto nel flusso di riferimento cambia, gli altri tipi di supporti del mixer non sono più validi. Il metodo di IMFTransform::P rocessOutput del mixer avrà esito negativo e restituirà MF_E_TRANSFORM_STREAM_CHANGE. Il relatore non deve eseguire alcuna operazione a questo punto. L'EVR avvierà di nuovo il processo di negoziazione del formato.
Quando un flusso di input raggiunge la fine del flusso, L'EVR chiama IMFTransform::P rocessMessage sul mixer con MFT_MESSAGE_NOTIFY_END_OF_STREAM.
Il mixer invia gli eventi seguenti all'EVR, usando l'interfaccia IMediaEventSink. Questa interfaccia è documentata nella documentazione di DirectShow SDK.
Evento | Descrizione |
---|---|
EC_SAMPLE_NEEDED | Il mixer richiede un nuovo esempio di input. |
EVR potrebbe chiamare ProcessOutput sul mixer prima dell'avvio dello streaming. Il mixer non dovrebbe avere esito negativo per queste chiamate. Al contrario, dovrebbe riempire la superficie di output con pixel neri. Il mixer deve continuare a riempire i campioni di output a colori fino a quando non riceve un messaggio di MFT_MESSAGE_NOTIFY_BEGIN_STREAMING o viene chiamato il metodoProcessInput. Se il mixer riceve un messaggio di MFT_MESSAGE_NOTIFY_END_STREAMING, dovrebbe tornare alla modalità di riempimento del colore.
Implementazione di IMFVideoDeviceID
L'interfaccia IMFVideoDeviceID contiene un metodo, GetDeviceID, che restituisce un GUID del dispositivo. Il GUID del dispositivo garantisce che il relatore e il mixer usino tecnologie compatibili. Se i GUID del dispositivo non corrispondono, l'EVR non riesce a inizializzare.
Il mixer standard e il relatore usano entrambi Direct3D 9, con il GUID del dispositivo uguale a IID_IDirect3DDevice9. Se si intende usare il relatore personalizzato con il mixer standard, il GUID del dispositivo del relatore deve essere IID_IDirect3DDevice9. Se si sostituiscono entrambi i componenti, è possibile definire un nuovo GUID del dispositivo.
Implementazione di IMFTopologyServiceLookupClient
Il mixer deve implementare l'interfacciaIMFTopologyServiceLookupClient. Prima dell'inizio del flusso, EVR chiama IMFTopologyServiceLookupClient::InitServicePointers e passa un puntatore all'interfaccia IMFTopologyServiceLookup di EVR. Il mixer usa questo puntatore per ottenere puntatori di interfaccia da EVR.
Come minimo, il mixer deve eseguire una query per l'interfaccia seguente:
Quando EVR chiama IMFTopologyServiceLookupClient::ReleaseServicePointers, il mixer deve rilasciare qualsiasi puntatore ottenuto dalla chiamata a InitServicePointers.
Attributi mixer
Un mixer deve supportare gli attributi seguenti.
Attributo | Descrizione |
---|---|
MF_SA_D3D_AWARE | Specifica se il mixer supporta l'accelerazione video DirectX (DXVA). |
MF_SA_REQUIRED_SAMPLE_COUNT | Il numero di campioni video che EVR deve allocare per ogni flusso mixer. Questo attributo si applica ai singoli flussi; usare l'archivio attributi restituito da IMFTransform::GetInputStreamAttributes. |
Impostazione del mixer su EVR
Per impostare un mixer personalizzato in EVR, chiamare IMFVideoRenderer::InitializeRenderer. Sia il filtro EVR DirectShow che il sink multimediale EVR implementano questo metodo.
oggetto attivazione EVR. Se si usa l'oggetto attivazione EVR, è possibile fornire un mixer personalizzato impostando uno degli attributi seguenti nell'oggetto di attivazione EVR:
Attributo | Descrizione |
---|---|
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE | Puntatore a un oggetto di attivazione per il mixer. L'oggetto attivazione deve implementare l'interfacciaIMFActivate. |
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID | CLSID del mixer. |
Argomenti correlati