Bagikan melalui


Pemberitahuan Akhir Aliran

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan 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 Pengambilan Audio/Video 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.]

Ketika filter sumber selesai mengirim data, filter sumber memanggil metode IPin::EndOfStream pada pin input hilir. Filter hilir menyebarluaskan panggilan ke filter berikutnya, dan sebagainya. Saat panggilan EndOfStream mencapai perender, perender mengirim peristiwa EC_COMPLETE ke Filter Graph Manager. Jika perender memiliki beberapa pin input, perender mengirimkan peristiwa EC_COMPLETE setelah setiap pin input menerima pemberitahuan akhir aliran.

Filter harus membuat serial panggilan EndOfStream dengan panggilan streaming lainnya, seperti IMemInputPin::Receive. (Dengan kata lain, filter hilir harus selalu menerima panggilan dalam urutan yang benar.)

Dalam beberapa kasus, filter hilir mungkin mendeteksi akhir aliran sebelum filter sumber melakukannya. (Misalnya, filter hilir mungkin mengurai aliran.) Dalam hal ini, filter hilir dapat mengirim pemberitahuan end-of-stream, dalam hal ini harus mengembalikan S_FALSE dari IMemInputPin::Receive sampai grafik berhenti atau memerah. Nilai pengembalian S_FALSE menginformasikan filter sumber untuk berhenti mengirim data.

Penanganan default EC_COMPLETE

Secara default, Filter Graph Manager tidak meneruskan setiap peristiwa EC_COMPLETE ke aplikasi. Sebaliknya, ia menunggu sampai semua aliran telah memberi sinyal EC_COMPLETE dan kemudian mengirim satu peristiwa EC_COMPLETE. Dengan demikian, aplikasi menerima peristiwa setelah setiap aliran selesai.

Untuk menentukan jumlah aliran, Filter Graph Manager menghitung jumlah filter yang mendukung pencarian (melalui IMediaSeeking atau IMediaPosition) dan memiliki pin input yang dirender , yang didefinisikan sebagai pin input tanpa output yang sesuai. Filter Graph Manager menentukan apakah pin dirender dengan salah satu dari dua cara:

Pemberitahuan Akhir Aliran dalam Mode Penarikan

Dalam koneksi IAsyncReader , filter sumber tidak mengirim pemberitahuan end-of-stream. Instread, ini dilakukan oleh filter hilir, yang biasanya merupakan filter pengurai. Pengurai mengirimkan panggilan EndOfStream ke downstream. Ini tidak mengirim satu upstream ke filter sumber.

Mengirimkan Akhir Aliran