Compartilhar via


estrutura AM_MEDIA_TYPE (strmif.h)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

A estrutura AM_MEDIA_TYPE descreve o formato de um exemplo de mídia.

Sintaxe

typedef struct _AMMediaType {
  GUID     majortype;
  GUID     subtype;
  BOOL     bFixedSizeSamples;
  BOOL     bTemporalCompression;
  ULONG    lSampleSize;
  GUID     formattype;
  IUnknown *pUnk;
  ULONG    cbFormat;
  BYTE     *pbFormat;
} AM_MEDIA_TYPE;

Membros

majortype

GUID (identificador global exclusivo) que especifica o tipo principal do exemplo de mídia. Para obter uma lista dos tipos principais possíveis, consulte Tipos de mídia.

subtype

GUID que especifica o subtipo do exemplo de mídia. Para obter uma lista de subtipos possíveis, consulte Tipos de mídia. Para alguns formatos, o valor pode ser MEDIASUBTYPE_None, o que significa que o formato não requer um subtipo.

bFixedSizeSamples

Se TRUE, os exemplos serão de um tamanho fixo. Este campo é somente informativo. Para áudio, geralmente é definido como TRUE. Para vídeo, geralmente é TRUE para vídeo descompactado e FALSE para vídeo compactado.

bTemporalCompression

Se TRUE, os exemplos serão compactados usando compactação temporal (interframe). Um valor true indica que nem todos os quadros são quadros-chave. Este campo é somente informativo.

lSampleSize

Tamanho do exemplo em bytes. Para dados compactados, o valor pode ser zero.

formattype

GUID que especifica a estrutura usada para o bloco de formato. O membro pbFormat aponta para a estrutura de formato correspondente. Os tipos de formato incluem o seguinte:

Tipo de formato Estrutura de formato
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Nenhum.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Nenhum

pUnk

Não usado. Defina como NULL.

cbFormat

Tamanho do bloco de formato, em bytes.

pbFormat

Ponteiro para o bloco de formato. O tipo de estrutura é especificado pelo membro formattype . A estrutura de formato deve estar presente, a menos que formattype seja GUID_NULL ou FORMAT_None.

O buffer pbFormat deve ser alocado chamando CoTaskMemAlloc. Para liberar o bloco de formato, chame FreeMediaType.

Comentários

Quando dois pinos se conectam, eles negociam um tipo de mídia, que é definido por uma estrutura AM_MEDIA_TYPE . O tipo de mídia descreve o formato dos dados que os filtros trocarão. Se os filtros não concordarem com um tipo de mídia, eles não poderão se conectar.

O tipo de fluxo é especificado por dois GUIDs, chamados de tipo principal e o subtipo. O tipo principal define a categoria geral, como vídeo, áudio ou fluxo de bytes. O subtipo define uma categoria mais estreita dentro do tipo principal. Por exemplo, os subtipos de vídeo incluem RGB de 8 bits, 16 bits, 24 bits e 32 bits.

A estrutura AM_MEDIA_TYPE é seguida por um bloco de dados de comprimento variável que contém informações específicas do formato. O membro pbFormat aponta para esse bloco, chamado de bloco de formato. O layout do bloco de formato depende do tipo de dados no fluxo e é especificado pelo membro formattype . O bloco de formato pode ser NULL. Verifique o membro cbFormat para determinar o tamanho. Converta o membro pbFormat para acessar o bloco de formato. Por exemplo:

C++
if (pmt->formattype == FORMAT_VideoInfo)
{
    // Check the buffer size.
    if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER))
    {
        VIDEOINFOHEADER *pVih = 
            reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
        /* Access VIDEOINFOHEADER members through pVih. */
    }
}
Em algumas situações, você pode definir o bloco de formato como NULL e o tipo de formato como GUID_NULL, resultando em um tipo de mídia parcial. Isso permite que você especifique um intervalo de formatos possíveis. Por exemplo, você pode especificar RGB de 24 bits (MEDIASUBTYPE_RGB24) sem fornecer uma largura ou altura exata.

Para obter informações detalhadas sobre um tipo de mídia especificado para fins de depuração, use o método DisplayType .

Requisitos

   
Cabeçalho strmif.h (inclua Dshow.h)

Confira também

Sobre tipos de mídia

Estruturas do DirectShow

Funções de tipo de mídia

Tipos de mídia