Partager via


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

Voir aussi

IMFMediaType

Media Foundation Structures