Condividi tramite


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

DXVA-HD