Bagikan melalui


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
STREAM_DISCARDING
Buang sampel ini.
STREAM_FLOWING
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
Strmctl.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)

Lihat juga

Kelas CBaseStreamControl