Compartir a través de


estructura DXVA2_VideoDesc (dxva2api.h)

Describe una secuencia de vídeo para un dispositivo de descodificador DXVA o un dispositivo de procesador de vídeo.

Sintaxis

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;

Miembros

SampleWidth

Ancho del marco de vídeo, en píxeles.

SampleHeight

Alto del fotograma de vídeo, en píxeles.

SampleFormat

Detalles adicionales sobre el formato de vídeo, especificado como una estructura de DXVA2_ExtendedFormat .

Format

Formato surface, especificado como un valor D3DFORMAT o código FOURCC. Un código FOURCC se puede construir mediante las macros D3DFORMAT o MAKEFOURCC .

InputSampleFreq

Velocidad de fotogramas de la secuencia de vídeo de entrada, especificada como una estructura de DXVA2_Frequency .

OutputFrameFreq

Velocidad de fotogramas del vídeo de salida, especificado como una estructura de DXVA2_Frequency .

UABProtectionLevel

Nivel de protección de datos necesario cuando está presente el bus accesible para el usuario (MSN). Si es TRUE, el vídeo debe estar protegido cuando existe una UNIDAD DE DATOS. Si es FALSE, no es necesario proteger el vídeo.

Reserved

Reservado. Debe ser cero.

Comentarios

El miembro InputSampleFreq proporciona la velocidad de fotogramas de la secuencia de vídeo descodificada, según lo recibido por el representador de vídeo. El miembro OutputFrameFreq proporciona la velocidad de fotogramas del vídeo que se muestra después de desinterlazar. Si el vídeo de entrada está entrelazado y las muestras contienen campos intercalados, la velocidad de fotogramas de salida es el doble de velocidad de fotogramas de entrada. Si el vídeo de entrada es progresivo o contiene campos únicos, la velocidad de fotogramas de salida es la misma que la velocidad de fotogramas de entrada.

Los descodificadores deben establecer los valores de InputSampleFreq y OutputFrameFreq si se conoce la velocidad de fotogramas. De lo contrario, establezca estos miembros en 0/0 para indicar una velocidad de fotogramas desconocida.

Ejemplos

El código siguiente convierte un tipo de medio de Media Foundation, representado mediante la interfaz IMFMediaType , en una estructura de 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;
}

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Encabezado dxva2api.h

Consulte también

IMFMediaType

Estructuras de Media Foundation