DXVA2_VideoDesc-Struktur (dxva2api.h)

Beschreibt einen Videostream für ein DXVA-Decodergerät oder Videoprozessorgerät.

Syntax

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;

Member

SampleWidth

Breite des Videoframes in Pixel.

SampleHeight

Höhe des Videoframes in Pixel.

SampleFormat

Zusätzliche Details zum Videoformat, die als DXVA2_ExtendedFormat-Struktur angegeben sind.

Format

Surface-Format, angegeben als D3DFORMAT-Wert oder FOURCC-Code. Ein FOURCC-Code kann mithilfe der Makros D3DFORMAT oder MAKEFOURCC erstellt werden.

InputSampleFreq

Bildfrequenz des Eingabevideostreams, angegeben als DXVA2_Frequency-Struktur .

OutputFrameFreq

Bildfrequenz des Ausgabevideos, angegeben als DXVA2_Frequency-Struktur .

UABProtectionLevel

Erforderliches Datenschutzniveau, wenn der Benutzerzugriffsbus (User Accessible Bus, UAB) vorhanden ist. Bei TRUE muss das Video geschützt werden, wenn ein UAB vorhanden ist. Bei FALSE muss das Video nicht geschützt werden.

Reserved

Reserviert. Muss Null sein.

Hinweise

Das InputSampleFreq-Element gibt die Bildfrequenz des decodierten Videostreams an, wie er vom Videorenderer empfangen wird. Das OutputFrameFreq-Element gibt die Bildfrequenz des Videos an, das nach dem Deinterlacing angezeigt wird. Wenn das Eingabevideo interlaced ist und die Beispiele verschachtelte Felder enthalten, ist die Ausgabebildrate doppelt so hoch wie die Eingabebildrate. Wenn das Eingabevideo progressiv ist oder einzelne Felder enthält, entspricht die Ausgabebildrate der Eingabebildrate.

Decoder sollten die Werte von InputSampleFreq und OutputFrameFreq festlegen, wenn die Bildfrequenz bekannt ist. Andernfalls legen Sie diese Member auf 0/0 fest, um eine unbekannte Bildfrequenz anzugeben.

Beispiele

Der folgende Code konvertiert einen Media Foundation-Medientyp, der mithilfe der IMFMediaType-Schnittstelle dargestellt wird, in eine DXVA2_VideoDesc-Struktur .

// 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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Kopfzeile dxva2api.h

Weitere Informationen

IMFMediaType

Media Foundation-Strukturen