Implementasi codec
Codec Windows Media Audio dan Video diimplementasikan sebagai objek COM. Biasanya, codec diimplementasikan sebagai sepasang objek COM: satu untuk encoder dan satu untuk dekoder. Encoder memiliki pengidentifikasi kelas (CLSID) dan dekoder memiliki CLSID yang berbeda. Misalnya, bagian encoder dari codec Windows Media Audio 9 memiliki CLSID yang diwakili oleh CLSID_CWMAEncMediaObject konstanta, dan bagian dekoder dari codec yang sama memiliki CLSID yang diwakili oleh konstanta CLSID_CWMADecMediaObject.
Dalam beberapa kasus, lebih dari satu encoder disertakan dalam satu objek COM. Misalnya, encoder Windows Media Video 9 dan encoder Windows Media Video 9.1 adalah bagian dari objek COM yang sama. Akibatnya, keduanya memiliki CLSID yang sama, yang diwakili oleh konstanta CLSID_CWMV9EncMediaObject. Demikian pula, beberapa objek COM menyertakan lebih dari satu dekoder.
Setiap objek encoder atau decoder mengekspos antarmuka IMediaObject sehingga objek dapat digunakan sebagai DirectX Media Object (DMO) dan antarmuka IMFTransform sehingga objek dapat digunakan sebagai Transformasi Media Foundation (MFT).
Untuk sebagian besar encoder, terlepas dari apakah Anda menggunakan encoder sebagai DMO atau MFT, Anda menggunakan CLSID yang sama untuk membuat instans encoder. Misalnya, untuk membuat instans encoder Windows Media Video 9, Anda menggunakan CLSID_CWMV9EncMediaObject, terlepas dari apakah Anda berniat menggunakan encoder sebagai DMO atau MFT. Demikian pula, untuk sebagian besar dekoder, setiap dekoder memiliki satu CLSID terlepas dari apakah Anda menggunakan dekoder sebagai DMO atau MFT.
Catatan
Ada beberapa pengecualian untuk pernyataan sebelumnya tentang menggunakan satu CLSID untuk DMO dan MFT. Misalnya, dekoder MPEG-4 Bagian 2 memiliki satu CLSID ketika bertindak sebagai DMO dan CLSID yang berbeda ketika bertindak sebagai MFT.
Selain antarmuka inti, setiap objek encoder atau decoder mengimplementasikan dua antarmuka serupa untuk bekerja dengan properti codec, IPropertyBag dan IPropertyStore. Versi lama objek encoder dan decoder menggunakan IPropertyBag, yang mengidentifikasi setiap properti dengan nilai string yang berisi nama properti. IPropertyStore adalah antarmuka yang lebih baru yang mengidentifikasi properti dengan nilai kunci properti yang unik. Dukungan untuk IPropertyStore ditambahkan untuk memberikan dukungan untuk MFTs. Sebagian besar string nama properti IPropertyBag memiliki GUID kunci properti IPropertyStore yang sesuai dan sebagian besar GUID memiliki string nama IPropertyBag yang sesuai, dengan beberapa pengecualian.
Dokumentasi ini mencantumkan properti menurut konstanta kunci properti, tetapi setiap entri menyertakan konstanta string nama properti untuk digunakan dengan IPropertyBag jika sesuai.