estrutura DXVA2_VideoDesc (dxva2api.h)
Descreve um fluxo de vídeo para um dispositivo de decodificador DXVA ou dispositivo de processador de vídeo.
Sintaxe
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;
Membros
SampleWidth
Largura do quadro de vídeo, em pixels.
SampleHeight
Altura do quadro de vídeo, em pixels.
SampleFormat
Detalhes adicionais sobre o formato de vídeo, especificado como uma estrutura DXVA2_ExtendedFormat .
Format
Formato surface, especificado como um valor D3DFORMAT ou código FOURCC. Um código FOURCC pode ser construído usando as macros D3DFORMAT ou MAKEFOURCC .
InputSampleFreq
Taxa de quadros do fluxo de vídeo de entrada, especificado como uma estrutura DXVA2_Frequency .
OutputFrameFreq
Taxa de quadros do vídeo de saída, especificado como uma estrutura DXVA2_Frequency .
UABProtectionLevel
Nível de proteção de dados necessário quando o UAB (barramento acessível pelo usuário) estiver presente. Se TRUE, o vídeo deverá ser protegido quando um UAB estiver presente. Se FALSE, o vídeo não precisará ser protegido.
Reserved
Reservado. Deve ser zero.
Comentários
O membro InputSampleFreq fornece a taxa de quadros do fluxo de vídeo decodificado, conforme recebido pelo renderizador de vídeo. O membro OutputFrameFreq fornece a taxa de quadros do vídeo exibido após a desinterlacização. Se o vídeo de entrada estiver entrelaçado e os exemplos contiverem campos intercalados, a taxa de quadros de saída será o dobro da taxa de quadros de entrada. Se o vídeo de entrada for progressivo ou contiver campos únicos, a taxa de quadros de saída será igual à taxa de quadros de entrada.
Os decodificadores deverão definir os valores de InputSampleFreq e OutputFrameFreq se a taxa de quadros for conhecida. Caso contrário, defina esses membros como 0/0 para indicar uma taxa de quadros desconhecida.
Exemplos
O código a seguir converte um tipo de mídia media Foundation, representado usando a interface IMFMediaType , em uma estrutura 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 com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 [somente aplicativos da área de trabalho] |
Cabeçalho | dxva2api.h |