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;
}
Zugehörige Themen