Metode CBaseStreamControl.CheckStreamState
[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.]
Metode menentukan CheckStreamState
apakah sampel media harus dikirimkan atau dibuang.
Sintaks
enum CheckStreamState(
IMediaSample *pSample
);
Parameter
-
pSample
-
Arahkan ke antarmuka IMediaSample sampel.
Nilai kembali
Mengembalikan salah satu nilai berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Buang sampel ini. |
|
Kirimkan sampel ini. |
Keterangan
Panggil metode ini saat pin Anda menerima sampel. Berikan sampel hanya jika nilai yang dikembalikan STREAM_FLOWING. Jika nilai yang dikembalikan STREAM_DISCARDING, buang sampel.
Jika pin membuang sampel apa pun, pin harus menandai sampel berikutnya yang dikirimkannya sebagai penghentian, dengan memanggil metode IMediaSample::SetDiscontinuity .
Jika filter Anda mengimplementasikan antarmuka IAMDroppedFrames untuk menghitung berapa banyak bingkai yang dijatuhkannya, jangan hitung bingkai yang dibuang sebagai bingkai yang dijatuhkan.
Ketika nilai yang dikembalikan STREAM_DISCARDING, metode memblokir hingga waktu referensi mencapai waktu mulai sampel. Ini mencegah pin Anda membuang sampel terlalu cepat. Jika filter dijeda, waktu tunggu tidak terbatas, hingga filter berjalan, berhenti, atau menghapus data. (Perubahan status filter dan streaming terjadi pada utas terpisah, sehingga ini tidak menyebabkan kebuntuan.)
Enumerasi CBaseStreamControl::StreamControlState didefinisikan sebagai berikut:
enum StreamControlState{
STREAM_FLOWING = 0x1000,
STREAM_DISCARDING
};
Contoh
Contoh berikut mengasumsikan bahwa pin menggunakan variabel anggota bernama m_fLastSampleDiscarded untuk melacak penghentian.
CMyPin::Receive(IMediaSample *pSample)
{
if (!pSample) return E_POINTER;
int iStreamState = CheckStreamState(pSample);
if (iStreamState == STREAM_FLOWING)
{
if (m_fLastSampleDiscarded)
pSample->SetDiscontinuity(TRUE);
m_fLastSampleDiscarded = FALSE;
/* Deliver the sample. */
}
else
{
m_fLastSampleDiscarded = TRUE;
// Discard this sample. Do not deliver it.
}
}
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|