Mengatur Status DXVA-HD
Selama pemrosesan video, perangkat Definisi Tinggi Akselerasi Video Microsoft DirectX (DXVA-HD) mempertahankan status persisten dari satu bingkai ke bingkai berikutnya. Setiap status memiliki default yang didokumenkan. Setelah Mengonfigurasi perangkat, atur status apa pun yang ingin Anda ubah dari defaultnya. Sebelum Anda memproses setiap bingkai, perbarui status apa pun yang harus berubah.
Catatan
Desain ini berbeda dari DXVA-VP. Dalam DXVA-VP, aplikasi harus menentukan semua parameter VP dengan setiap bingkai.
Status perangkat termasuk dalam dua kategori:
- Status aliran menerapkan setiap aliran input secara terpisah. Anda dapat menerapkan pengaturan yang berbeda untuk setiap aliran.
- Status blit berlaku secara global untuk seluruh blit pemrosesan video.
Status aliran berikut didefinisikan.
Status Aliran | Deskripsi |
---|---|
DXVAHD_STREAM_STATE_D3DFORMAT | Masukkan format video. |
DXVAHD_STREAM_STATE_FRAME_FORMAT | Jalinan. |
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE | Ruang warna input. Status ini menentukan rentang warna RGB dan matriks transfer YCbCr untuk aliran input. |
DXVAHD_STREAM_STATE_OUTPUT_RATE | Kecepatan bingkai output. Status ini mengontrol konversi kecepatan bingkai. |
DXVAHD_STREAM_STATE_SOURCE_RECT | Persegi panjang sumber. |
DXVAHD_STREAM_STATE_DESTINATION_RECT | Persegi panjang tujuan. |
DXVAHD_STREAM_STATE_ALPHA | Alpha Planar. |
DXVAHD_STREAM_STATE_PALETTE | Palet warna. Status ini hanya berlaku untuk format input yang dipalsukan. |
DXVAHD_STREAM_STATE_LUMA_KEY | Kunci Luma. |
DXVAHD_STREAM_STATE_ASPECT_RATIO | Rasio aspek piksel. |
DXVAHD_STREAM_STATE_FILTER_Xxxx | Pengaturan filter gambar. Driver dapat mendukung kecerahan, kontras, dan filter gambar lainnya. |
Status blit berikut didefinisikan:
Status Blit | Deskripsi |
---|---|
DXVAHD_BLT_STATE_TARGET_RECT | Persegi panjang target. |
DXVAHD_BLT_STATE_BACKGROUND_COLOR | Warna latar belakang. |
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE | Ruang warna output. |
DXVAHD_BLT_STATE_ALPHA_FILL | Mode pengisian alfa. |
DXVAHD_BLT_STATE_CONSTRICTION | Penyempitan. Status ini mengontrol apakah perangkat melakukan downsamples output. |
Untuk mengatur status aliran, panggil metode IDXVAHD_VideoProcessor::SetVideoProcessStreamState . Untuk mengatur status blit, panggil metode IDXVAHD_VideoProcessor::SetVideoProcessBltState . Dalam kedua metode ini, nilai enumerasi menentukan status yang akan ditetapkan. Data status diberikan menggunakan struktur data khusus status, yang dilemparkan aplikasi ke jenis void* .
Contoh kode berikut mengatur format input dan persegi panjang tujuan untuk aliran 0, dan mengatur warna latar belakang menjadi hitam.
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;
}
Topik terkait