DXVA2_VideoDesc構造体 (dxva2api.h)
DXVA デコーダー デバイスまたはビデオ プロセッサ デバイスのビデオ ストリームについて説明します。
構文
typedef struct _DXVA2_VideoDesc {
UINT SampleWidth;
UINT SampleHeight;
DXVA2_ExtendedFormat SampleFormat;
D3DFORMAT Format;
DXVA2_Frequency InputSampleFreq;
DXVA2_Frequency OutputFrameFreq;
UINT UABProtectionLevel;
UINT Reserved;
} DXVA2_VideoDesc;
メンバー
SampleWidth
ビデオ フレームの幅 (ピクセル単位)。
SampleHeight
ビデオ フレームの高さ (ピクセル単位)。
SampleFormat
DXVA2_ExtendedFormat構造として指定されたビデオ形式に関する追加の詳細。
Format
D3DFORMAT 値または FOURCC コードとして指定されたサーフェス形式。 FOURCC コードは、 D3DFORMAT マクロまたは MAKEFOURCC マクロを 使用して構築できます。
InputSampleFreq
DXVA2_Frequency構造として指定された入力ビデオ ストリームのフレーム レート。
OutputFrameFreq
DXVA2_Frequency構造として指定された出力ビデオのフレーム レート。
UABProtectionLevel
ユーザーがアクセス可能なバス (UAB) が存在する場合に必要なデータ保護のレベル。 TRUE の場合、UAB が存在する場合はビデオを保護する必要があります。 FALSE の場合、ビデオを保護する必要はありません。
Reserved
予約済み。 ゼロを指定してください。
解説
InputSampleFreq メンバーは、ビデオ レンダラーによって受信されたデコードされたビデオ ストリームのフレーム レートを提供します。 OutputFrameFreq メンバーは、インターレース解除後に表示されるビデオのフレーム レートを指定します。 入力ビデオがインターレースされ、サンプルにインターリーブ フィールドが含まれている場合、出力フレーム レートは入力フレーム レートの 2 倍になります。 入力ビデオがプログレッシブであるか、単一のフィールドが含まれている場合、出力フレーム レートは入力フレーム レートと同じです。
フレーム レートがわかっている場合、デコーダーは InputSampleFreq と OutputFrameFreq の値を設定する必要があります。 それ以外の場合は、これらのメンバーを 0/0 に設定して、不明なフレーム レートを示します。
例
次のコードは、 IMFMediaType インターフェイスを使用して表される Media Foundation メディアの種類を 、DXVA2_VideoDesc 構造体に変換します。
// Fills in the DXVA2_ExtendedFormat structure.
void GetDXVA2ExtendedFormatFromMFMediaType(
IMFMediaType *pType,
DXVA2_ExtendedFormat *pFormat
)
{
// Get the interlace mode.
MFVideoInterlaceMode interlace =
(MFVideoInterlaceMode)MFGetAttributeUINT32(
pType, MF_MT_INTERLACE_MODE, MFVideoInterlace_Unknown
);
// The values for interlace mode translate directly, except for mixed
// interlace or progressive mode.
if (interlace == MFVideoInterlace_MixedInterlaceOrProgressive)
{
// Default to interleaved fields.
pFormat->SampleFormat = DXVA2_SampleFieldInterleavedEvenFirst;
}
else
{
pFormat->SampleFormat = (UINT)interlace;
}
// The remaining values translate directly.
// Use the "no-fail" attribute functions and default to "unknown."
pFormat->VideoChromaSubsampling = MFGetAttributeUINT32(
pType, MF_MT_VIDEO_CHROMA_SITING, MFVideoChromaSubsampling_Unknown);
pFormat->NominalRange = MFGetAttributeUINT32(
pType, MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_Unknown);
pFormat->VideoTransferMatrix = MFGetAttributeUINT32(
pType, MF_MT_YUV_MATRIX, MFVideoTransferMatrix_Unknown);
pFormat->VideoLighting = MFGetAttributeUINT32(
pType, MF_MT_VIDEO_LIGHTING, MFVideoLighting_Unknown);
pFormat->VideoPrimaries = MFGetAttributeUINT32(
pType, MF_MT_VIDEO_PRIMARIES, MFVideoPrimaries_Unknown);
pFormat->VideoTransferFunction = MFGetAttributeUINT32(
pType, MF_MT_TRANSFER_FUNCTION, MFVideoTransFunc_Unknown);
}
HRESULT ConvertMFTypeToDXVAType(IMFMediaType *pType, DXVA2_VideoDesc *pDesc)
{
ZeroMemory(pDesc, sizeof(*pDesc));
GUID subtype = GUID_NULL;
UINT32 width = 0;
UINT32 height = 0;
UINT32 fpsNumerator = 0;
UINT32 fpsDenominator = 0;
// The D3D format is the first DWORD of the subtype GUID.
HRESULT hr = pType->GetGUID(MF_MT_SUBTYPE, &subtype);
if (FAILED(hr))
{
goto done;
}
pDesc->Format = (D3DFORMAT)subtype.Data1;
// Frame size.
hr = MFGetAttributeSize(pType, MF_MT_FRAME_SIZE, &width, &height);
if (FAILED(hr))
{
goto done;
}
pDesc->SampleWidth = width;
pDesc->SampleHeight = height;
// Frame rate.
hr = MFGetAttributeRatio(pType, MF_MT_FRAME_RATE, &fpsNumerator, &fpsDenominator);
if (FAILED(hr))
{
goto done;
}
pDesc->InputSampleFreq.Numerator = fpsNumerator;
pDesc->InputSampleFreq.Denominator = fpsDenominator;
// Extended format information.
GetDXVA2ExtendedFormatFromMFMediaType(pType, &pDesc->SampleFormat);
// For progressive or single-field types, the output frequency is the same as
// the input frequency. For interleaved-field types, the output frequency is
// twice the input frequency.
pDesc->OutputFrameFreq = pDesc->InputSampleFreq;
if ((pDesc->SampleFormat.SampleFormat == DXVA2_SampleFieldInterleavedEvenFirst) ||
(pDesc->SampleFormat.SampleFormat == DXVA2_SampleFieldInterleavedOddFirst))
{
pDesc->OutputFrameFreq.Numerator *= 2;
}
done:
return hr;
}
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
Header | dxva2api.h |