Metode CBaseInputPin.Receive
[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]
Metode ini Receive
menerima sampel media berikutnya di aliran. Metode ini mengimplementasikan metode IMemInputPin::Receive .
Sintaks
HRESULT Receive(
IMediaSample *pSample
);
Parameter
-
pSample
-
Arahkan ke antarmuka IMediaSample sampel.
Nilai kembali
Mengembalikan nilai HRESULT . Nilai yang mungkin menyertakan nilai yang tercantum dalam tabel berikut ini.
Menampilkan kode | Deskripsi |
---|---|
|
Berhasil. |
|
Pin saat ini sedang di-flushing; sampel ditolak. |
|
Argumen penunjuk NULL. |
|
Tipe media tidak valid. |
|
Terjadi kesalahan run-time. |
|
Pin dihentikan. |
Keterangan
Pin output upstream memanggil metode ini untuk mengirimkan sampel ke pin input. Pin input harus melakukan salah satu hal berikut:
- Proses sampel sebelum kembali.
- Kembalikan, dan proses sampel dalam utas pekerja.
- Tolak sampel.
Jika pin menggunakan utas pekerja untuk memproses sampel, tambahkan jumlah referensi ke sampel di dalam metode ini. Setelah metode kembali, pin upstram merilis sampel. Saat jumlah referensi sampel mencapai nol, sampel kembali ke alokator untuk digunakan kembali.
Metode ini sinkron dan dapat memblokir. Jika metode mungkin memblokir, metode CBaseInputPin::ReceiveCanBlock pin harus mengembalikan S_OK.
Di kelas dasar, metode ini melakukan langkah-langkah berikut:
- Memanggil metode CBaseInputPin::CheckStreaming untuk memverifikasi bahwa pin dapat memproses sampel sekarang. Jika tidak dapat misalnya, jika pin dihentikan, metode gagal.
- Mengambil properti sampel dan memeriksa apakah format telah berubah (lihat di bawah).
- Jika format telah berubah, metode memanggil metode CBasePin::CheckMediaType untuk menentukan apakah format baru dapat diterima.
- Jika format baru tidak dapat diterima, metode memanggil metode CBasePin::EndOfStream , memposting peristiwa EC_ERRORABORT, dan mengembalikan kode kesalahan.
- Dengan asumsi tidak ada kesalahan, metode mengembalikan S_OK.
Uji perubahan format sebagai berikut:
- Jika sampel mendukung antarmuka IMediaSample2 , periksa anggota dwSampleFlags dari struktur AM_SAMPLE2_PROPERTIES . Jika bendera AM_SAMPLE_TYPECHANGED ada, format telah berubah.
- Jika tidak, jika sampel tidak mendukung IMediaSample2, panggil metode IMediaSample::GetMediaType . Jika metode mengembalikan nilai non-NULL , format telah berubah.
Di kelas dasar, metode ini tidak memproses sampel. Kelas turunan harus mengambil alih metode ini untuk melakukan pemrosesan. (Apa yang diperlukan ini sepenuhnya tergantung pada filter.) Kelas turunan harus memanggil metode kelas dasar, untuk memeriksa kesalahan yang dijelaskan sebelumnya.
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk