Implementazione di codec
I codec Windows Media Audio e Video vengono implementati come oggetti COM. In genere, un codec viene implementato come coppia di oggetti COM: uno per il codificatore e uno per il decodificatore. Il codificatore ha un identificatore di classe (CLSID) e il decodificatore ha un CLSID diverso. Ad esempio, la parte del codificatore del codec Windows Media Audio 9 ha un CLSID rappresentato dalla costante CLSID_CWMAEncMediaObject e la parte del decodificatore dello stesso codec ha un CLSID rappresentato dalla costante CLSID_CWMADecMediaObject.
In alcuni casi, più codificatori sono inclusi in un singolo oggetto COM. Ad esempio, il codificatore Windows Media Video 9 e il codificatore Windows Media Video 9.1 fanno parte dello stesso oggetto COM. Di conseguenza, entrambi hanno lo stesso CLSID, rappresentato dalla costante CLSID_CWMV9EncMediaObject. Analogamente, alcuni oggetti COM includono più decodificatori.
Ogni oggetto codificatore o decodificatore espone l'interfaccia IMediaObject in modo che l'oggetto possa essere usato come oggetto DirectX Media Object (DMO) e l'interfaccia FMTransform in modo che l'oggetto possa essere usato come Trasformazione Media Foundation (MFT).
Per la maggior parte dei codificatori, indipendentemente dal fatto che si usi il codificatore come DMO o un MFT, si usa lo stesso CLSID per creare un'istanza del codificatore. Ad esempio, per creare un'istanza del codificatore Windows Media Video 9, si usa CLSID_CWMV9EncMediaObject, indipendentemente dal fatto che si intenda usare il codificatore come DMO o un MFT. Analogamente, per la maggior parte dei decodificatori, ogni decodificatore ha un singolo CLSID indipendentemente dal fatto che si usi il decodificatore come DMO o un MFT.
Nota
Esistono alcune eccezioni all'istruzione precedente sull'uso di un singolo CLSID per DMO e MFT. Ad esempio, il decodificatore MPEG-4 Parte 2 ha un CLSID quando agisce come DMO e un CLSID diverso quando agisce come MFT.
Oltre alle interfacce principali, ogni codificatore o oggetto decodificatore implementa due interfacce simili per l'uso delle proprietà codec, IPropertyBag e IPropertyStore. Versioni precedenti degli oggetti codificatore e decodificatore usati IPropertyBag, che identifica ogni proprietà in base a un valore stringa contenente un nome di proprietà. IPropertyStore è un'interfaccia più recente che identifica le proprietà con un valore univoco della chiave di proprietà. Il supporto per IPropertyStore è stato aggiunto per fornire supporto per le reti MULTIFUNZIONe. La maggior parte delle stringhe dei nomi delle proprietà IPropertyBag ha un GUID della proprietà IPropertyStore corrispondente e la maggior parte dei GUID ha una stringa di nome IPropertyBag corrispondente, con alcune eccezioni.
Questa documentazione elenca le proprietà in base alla costante della chiave delle proprietà, ma ogni voce include la costante stringa di nome proprietà da usare con IPropertyBag quando appropriato.