Condividi tramite


Considerazioni sulla programmazione DDI DXVA-HD

Questa sezione si applica solo a Windows 7 e versioni successive e Windows Server 2008 R2 e versioni successive del sistema operativo Windows.

Quando si implementa dxva-HD DDI nel driver di visualizzazione in modalità utente, è consigliabile prendere in considerazione i suggerimenti di programmazione seguenti:

  • Il driver deve impostare il bit D3DCAPS3_DXVAHD (0x00000400L) nel membro Caps3 della struttura D3DCAPS9 per indicare che supporta il DDI DXVA-HD, altrimenti il runtime Direct3D non riesce a chiamare la funzione CreateVideoProcessor per creare un dispositivo DXVA-HD. La struttura D3DCAPS9 è descritta nella documentazione di DirectX 9.0 SDK. Il driver imposta il bit D3DCAPS3_DXVAHD in risposta a una chiamata alla relativa funzione GetCaps in cui il valore D3DDDICAPS_GETD3D9CAPS viene impostato nel membro Type della struttura D3DDDIARG_GETCAPS a cui punta il parametro pData .

  • Il valore DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE dell'enumerazione DXVAHD_SURFACE_TYPE a livello di applicazione non ha un valore DDI corrispondente. Un'applicazione imposta il valore DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE per una superficie fuori schermo allocata in un tipo di formato diverso per la CPU o un plug-in di processore video di base dello shader.

  • Il valore DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT dell'enumerazione DXVAHD_SURFACE_TYPE a livello di applicazione corrisponde al flag di campo di bit VideoProcessRenderTarget della struttura D3DDDI_RESOURCEFLAGS . Il runtime Direct3D imposta VideoProcessRenderTarget nel membro Flags della struttura D3DDDIARG_CREATERESOURCE quando il runtime chiama la funzione CreateResource del driver per creare una destinazione di rendering di elaborazione video.

  • Il runtime Direct3D gestisce sia lo stato di trasferimento a blocchi di bit (bitblt) che lo stato del flusso. Il runtime torna all'applicazione quando viene eseguita una query sul runtime.

  • Il metodo IDXVAHD_VideoProcessor a livello di applicazione ::GetVideoProcessBltState non ha alcuna funzione DDI corrispondente. Tuttavia, quando un'applicazione chiama IDXVAHD_VideoProcessor::GetVideoProcessBltState per recuperare i dati dello stato bitblt privato per un processore video, il runtime Direct3D chiama la funzione GetVideoProcessBltStatePrivate del driver.

  • Il metodo IDXVAHD_VideoProcessor a livello di applicazione ::GetVideoProcessStreamState non ha alcuna funzione DDI corrispondente. Tuttavia, quando un'applicazione chiama IDXVAHD_VideoProcessor::GetVideoProcessBltState per recuperare i dati sullo stato del flusso privato per un processore video, il runtime Direct3D chiama la funzione GetVideoProcessStreamStatePrivate del driver.

  • Il valore DXVAHD_STREAM_STATE_D3DFORMAT dell'enumerazione DXVAHD_STREAM_STATE a livello di applicazione non ha alcun valore DDI corrispondente nell'enumerazione DXVAHDDDI_STREAM_STATE . Il plug-in del processore video usa il valore DXVAHD_STREAM_STATE_D3DFORMAT per una superficie allocata con il valore DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE dell'enumerazione DXVAHD_SURFACE_TYPE a livello di applicazione.

  • L'enumerazione DXVAHD_DEVICE_TYPE non ha un'enumerazione DDI corrispondente, ad esempio nessuna DXVAHDDDI_DEVICE_TYPE. Il primo membro della struttura DXVAHDDDI_VPDEVCAPS è riservato, mentre il primo membro della struttura DXVAHD_VPDEVCAPS a livello di applicazione viene impostato su un valore DXVAHD_DEVICE_TYPE nel membro DeviceType . Il membro DeviceType viene impostato dal runtime o dal plug-in del processore video, che segnala sempre il driver come DXVAHD_DEVICE_TYPE_HARDWARE.

  • Il membro Moltiplicatore della struttura DXVAHDDDI_FILTER_RANGE_DATA è un valore a virgola mobile. Il driver deve usare un valore che può essere rappresentato esattamente come frazione di base 2. Ad esempio, 0,25 può essere rappresentato esattamente come frazione di base 2, ma 0,1 non può.

  • Qualsiasi funzione DDI DXVA-HD deve restituire S_OK, E_INVALIDARG o E_OUTOFMEMORY.