Bagikan melalui


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
S_OK
Metode berhasil.
E_INVALIDARG
Argumen tidak valid.
MF_E_INVALIDSTREAMNUMBER
Pengidentifikasi aliran tidak valid.
MF_E_NO_SAMPLE_DURATION
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.

MF_E_NO_SAMPLE_TIMESTAMP
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.

MF_E_NOTACCEPTING
Transformasi tidak dapat memproses lebih banyak input saat ini.
MF_E_TRANSFORM_TYPE_NOT_SET
Jenis media tidak disetel pada satu atau beberapa aliran.
MF_E_UNSUPPORTED_D3D_TYPE
Jenis media tidak didukung untuk DirectX Video Acceleration (DXVA). Dekoder berkemampuan DXVA mungkin mengembalikan kode kesalahan ini.
 
Catatan Jika Anda mengonversi DirectX Media Object (DMO) ke MFT, ketahuilah bahwa S_FALSE bukan kode pengembalian yang valid untuk IMFTransform::P rocessInput, tidak seperti metode IMediaObject::P rocessInput .
 

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:

Pengecualian untuk aturan ini adalah bendera MFT_OUTPUT_STREAM_LAZY_READ . Ketika bendera ini ada, transformasi akan membuang sampel yang disimpan jika Anda memberinya lebih banyak input. Untuk informasi selengkapnya, lihat IMFTransform::GetOutputStreamInfo. Transformasi tidak boleh mengantre data input lagi daripada yang diperlukan untuk menghasilkan output yang benar.

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

Lihat juga

IMFTransform

Transformasi Media Foundation