Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Transformasi Media Foundation (MFT) menyediakan model generik untuk pemrosesan data media. MFTs digunakan untuk dekoder, encoder, dan prosesor sinyal digital (DSP). Singkatnya, apa pun yang berada di pipa aliran media antara sumber media dan sink media adalah MFT.
Untuk sebagian besar aplikasi, detail pemrosesan data MFT disembunyikan oleh lapisan arsitektur Media Foundation yang lebih tinggi. Banyak aplikasi Media Foundation tidak akan pernah melakukan panggilan langsung ke MFT. Namun, tentu saja dimungkinkan untuk menghosting MFT langsung di aplikasi Anda.
MFTs adalah evolusi model transformasi yang pertama kali diperkenalkan dengan DirectX Media Objects (DMO). Bahkan, relatif mudah untuk membuat transformasi yang mendukung kedua model. Dibandingkan dengan DMOs, perilaku MFT yang diperlukan ditentukan dengan lebih jelas, yang membuat penulisan implementasi yang benar menjadi lebih mudah. Selain itu, MFTs dapat mendukung pemrosesan video yang dipercepat perangkat keras.
Topik ini memberikan gambaran singkat tentang model pemrosesan MFT, berfokus pada desain keseluruhan daripada panggilan metode tertentu. Untuk deskripsi langkah demi langkah yang lebih rinci, lihat Model Pemrosesan MFT Dasar.
Sungai
MFT memiliki aliran input dan aliran output. Aliran input menerima data, dan aliran output menghasilkan data. Misalnya, dekoder memiliki satu aliran input, yang menerima data yang dikodekan, dan satu aliran output, yang menghasilkan data yang didekodekan.
Aliran pada MFT tidak direpresentasikan sebagai objek COM yang berbeda. Sebagai gantinya, setiap aliran memiliki pengidentifikasi aliran yang ditunjuk, dan metode dalam antarmukaIMFTransformmengambil pengidentifikasi aliran sebagai parameter input.
Beberapa MFTs memiliki jumlah aliran tetap. Misalnya, decoder dan encoder biasanya memiliki tepat satu input dan satu output. MFT lainnya memiliki jumlah aliran yang dinamis. Jika MFT mendukung aliran dinamis, klien dapat menambahkan aliran input baru. Klien tidak dapat menambahkan aliran output, tetapi MFT mungkin menambahkan atau menghapus aliran output selama pemrosesan. Misalnya, multiplexers biasanya memungkinkan klien untuk menambahkan aliran input dan memiliki satu output untuk aliran multipleks. Demultiplexer adalah kebalikan, dengan satu masukan tetapi jumlah aliran keluaran yang dinamis, tergantung pada isi aliran masukan. Ilustrasi berikut menunjukkan perbedaan antara multiplexer dan demultiplexer.
diagram
Jenis Media
Saat MFT pertama kali dibuat, tidak ada aliran yang memiliki format yang ditetapkan. Sebelum MFT dapat memproses data, klien harus mengatur format untuk aliran. Misalnya, dengan dekoder, format input adalah format kompresi yang digunakan dalam file sumber asli, dan format output adalah format yang tidak dikompresi, seperti audio PCM atau video RGB. Format streaming dijelaskan menggunakan Jenis Media.
Tergantung pada status internal MFT, MFT mungkin menyediakan daftar jenis media yang mungkin untuk setiap aliran. Anda bisa menggunakan daftar ini sebagai petunjuk ketika Anda mengatur tipe media. Mengatur jenis media pada satu aliran dapat mengubah daftar jenis yang mungkin untuk aliran lain. Misalnya, dekoder biasanya tidak dapat menyediakan jenis output apa pun sampai klien mengatur jenis input. Jenis input berisi informasi yang diperlukan dekoder untuk mengembalikan daftar jenis output yang mungkin.
Untuk mengatur jenis media pada aliran, panggil IMFTransform::SetInputType atau IMFTransform::SetOutputType. Untuk mendapatkan daftar kemungkinan jenis media untuk aliran, panggil IMFTransform::GetInputAvailableType atau IMFTransform::GetOutputAvailableType.
Memproses Data
Setelah klien mengatur jenis media pada aliran, MFT siap untuk memproses data. Untuk melahirkan ini, klien bergantian antara menyediakan data input ke MFT dan mendapatkan data output dari MFT:
- Untuk memberikan data input ke MFT, panggil IMFTransform::P rocessInput.
- Untuk menarik data output dari MFT, panggil IMFTransform::P rocessOutput.
Metode ProcessInput mengambil pointer ke sampel media yang telah dialokasikan oleh klien. Sampel media berisi satu atau beberapa buffer, dan setiap buffer berisi data input untuk diproses oleh MFT.
Metode ProcessOutput mendukung dua model alokasi yang berbeda: apakah MFT yang mengalokasikan buffer output atau klien yang mengalokasikan buffer output. Beberapa MFTs mendukung kedua model alokasi, tetapi tidak diperlukan bagi MFT untuk mendukung keduanya. Misalnya, MFT mungkin mengharuskan klien untuk mengalokasikan buffer output. Metode IMFTransform::GetOutputStreamInfo mengembalikan informasi tentang aliran output, termasuk model alokasi mana yang didukung MFT.
MFTs dirancang untuk menyangga data sesedikit mungkin, untuk meminimalkan latensi dalam alur. Oleh karena itu, pada waktu tertentu, MFT dapat memberi sinyal salah satu kondisi berikut:
- MFT memerlukan lebih banyak data input. Dalam keadaan ini, MFT tidak dapat menghasilkan output sampai klien memanggil ProcessInput setidaknya sekali.
- MFT tidak akan menerima input lagi sampai klien memanggil ProcessOutput setidaknya sekali.
Misalnya, Anda menggunakan dekoder video untuk mendekode streaming video yang berisi campuran bingkai kunci dan bingkai delta. Awalnya, MFT memerlukan beberapa input sebelum dapat mendekode bingkai apa pun. Klien memanggil ProcessInput untuk mengirimkan bingkai pertama. Misalkan bingkai pertama adalah bingkai delta (diperlihatkan dalam diagram berikut sebagai 'P' untuk bingkai yang diprediksi). Decoder menyimpan bingkai ini, tetapi tidak dapat menghasilkan keluaran apa pun sampai mendapatkan bingkai kunci berikutnya.
diagram
Klien terus memanggil ProcessInput dan akhirnya mencapai bingkai kunci berikutnya (ditunjukkan pada diagram berikutnya sebagai 'I' untuk bingkai berkode intra). Sekarang dekoder memiliki cukup bingkai untuk mulai mendekode. Pada titik ini berhenti menerima input, dan klien harus memanggil ProcessOutput untuk mendapatkan bingkai yang didekodekan.
diagram
Pendekatan paling sederhana untuk klien adalah dengan mengganti-ganti panggilan ke ProcessInput dan ProcessOutput. Algoritma yang lebih canggih dijelaskan dalam topik Model Pemrosesan MFT Dasar.
Topik terkait