Condividi tramite


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

Vedi anche

IMFMediaType

Strutture di Media Foundation