Sobre tipos de mídia (Microsoft Media Foundation)
Um tipo de mídia descreve o formato de um fluxo de mídia. No Microsoft Media Foundation, os tipos de mídia são representados pela interface IMFMediaType. Esta interface herda da interface IMFAttributes. Os detalhes de um tipo de mídia são especificados como atributos.
Para criar um novo tipo de mídia, chame a funçãoMFCreateMediaType. Esta função retorna um ponteiro para o IMFMediaType interface. O tipo de mídia inicialmente não tem atributos. Para definir os detalhes do formato, defina os atributos relevantes.
Para obter uma lista de atributos de tipo de mídia, consulte Atributos de tipo de mídia.
Principais tipos e subtipos
Duas informações importantes para qualquer tipo de mídia são o tipo principal e o subtipo.
- O tipo principal é um GUID que define a categoria geral dos dados num fluxo de mídia. Os principais tipos incluem vídeo e áudio. Para especificar o tipo principal, defina o atributo MF_MT_MAJOR_TYPE. O método IMFMediaType::GetMajorType retorna o valor desse atributo.
- O subtipo define melhor o formato. Por exemplo, dentro do tipo principal de vídeo, existem subtipos para RGB-24, RGB-32, YUY2 e assim por diante. Dentro do áudio, há áudio PCM, áudio de ponto flutuante IEEE e outros. O subtipo fornece mais informações do que o tipo principal, mas não define tudo sobre o formato. Por exemplo, os subtipos de vídeo não definem o tamanho da imagem ou a taxa de quadros. Para especificar o subtipo, defina o atributo MF_MT_SUBTYPE.
Todos os tipos de mídia devem ter um GUID de tipo principal e um GUID de subtipo. Para obter uma lista dos principais GUIDs de tipo e subtipo, consulte GUIDs de tipos de mídia.
Porquê Atributos?
Os atributos têm várias vantagens em relação às estruturas de formato que foram usadas em tecnologias anteriores, como o DirectShow e o SDK do Windows Media Format.
É mais fácil representar valores do tipo "não sei" ou "não se importa". Por exemplo, se você estiver escrevendo uma transformação de vídeo, você pode saber com antecedência quais formatos RGB e YUV a transformação suporta, mas não as dimensões do quadro de vídeo, até obtê-los da fonte de vídeo. Da mesma forma, você pode não se importar com certos detalhes, como as primárias de vídeo. Com uma estrutura de formato, cada membro deve ser preenchido com algum valor. Como resultado, tornou-se comum usar zero para indicar um valor desconhecido ou padrão. Essa prática pode causar erros se outro componente tratar zero como um valor legítimo. Com atributos, você simplesmente omite os atributos que são desconhecidos ou não relevantes para o seu componente.
Como os requisitos mudaram ao longo do tempo, as estruturas de formato foram estendidas adicionando dados adicionais no final da estrutura. Por exemplo, WAVEFORMATEXTENSIBLE estende a estrutura WAVEFORMATEX. Essa prática é propensa a erros, porque os componentes devem lançar ponteiros de estrutura para outros tipos de estrutura. Os atributos podem ser estendidos com segurança.
Foram definidas estruturas de formato mutuamente incompatíveis. Por exemplo, o DirectShow define as estruturas VIDEOINFOHEADER e VIDEOINFOHEADER2. Os atributos são definidos independentemente uns dos outros, por isso este problema não surge.
Tópicos relacionados