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 . Essa interface herda a 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ção MFCreateMediaType . Essa função retorna um ponteiro para a interface IMFMediaType . 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.
Tipos e subtipos principais
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 em um 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 ainda mais o formato. Por exemplo, dentro do tipo principal de vídeo, há subtipos para RGB-24, RGB-32, YUY2 e assim por diante. No á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 de GUIDs de tipo e subtipo principais, consulte GUIDs de tipo de mídia.
Por que 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 de Formato de Mídia do Windows.
É mais fácil representar valores "não sei" ou "não se importa". Por exemplo, se você estiver escrevendo uma transformação de vídeo, talvez saiba com antecedência qual RGB e YUV formata a transformação dão suporte, mas não as dimensões do quadro de vídeo, até obtê-las da fonte de vídeo. Da mesma forma, talvez você não se importe com determinados 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 poderá causar erros se outro componente tratar zero como um valor legítimo. Com atributos, você simplesmente omite os atributos desconhecidos ou não relevantes para o componente.
Como os requisitos foram alterados ao longo do tempo, as estruturas de formato foram estendidas adicionando dados adicionais ao final da estrutura. Por exemplo, WAVEFORMATEXTENSIBLE estende a estrutura WAVEFORMATEX . Essa prática é propensa a erros, pois os componentes devem converter ponteiros de estrutura para outros tipos de estrutura. Os atributos podem ser estendidos com segurança.
Estruturas de formato mutuamente incompatíveis foram definidas. Por exemplo, o DirectShow define as estruturas VIDEOINFOHEADER e VIDEOINFOHEADER2 . Os atributos são definidos independentemente uns dos outros, portanto, esse problema não surge.
Tópicos relacionados