Noções básicas de DMO (Microsoft Media Foundation)
Este tópico fornece uma breve visão geral dos DMOs relacionados aos Codecs do Windows Media. Para obter mais informações sobre DMOs, consulte DirectX Media Objects.
Um DMO é um objeto COM que transforma dados. Você passa dados para ele e ele retorna os dados transformados. No caso de um DMO de codificador codec, você insira dados de mídia não compactados e o DMO fornece dados de mídia compactados. A principal vantagem de usar DMOs é que todos eles implementam a mesma interface base, IMediaObject, que simplifica o trabalho com eles porque você pode usar o mesmo objeto, independentemente do tipo de transformação que está sendo executada.
Como há variáveis envolvidas em qualquer tipo de transformação de dados, a transformação de áudio e vídeo deve levar em conta a ampla gama de possíveis configurações de mídia. Os codecs de Áudio e Vídeo do Windows Media também dão suporte a vários recursos especiais que você deve ser capaz de configurar usando o DMO.
Em geral, as informações de variáveis necessárias aos DMOs codec para compactar e descompactar a mídia digital são transmitidas de uma das três maneiras:
- Defina o tipo de entrada no DMO para transmitir as características da mídia não compactada que você passa para um DMO de codificador e as características da mídia compactada que você passa para um DMO de decodificador.
- Defina o tipo de saída no DMO para transmitir as características da mídia compactada que são entregues por um DMO de codificador e as características da mídia descompactada que são entregues por um DMO de decodificador.
- Usando os métodos da interface IPropertyBag , defina outras configurações que dão suporte aos vários recursos dos DMOs codec como propriedades. IPropertyBag é uma interface COM padrão compatível com todos os DMOs codec.
Além disso, alguns recursos de codec são gerenciados usando outras interfaces específicas para os DMOs codec. Essas interfaces são listadas para cada codec na seção Objetos Codec.
Os tipos de entrada e saída são específicos para fluxos de entrada e saída. Cada fluxo representa uma representação discreta do conteúdo. Por exemplo, o DMO do codificador de Vídeo do Windows Media tem um único fluxo de entrada e dois fluxos de saída. O fluxo de entrada aceita exemplos de vídeo não compactados. O primeiro dos dois fluxos de saída fornece amostras compactadas; o outro fornece amostras descompactadas. Os exemplos individuais em um fluxo de saída representam o mesmo conteúdo que os exemplos correspondentes no outro fluxo, mas cada fluxo fornece esses exemplos em um formato diferente.
Cada fluxo (entrada ou saída) dá suporte a um ou mais tipos de mídia. Um tipo de mídia, ou formato, é descrito por uma estrutura DMO_MEDIA_TYPE . Você pode consultar o DMO para os tipos compatíveis com um fluxo de saída chamando IMediaObject::GetOutputType. Esse método retorna um tipo de saída válido (embora em alguns casos parcialmente incompleto) para esse fluxo. Você pode enumerar os tipos de mídia com suporte para um fluxo de saída fazendo chamadas repetidas para GetOutputType, incrementando o parâmetro de tipo com cada chamada. Quando o índice de tipo que você passa está fora dos limites, o método retorna DMO_E_NO_MORE_ITEMS. Os formatos de entrada podem ser enumerados da mesma maneira usando o método IMediaObject::GetInputType .
Os tipos que são enumerados pelo DMO são apenas os tipos "preferenciais", no entanto, outros tipos podem ter suporte. Você pode validar um tipo de saída chamando IMediaObject::SetOutputType. Use IMediaObject::SetInputType para validar um tipo de entrada. Ambos os métodos retornarão DMO_E_TYPE_NOT_ACCEPTED se a estrutura de DMO_MEDIA_TYPE que você passou for inválida. Alguns DMOs exigem que você defina um tipo de saída antes de enumerar qualquer tipo de entrada. Todos os DMOs de codec de Áudio e Vídeo do Windows Media têm entradas e saídas que têm validação interdependente. Ou seja, o tipo de saída definido definirá os critérios de validação para o tipo de entrada. Também há algumas propriedades que, quando definidas, alteram os tipos válidos de entrada e saída. Por esse motivo, você deve definir todas as propriedades desejadas no DMO antes de enumerar tipos.
Quando você tiver definido os tipos de saída e entrada para o DMO, poderá começar a processar amostras. Cada exemplo de entrada é passado para o codec usando uma chamada para IMediaObject::P rocessInput e cada exemplo de saída é entregue pelo codec quando você faz uma chamada para IMediaObject::P rocessOutput.
Tópicos relacionados