Uso delle destinazioni di rendering Direct3D

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Sono definiti diversi sottotipi multimediali per le destinazioni di rendering Direct3D per l'uso con VMR-7 e VMR-9. Quando un filtro upstream propone una connessione con uno di questi sottotipi, indica alla macchina virtuale che il rendering deve essere eseguito in una destinazione di rendering Direct3D. Per VMR-7, questa sarà una destinazione di rendering DirectX 7 Direct3D e per VMR-9 questa sarà una destinazione di rendering DirectX 9 Direct3D. Se vmR è in modalità di combinazione, la superficie sarà anche una superficie di trama Direct3D. Se vmR non è in modalità di combinazione, la superficie sarà una superficie Direct3D regolare. I formati di pixel ARGB sono supportati solo quando vmR è in modalità di combinazione. I sottotipi di destinazione di rendering sono:

VMR-7 VMR-9
MEDIASUBTYPE_RGB32_D3D_DX7_RT MEDIASUBTYPE_RGB32_D3D_DX9_RT
MEDIASUBTYPE_RGB16_D3D_DX7_RT MEDIASUBTYPE_RGB16_D3D_DX9_RT
MEDIASUBTYPE_ARGB32_D3D_DX7_RT MEDIASUBTYPE_ARGB32_D3D_DX9_RT
MEDIASUBTYPE_ARGB4444_D3D_DX7_RT MEDIASUBTYPE_ARGB4444_D3D_DX9_RT
MEDIASUBTYPE_ARGB1555_D3D_DX7_RT MEDIASUBTYPE_ARGB1555_D3D_DX9_RT

 

Questi tipi sono definiti nel file di intestazione uuids.h. I tipi di supporti MEDIASUBTYPE_RGB32 sono un formato RGBx8888 e MEDIASUBTYPE_RGB16 tipi di supporti sono un formato RGB565. Per altre informazioni su questi formati di pixel, vedere la documentazione di DirectX Graphics.

Richiesta di una superficie sbloccata

Il blocco e lo sblocco delle superfici DirectDraw sono operazioni costose per il calcolo. Quando si usano i sottotipi di supporti di destinazione direct3D, il filtro upstream deve sbloccare le superfici in modo che possa funzionare con l'hardware grafico. Per evitare un'operazione di sblocco senza blocchi, vmR supporta un nuovo flag nel metodo IMemAllocator::GetBuffer , AM_GBF_NODDSURFACELOCK, che indica a VMR di non bloccare la superficie DirectDraw prima di passare un esempio al filtro upstream. Quando viene usato questo flag, le chiamate a IMediaSample::GetPointer avranno esito negativo perché non esiste un puntatore bloccato. Per ottenere l'accesso all'area DirectDraw, il filtro deve chiamare QueryInterface nell'oggetto IMediaSample restituito e richiedere l'interfaccia IVMRSurface . Ovviamente, il filtro upstream deve assicurarsi che la superficie non sia bloccata quando rilascia nuovamente l'esempio nell'elenco libero.