DXVA2_VideoDesc structure (dxva2api.h)
Décrit un flux vidéo pour un appareil décodeur DXVA ou un périphérique de processeur vidéo.
Syntaxe
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;
Membres
SampleWidth
Largeur de l’image vidéo, en pixels.
SampleHeight
Hauteur de l’image vidéo, en pixels.
SampleFormat
Détails supplémentaires sur le format vidéo, spécifié sous forme de structure DXVA2_ExtendedFormat .
Format
Format Surface, spécifié en tant que valeur D3DFORMAT ou code FOURCC. Un code FOURCC peut être construit à l’aide des macros D3DFORMAT ou MAKEFOURCC .
InputSampleFreq
Fréquence d’images du flux vidéo d’entrée, spécifiée sous la forme d’une structure de DXVA2_Frequency .
OutputFrameFreq
Fréquence d’images de la vidéo de sortie, spécifiée en tant que structure DXVA2_Frequency .
UABProtectionLevel
Niveau de protection des données requis lorsque le bus accessible par l’utilisateur (UAB) est présent. Si la valeur est TRUE, la vidéo doit être protégée lorsqu’un UAB est présent. Si la valeur est FALSE, la vidéo n’a pas besoin d’être protégée.
Reserved
Réservé. Doit être zéro.
Notes
Le membre InputSampleFreq donne la fréquence d’images du flux vidéo décodé, tel que reçu par le convertisseur vidéo. Le membre OutputFrameFreq donne la fréquence d’images de la vidéo qui s’affiche après le désinterlacement. Si la vidéo d’entrée est entrelacée et que les exemples contiennent des champs entrelacés, la fréquence d’images de sortie est deux fois la fréquence d’images d’entrée. Si la vidéo d’entrée est progressive ou contient des champs uniques, la fréquence d’images de sortie est identique à la fréquence d’images d’entrée.
Les décodeurs doivent définir les valeurs de InputSampleFreq et OutputFrameFreq si la fréquence d’images est connue. Sinon, définissez ces membres sur 0/0 pour indiquer une fréquence d’images inconnue.
Exemples
Le code suivant convertit un type de média Media Foundation, représenté à l’aide de l’interface IMFMediaType , en structure 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;
}
Spécifications
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
En-tête | dxva2api.h |