Définition des états DXVA-HD
Pendant le traitement vidéo, l’appareil DXVA-HD (Microsoft DirectX Video Acceleration Haute Définition) conserve un état persistant d’une image à l’autre. Chaque état a une valeur par défaut documentée. Après avoir configuré l’appareil, définissez les états que vous souhaitez modifier par rapport à leurs valeurs par défaut. Avant de traiter chaque image, mettez à jour tous les états qui doivent changer.
Notes
Cette conception diffère de DXVA-VP. Dans DXVA-VP, l’application doit spécifier tous les paramètres VP avec chaque image.
Les états de l’appareil se répartissent en deux catégories :
- Les états de flux appliquent chaque flux d’entrée séparément. Vous pouvez appliquer différents paramètres à chaque flux.
- Les états blit s’appliquent globalement à l’ensemble du blit de traitement vidéo.
Les états de flux suivants sont définis.
État du flux | Description |
---|---|
DXVAHD_STREAM_STATE_D3DFORMAT | Format vidéo d’entrée. |
DXVAHD_STREAM_STATE_FRAME_FORMAT | Entrelacement. |
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE | Espace de couleur d’entrée. Cet état spécifie la plage de couleurs RVB et la matrice de transfert YCbCr pour le flux d’entrée. |
DXVAHD_STREAM_STATE_OUTPUT_RATE | Fréquence d’images de sortie. Cet état contrôle la conversion de la fréquence d’images. |
DXVAHD_STREAM_STATE_SOURCE_RECT | Rectangle source. |
DXVAHD_STREAM_STATE_DESTINATION_RECT | Rectangle de destination. |
DXVAHD_STREAM_STATE_ALPHA | Alpha planaire. |
DXVAHD_STREAM_STATE_PALETTE | Palette de couleurs. Cet état s’applique uniquement aux formats d’entrée palettisés. |
DXVAHD_STREAM_STATE_LUMA_KEY | Touche Luma. |
DXVAHD_STREAM_STATE_ASPECT_RATIO | Proportion de pixels. |
DXVAHD_STREAM_STATE_FILTER_Xxxx | Paramètres du filtre d’image. Le pilote peut prendre en charge la luminosité, le contraste et d’autres filtres d’image. |
Les états blit suivants sont définis :
État Blit | Description |
---|---|
DXVAHD_BLT_STATE_TARGET_RECT | Rectangle cible. |
DXVAHD_BLT_STATE_BACKGROUND_COLOR | Couleur d’arrière-plan. |
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE | Espace de couleur de sortie. |
DXVAHD_BLT_STATE_ALPHA_FILL | Mode de remplissage alpha. |
DXVAHD_BLT_STATE_CONSTRICTION | Constriction. Cet état contrôle si l’appareil sous-échantillonne la sortie. |
Pour définir un état de flux, appelez la méthode IDXVAHD_VideoProcessor::SetVideoProcessStreamState . Pour définir un état blit, appelez la méthode IDXVAHD_VideoProcessor::SetVideoProcessBltState . Dans ces deux méthodes, une valeur d’énumération spécifie l’état à définir. Les données d’état sont données à l’aide d’une structure de données spécifique à l’état, que l’application caste en type void* .
L’exemple de code suivant définit le format d’entrée et le rectangle de destination pour le flux 0, et définit la couleur d’arrière-plan sur le noir.
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;
}
Rubriques connexes