Implementação de codec
Os codecs de Áudio e Vídeo do Windows Media são implementados como objetos COM. Normalmente, um codec é implementado como um par de objetos COM: um para o codificador e outro para o decodificador. O codificador tem um CLSID (identificador de classe) e o decodificador tem um CLSID diferente. Por exemplo, a parte do codificador do codec do Windows Media Audio 9 tem um CLSID representado pela constante CLSID_CWMAEncMediaObject e a parte do decodificador desse mesmo codec tem um CLSID representado pela constante CLSID_CWMADecMediaObject.
Em alguns casos, mais de um codificador é incluído em um único objeto COM. Por exemplo, o codificador do Windows Media Video 9 e o codificador do Windows Media Video 9.1 fazem parte do mesmo objeto COM. Consequentemente, ambos têm o mesmo CLSID, que é representado pela constante CLSID_CWMV9EncMediaObject. Da mesma forma, alguns objetos COM incluem mais de um decodificador.
Cada objeto de codificador ou decodificador expõe a interface IMediaObject para que o objeto possa ser usado como um Objeto de Mídia DirectX (DMO) e a interface IMFTransform para que o objeto possa ser usado como uma MFT (Media Foundation Transform).
Para a maioria dos codificadores, independentemente de você usar o codificador como um DMO ou um MFT, use o mesmo CLSID para criar uma instância do codificador. Por exemplo, para criar uma instância do codificador do Windows Media Video 9, use CLSID_CWMV9EncMediaObject, independentemente de você pretender usar o codificador como um DMO ou um MFT. Da mesma forma, para a maioria dos decodificadores, cada decodificador tem um único CLSID, independentemente de você usar o decodificador como um DMO ou um MFT.
Observação
Há algumas exceções à instrução anterior sobre como usar um único CLSID para o DMO e o MFT. Por exemplo, o decodificador MPEG-4 Parte 2 tem um CLSID quando está agindo como um DMO e um CLSID diferente quando está agindo como um MFT.
Além das interfaces principais, cada objeto de codificador ou decodificador implementa duas interfaces semelhantes para trabalhar com propriedades de codec, IPropertyBag e IPropertyStore. Versões mais antigas do codificador e dos objetos de decodificador usavam IPropertyBag, que identifica cada propriedade por um valor de cadeia de caracteres que contém um nome de propriedade. IPropertyStore é uma interface mais recente que identifica propriedades com um valor de chave de propriedade exclusivo. O suporte para IPropertyStore foi adicionado para fornecer suporte para MFTs. A maioria das cadeias de caracteres de nome da propriedade IPropertyBag tem um GUID de chave de propriedade IPropertyStore correspondente e a maioria dos GUIDs tem uma cadeia de caracteres de nome IPropertyBag correspondente, com algumas exceções.
Esta documentação lista as propriedades por constante de chave de propriedade, mas cada entrada inclui a constante de cadeia de caracteres property-name para uso com IPropertyBag quando apropriado.