Tentang Tipe Media (Microsoft Media Foundation)
Jenis media menjelaskan format aliran media. Di Microsoft Media Foundation, jenis media diwakili oleh antarmuka IMFMediaType . Antarmuka ini mewarisi antarmuka IMFAttributes . Detail jenis media ditentukan sebagai atribut.
Untuk membuat jenis media baru, panggil fungsi MFCreateMediaType . Fungsi ini mengembalikan penunjuk ke antarmuka IMFMediaType . Jenis media awalnya tidak memiliki atribut. Untuk mengatur detail format, atur atribut yang relevan.
Untuk daftar atribut jenis media, lihat Atribut Jenis Media.
Jenis Utama dan Subjenis
Dua informasi penting untuk jenis media apa pun adalah jenis utama dan subjenisnya.
- Jenis utama adalah GUID yang menentukan kategori keseluruhan data dalam aliran media. Jenis utama termasuk video dan audio. Untuk menentukan jenis utama, atur atribut MF_MT_MAJOR_TYPE . Metode IMFMediaType::GetMajorType mengembalikan nilai atribut ini.
- Subjenis lebih lanjut mendefinisikan format. Misalnya, dalam jenis utama video, ada subjenis untuk RGB-24, RGB-32, YUY2, dan sebagainya. Dalam audio, ada audio PCM, audio floating-point IEEE, dan lainnya. Subjenis menyediakan lebih banyak informasi daripada jenis utama, tetapi tidak menentukan semuanya tentang format. Misalnya, subjenis video tidak menentukan ukuran gambar atau kecepatan bingkai. Untuk menentukan subjenis, atur atribut MF_MT_SUBTYPE .
Semua jenis media harus memiliki GUID jenis utama dan GUID subjenis. Untuk daftar GUID jenis utama dan subjenis, lihat GUID Jenis Media.
Mengapa Atribut?
Atribut memiliki beberapa keunggulan dibandingkan struktur format yang telah digunakan dalam teknologi sebelumnya seperti DirectShow dan Windows Media Format SDK.
Lebih mudah untuk mewakili nilai "tidak tahu" atau "tidak peduli". Misalnya, jika Anda menulis transformasi video, Anda mungkin tahu terlebih dahulu RGB dan YUV mana yang didukung transformasi, tetapi bukan dimensi bingkai video, sampai Anda mendapatkannya dari sumber video. Demikian pula, Anda mungkin tidak peduli dengan detail tertentu, seperti video utama. Dengan struktur format, setiap anggota harus diisi dengan beberapa nilai. Akibatnya, menjadi umum untuk menggunakan nol untuk menunjukkan nilai yang tidak diketahui atau default. Praktik ini dapat menyebabkan kesalahan jika komponen lain memperlakukan nol sebagai nilai yang sah. Dengan atribut , Anda cukup menghilangkan atribut yang tidak diketahui atau tidak relevan dengan komponen Anda.
Karena persyaratan telah berubah dari waktu ke waktu, struktur format diperluas dengan menambahkan data tambahan di akhir struktur. Misalnya, WAVEFORMATEXTENSIBLE memperluas struktur WAVEFORMATEX . Praktik ini rentan terhadap kesalahan, karena komponen harus melemparkan penunjuk struktur ke jenis struktur lainnya. Atribut dapat diperluas dengan aman.
Struktur format yang saling tidak kompatibel telah ditentukan. Misalnya, DirectShow mendefinisikan struktur VIDEOINFOHEADER dan VIDEOINFOHEADER2 . Atribut diatur secara independen satu sama lain, sehingga masalah ini tidak muncul.
Topik terkait