DXVA2_VideoDesc struttura (dxva2api.h)
Descrive un flusso video per un dispositivo decodificatore DXVA o un dispositivo processore video.
Sintassi
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;
Members
SampleWidth
Larghezza del fotogramma video, in pixel.
SampleHeight
Altezza del fotogramma video, in pixel.
SampleFormat
Ulteriori dettagli sul formato video, specificato come struttura di DXVA2_ExtendedFormat .
Format
Formato Surface, specificato come valore D3DFORMAT o codice FOURCC. Un codice FOURCC può essere costruito usando le macro D3DFORMAT o MAKEFOURCC .
InputSampleFreq
Frequenza dei fotogrammi del flusso video di input, specificata come struttura DXVA2_Frequency .
OutputFrameFreq
Frequenza dei fotogrammi del video di output, specificata come struttura DXVA2_Frequency .
UABProtectionLevel
Livello di protezione dei dati richiesto quando è presente il bus accessibile dall'utente. Se TRUE, il video deve essere protetto quando è presente un UAB. Se FALSE, il video non deve essere protetto.
Reserved
Riservato. Deve essere zero.
Commenti
Il membro InputSampleFreq fornisce la frequenza dei fotogrammi del flusso video decodificato, come ricevuto dal renderer video. Il membro OutputFrameFreq fornisce la frequenza dei fotogrammi del video visualizzata dopo la denterlacing. Se il video di input è interlacciato e gli esempi contengono campi interleaved, la frequenza dei fotogrammi di output è due volte la frequenza dei fotogrammi di input. Se il video di input è progressivo o contiene singoli campi, la frequenza dei fotogrammi di output corrisponde alla frequenza dei fotogrammi di input.
I decodificatori devono impostare i valori di InputSampleFreq e OutputFrameFreq se la frequenza dei fotogrammi è nota. In caso contrario, impostare questi membri su 0/0 per indicare una frequenza di fotogrammi sconosciuta.
Esempio
Il codice seguente converte un tipo di supporto media Foundation, rappresentato usando l'interfaccia FMMediaType , in una struttura 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;
}
Requisiti
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Intestazione | dxva2api.h |