Partager via


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;
}

DXVA-HD