Metode IMFTransform::P rocessInput (mftransform.h)
Mengirimkan data ke aliran input pada transformasi Media Foundation (MFT) ini.
Sintaks
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
Parameter
[in] dwInputStreamID
Pengidentifikasi aliran input. Untuk mendapatkan daftar pengidentifikasi aliran, panggil IMFTransform::GetStreamIDs.
[in] pSample
Arahkan ke antarmuka IMFSample dari sampel input. Sampel harus berisi setidaknya satu buffer media yang berisi data input yang valid.
[in] dwFlags
Dicadangkan. Harus nol.
Mengembalikan nilai
Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
|
Argumen tidak valid. |
|
Pengidentifikasi aliran tidak valid. |
|
Sampel input memerlukan durasi sampel yang valid. Untuk mengatur durasi, panggil IMFSample::SetSampleDuration.
Beberapa MFT mengharuskan sampel input memiliki durasi yang valid. Beberapa MFT tidak memerlukan durasi sampel. |
|
Sampel input memerlukan stempel waktu. Untuk mengatur stempel waktu, panggil IMFSample::SetSampleTime.
Beberapa MFT mengharuskan sampel input memiliki stempel waktu yang valid. Beberapa MFT tidak memerlukan stempel waktu. |
|
Transformasi tidak dapat memproses lebih banyak input saat ini. |
|
Jenis media tidak disetel pada satu atau beberapa aliran. |
|
Jenis media tidak didukung untuk DirectX Video Acceleration (DXVA). Dekoder berkemampuan DXVA mungkin mengembalikan kode kesalahan ini. |
Keterangan
Dalam kebanyakan kasus, jika metode berhasil, MFT menyimpan sampel dan menyimpan jumlah referensi pada penunjuk IMFSample . Jangan gunakan kembali sampel hingga MFT merilis sampel. Namun, alih-alih menyimpan sampel, MFT mungkin menyalin data sampel ke buffer baru. Dalam hal ini, MFT harus mengatur bendera MFT_INPUT_STREAM_DOES_NOT_ADDREF di metode IMFTransform::GetInputStreamInfo .
Jika MFT sudah memiliki data input yang cukup untuk menghasilkan sampel output, MFT tidak menerima data input baru, dan ProcessInput mengembalikan MF_E_NOTACCEPTING. Pada saat itu, klien harus menghapus data input yang tertunda dengan melakukan salah satu hal berikut:
- Hasilkan output baru dengan memanggil IMFTransform::P rocessOutput.
- Hapus data input dengan memanggil IMFTransform::P rocessMessage dengan pesan MFT_MESSAGE_COMMAND_FLUSH .
MFT dapat memproses data input dalam metode ProcessInput . Namun, sebagian besar MFT menunggu hingga klien memanggil ProcessOutput.
Setelah klien menetapkan jenis media yang valid di semua aliran, MFT harus selalu berada di salah satu dari dua status: Mampu menerima lebih banyak input, atau dapat menghasilkan lebih banyak output. Seharusnya tidak pernah berada di kedua negara bagian atau tidak sama sekali. MFT hanya boleh menerima input sebanyak yang diperlukan untuk menghasilkan setidaknya satu sampel output, di mana ProcessInput mengembalikan MF_E_NOTACCEPTING. Ketika ProcessInput mengembalikan MF_E_NOTACCEPTING, klien dapat mengasumsikan bahwa MFT siap untuk menghasilkan output.
Jika MFT mengalami kesalahan non-fatal dalam data input, MFT hanya dapat menghilangkan data dan mencoba memulihkan ketika mendapatkan lebih banyak data input. Untuk meminta lebih banyak data input, MFT mengembalikan MF_E_TRANSFORM_NEED_MORE_INPUT dari metode IMFTransform::P rocessOutput . Jika MFT menghilangkan data apa pun, MFT harus mengatur atribut atribut MFSampleExtension_Discontinuity pada sampel output berikutnya, untuk memberi tahu pemanggil bahwa ada celah dalam aliran data.
Jika MFT_UNIQUE_METHOD_NAMES ditentukan sebelum menyertakan mftransform.h, metode ini diganti namanya menjadi MFTProcessInput. Lihat Membuat Objek DMO/MFT Hibrid.
Pemrosesan Asinkron
Keterangan sebelumnya menjelaskan model pemrosesan sinkron . Untuk mendukung pemrosesan asinkron, lihat MFTs Asinkron.Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | mftransform.h |
Pustaka | Mfuuid.lib |