Définition des États DXVA-HD

Lors du traitement vidéo, l’appareil Microsoft DirectX Video Acceleration High Definition (DXVA-HD) 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 dont vous souhaitez modifier les valeurs par défaut. Avant de traiter chaque frame, 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 trame.

Les États des appareils se répartissent en deux catégories :

  • Les États de flux appliquent chaque flux d’entrée séparément. Vous pouvez appliquer des paramètres différents à chaque flux.
  • Les États de blit s’appliquent globalement à l’ensemble de la blit de traitement vidéo.

Les États de flux suivants sont définis.

État du flux Description
_État du flux DXVAHD _ _ D3DFORMAT Format vidéo d’entrée.
_format de _ Frame d’état de flux DXVAHD _ _ Entrelacement.
_ _ _ espace colorimétrique d’entrée _ de l’état du flux DXVAHD _ Espace colorimétrique d’entrée. Cet État spécifie la plage de couleurs RVB et la matrice de transfert YCbCr pour le flux d’entrée.
taux de sortie de l' _ État du flux DXVAHD _ _ _ Fréquence d’images de sortie. Cet État contrôle la conversion de la fréquence des images.
DXVAHD _ de _ source d’état de flux _ _ Rectangle source.
_Rect de _ destination d’état de flux DXVAHD _ _ Rectangle de destination.
_État de flux DXVAHD _ _ alpha Alpha planaire.
DXVAHD _ _ palette d’état de flux _ Palette de couleurs. Cet État s’applique uniquement aux formats d’entrée en palette.
clé de luminance de l' _ État du flux DXVAHD _ _ _ Clé de luminance.
proportions de l' _ État du flux DXVAHD _ _ _ Proportions de pixels.
_Filtre d’état de flux DXVAHD _ _ _ xxxx Paramètres de filtre d’image. Le pilote peut prendre en charge la luminosité, le contraste et d’autres filtres d’image.

Les États de Blit suivants sont définis :

État blit Description
_ _ _ Rect cible de l’État DXVAHD BLT _ Rectangle cible.
_couleur d' _ _ arrière- _ plan de l’État DXVAHD BLT Couleur d’arrière-plan.
_espace de _ _ couleurs de _ sortie _ de l’état du BLT DXVAHD Espace colorimétrique de sortie.
_ _ _ remplissage alpha de l’État DXVAHD BLT _ Mode de remplissage alpha.
DXVAHD de l' _ État du BLT _ _ La restriction. Cet État contrôle si l’appareil downsamples 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 fournies à l’aide d’une structure de données spécifique à l’État, que l’application convertit 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 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;
}

DXVA-HD