Freigeben über


Festlegen von DXVA-HD-Zuständen

Während der Videoverarbeitung behält das DXVA-HD-Gerät (Microsoft DirectX Video Acceleration High Definition) einen persistenten Zustand von einem Frame zum nächsten bei. Jeder Zustand verfügt über eine dokumentierte Standardeinstellung. Nachdem Sie das Gerät konfiguriert haben, legen Sie alle Zustände fest, die Sie von den Standardwerten ändern möchten. Aktualisieren Sie vor der Verarbeitung der einzelnen Frames alle Zustände, die sich ändern sollten.

Hinweis

Dieses Design unterscheidet sich von DXVA-VP. In DXVA-VP muss die Anwendung alle VP-Parameter mit jedem Frame angeben.

 

Gerätezustände lassen sich in zwei Kategorien einteilen:

  • Streamzustände wenden jeden Eingabedatenstrom separat an. Sie können auf jeden Stream unterschiedliche Einstellungen anwenden.
  • Blit-Zustände gelten global für den gesamten Videoverarbeitungs-Blit.

Die folgenden Streamzustände werden definiert.

Streamstatus Beschreibung
DXVAHD_STREAM_STATE_D3DFORMAT Eingabevideoformat.
DXVAHD_STREAM_STATE_FRAME_FORMAT Interlacing.
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE Eingabefarbraum. Dieser Zustand gibt den RGB-Farbbereich und die YCbCr-Übertragungsmatrix für den Eingabestream an.
DXVAHD_STREAM_STATE_OUTPUT_RATE Ausgabebildrate. Dieser Zustand steuert die Bildfrequenzkonvertierung.
DXVAHD_STREAM_STATE_SOURCE_RECT Quellrechteck.
DXVAHD_STREAM_STATE_DESTINATION_RECT Zielrechteck.
DXVAHD_STREAM_STATE_ALPHA Planares Alpha.
DXVAHD_STREAM_STATE_PALETTE Farbpalette. Dieser Zustand gilt nur für palettisierte Eingabeformate.
DXVAHD_STREAM_STATE_LUMA_KEY Luma-Schlüssel.
DXVAHD_STREAM_STATE_ASPECT_RATIO Pixelseitenverhältnis.
DXVAHD_STREAM_STATE_FILTER_Xxxx Bildfiltereinstellungen. Der Treiber kann Helligkeits-, Kontrast- und andere Bildfilter unterstützen.

 

Die folgenden Blit-Zustände werden definiert:

Blit-Zustand Beschreibung
DXVAHD_BLT_STATE_TARGET_RECT Zielrechteck.
DXVAHD_BLT_STATE_BACKGROUND_COLOR Hintergrundfarbe.
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE Ausgabefarbraum.
DXVAHD_BLT_STATE_ALPHA_FILL Alphafüllmodus.
DXVAHD_BLT_STATE_CONSTRICTION Verengung. Dieser Zustand steuert, ob das Gerät die Ausgabe herunterstempelt.

 

Um einen Streamstatus festzulegen, rufen Sie die IDXVAHD_VideoProcessor::SetVideoProcessStreamState-Methode auf. Um einen blit-Zustand festzulegen, rufen Sie die IDXVAHD_VideoProcessor::SetVideoProcessBltState-Methode auf. Bei beiden Methoden gibt ein Enumerationswert den festzulegenden Zustand an. Die Zustandsdaten werden mithilfe einer zustandsspezifischen Datenstruktur angegeben, die von der Anwendung in einen void* -Typ umgewandelt wird.

Im folgenden Codebeispiel werden das Eingabeformat und das Zielrechteck für Stream 0 und die Hintergrundfarbe auf Schwarz festgelegt.

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