Impostazione degli stati DXVA-HD
Durante l'elaborazione video, il dispositivo DXVA-HD (Microsoft DirectX Video Acceleration High Definition) mantiene uno stato permanente da un frame al successivo. Ogni stato ha un valore predefinito documentato. Dopo aver configurato il dispositivo, impostare gli stati che si desidera modificare dalle impostazioni predefinite. Prima di elaborare ogni frame, aggiornare gli stati che devono cambiare.
Nota
Questa progettazione differisce da DXVA-VP. In DXVA-VP l'applicazione deve specificare tutti i parametri VP con ogni frame.
Gli stati del dispositivo rientrano in due categorie:
- Gli stati di flusso applicano separatamente ogni flusso di input. È possibile applicare impostazioni diverse a ogni flusso.
- Gli stati Blit si applicano a livello globale all'intera elaborazione video blit.
Gli stati di flusso seguenti sono definiti.
Stato flusso | Descrizione |
---|---|
DXVAHD_STREAM_STATE_D3DFORMAT | Formato video di input. |
DXVAHD_STREAM_STATE_FRAME_FORMAT | Interlacciamento. |
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE | Spazio colore di input. Questo stato specifica l'intervallo di colori RGB e la matrice di trasferimento YCbCr per il flusso di input. |
DXVAHD_STREAM_STATE_OUTPUT_RATE | Frequenza dei fotogrammi di output. Questo stato controlla la conversione della frequenza dei fotogrammi. |
DXVAHD_STREAM_STATE_SOURCE_RECT | Rettangolo di origine. |
DXVAHD_STREAM_STATE_DESTINATION_RECT | Rettangolo di destinazione. |
DXVAHD_STREAM_STATE_ALPHA | Alfa planare. |
DXVAHD_STREAM_STATE_PALETTE | Tavolozza. Questo stato si applica solo ai formati di input palettizzati. |
DXVAHD_STREAM_STATE_LUMA_KEY | Chiave Luma. |
DXVAHD_STREAM_STATE_ASPECT_RATIO | Proporzioni pixel. |
DXVAHD_STREAM_STATE_FILTER_Xxxx | Impostazioni di filtro delle immagini. Il driver può supportare luminosità, contrasto e altri filtri di immagine. |
Gli stati blit seguenti sono definiti:
Stato Blit | Descrizione |
---|---|
DXVAHD_BLT_STATE_TARGET_RECT | Rettangolo di destinazione. |
DXVAHD_BLT_STATE_BACKGROUND_COLOR | Colore di sfondo. |
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE | Spazio dei colori di output. |
DXVAHD_BLT_STATE_ALPHA_FILL | Modalità riempimento alfa. |
DXVAHD_BLT_STATE_CONSTRICTION | Costrizione. Questo stato controlla se il dispositivo riduce l'output. |
Per impostare uno stato di flusso, chiamare il metodo IDXVAHD_VideoProcessor::SetVideoProcessStreamState . Per impostare uno stato blit, chiamare il metodo IDXVAHD_VideoProcessor::SetVideoProcessBltState . In entrambi questi metodi, un valore di enumerazione specifica lo stato da impostare. I dati sullo stato vengono forniti usando una struttura di dati specifica dello stato, che l'applicazione esegue il cast in un tipo void* .
L'esempio di codice seguente imposta il formato di input e il rettangolo di destinazione per il flusso 0 e imposta il colore di sfondo su nero.
HRESULT SetDXVAHDStates(HWND hwnd, D3DFORMAT inputFormat)
{
// Set the initial stream states.
// Set the format of the input stream
DXVAHD_STREAM_STATE_D3DFORMAT_DATA d3dformat = { inputFormat };
HRESULT hr = g_pDXVAVP->SetVideoProcessStreamState(
0, // Stream index
DXVAHD_STREAM_STATE_D3DFORMAT,
sizeof(d3dformat),
&d3dformat
);
if (SUCCEEDED(hr))
{
// For this example, the input stream contains progressive frames.
DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA frame_format = { DXVAHD_FRAME_FORMAT_PROGRESSIVE };
hr = g_pDXVAVP->SetVideoProcessStreamState(
0, // Stream index
DXVAHD_STREAM_STATE_FRAME_FORMAT,
sizeof(frame_format),
&frame_format
);
}
if (SUCCEEDED(hr))
{
// Compute the letterbox area.
RECT rcDest;
GetClientRect(hwnd, &rcDest);
RECT rcSrc;
SetRect(&rcSrc, 0, 0, VIDEO_WIDTH, VIDEO_HEIGHT);
rcDest = LetterBoxRect(rcSrc, rcDest);
// Set the destination rectangle, so the frame is displayed within the
// letterbox area. Otherwise, the frame is stretched to cover the
// entire surface.
DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA DstRect = { TRUE, rcDest };
hr = g_pDXVAVP->SetVideoProcessStreamState(
0, // Stream index
DXVAHD_STREAM_STATE_DESTINATION_RECT,
sizeof(DstRect),
&DstRect
);
}
if (SUCCEEDED(hr))
{
DXVAHD_COLOR_RGBA rgbBackground = { 0.0f, 0.0f, 0.0f, 1.0f }; // RGBA
DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA background = { FALSE, rgbBackground };
hr = g_pDXVAVP->SetVideoProcessBltState(
DXVAHD_BLT_STATE_BACKGROUND_COLOR,
sizeof (background),
&background
);
}
return hr;
}
Argomenti correlati