Bagikan melalui


Kelas CPosPassThru

[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.]

hierarki kelas dasar cpospassthru

Kelas CPosPassThru menangani perintah pencarian untuk mengubah filter, dengan meneruskannya ke hulu ke filter berikutnya.

Saat aplikasi mencari grafik filter, Filter Graph Manager memberikan perintah pencarian ke filter perender. Perintah diteruskan ke hulu, melalui pin output setiap filter, hingga mencapai filter yang dapat menjalankan perintah (jika ada). Untuk detailnya, lihat Mencari. Kelas CPosPassThru meneruskan semua perintah pencarian ke pin output pada filter upstream, seperti yang ditunjukkan pada diagram berikut.

kelas cpospassthru mengirimkan perintah pencarian di hulu.

Meskipun kelas ini disediakan di pustaka kelas dasar, DirectShow juga menyediakan kelas yang sama di Quartz.dll. Menggunakan versi Quartz.dll dapat mengurangi ukuran kode di filter Anda agak, karena kelas dimuat pada run-time dari DLL. Untuk menggunakan versi tersebut, panggil fungsi CreatePosPassThru .

Dalam metode NonDelegatingQueryInterface pin output Anda, delegasikan ke objek CPosPassThru setiap kali antarmuka yang diminta adalah IMediaSeeking atau IMediaPosition, seperti yang ditunjukkan dalam kode berikut:

// The following member variables are assumed:
IPin *m_pInput;    // Pointer to the input pin on your filter.
IUnknown *m_pPos;  // Pointer to the CPosPassThru object.

STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    HRESULT hr
    if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
    {
        if (m_pPos == NULL) 
        {
            // We have not created the CPosPassThru object yet. Do so now.
            hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
            if (FAILED(hr)) return hr;
        }
        return m_pPos->QueryInterface(riid, ppv);
    } 
    else
    {
         // Other interfaces (not shown).
    }
}

~CMyPin::CMyPin() 
{
    // Release the CPosPassThruObject.
    if (m_pPos != NULL) m_pPos->Release();
}

Kecuali jika disebutkan, semua metode IMediaPosition dan IMediaSeeking di kelas ini memanggil metode yang sesuai pada pin yang terhubung dan mengembalikan hasilnya.

Metode Publik Deskripsi
CPosPassThru Metode konstruktor.
ForceRefresh Kedaluwarsa.
GetMediaTime Mengambil stempel waktu pada sampel saat ini. Virtual.
Metode IMediaPosition Deskripsi
get_Duration Mengambil durasi aliran.
put_CurrentPosition Mengatur posisi saat ini, relatif terhadap total durasi aliran.
get_StopTime Mengambil waktu di mana pemutaran akan berhenti, relatif terhadap durasi aliran.
put_StopTime Mengatur waktu pemutaran akan berhenti, relatif terhadap durasi streaming.
get_PrerollTime Mengambil jumlah data yang akan diantrekan sebelum posisi mulai.
put_PrerollTime Mengatur jumlah data yang akan diantrekan sebelum posisi mulai.
get_Rate Mengambil laju pemutaran.
put_Rate Mengatur laju pemutaran.
get_CurrentPosition Mengambil posisi saat ini, relatif terhadap total durasi aliran.
CanSeekForward Menentukan apakah aliran dapat dicari mundur.
CanSeekBackward Menentukan apakah aliran dapat dicari ke depan.
Metode IMediaSeeking Deskripsi
CheckCapabilities Mengkueri apakah aliran telah menentukan kemampuan pencarian.
ConvertTimeFormat Mengonversi dari satu kali format ke format lainnya.
GetAvailable Mengambil rentang waktu di mana pencarian efisien.
GetCapabilities Mengambil semua kemampuan pencarian aliran.
GetCurrentPosition Mengambil posisi saat ini, relatif terhadap total durasi aliran.
GetDuration Mengambil durasi aliran.
GetPositions Mengambil posisi saat ini dan posisi berhenti, relatif terhadap total durasi aliran.
GetPreroll Mengambil jumlah data yang akan diantrekan sebelum posisi mulai.
GetRate Mengambil laju pemutaran.
GetStopPosition Mengambil waktu di mana pemutaran akan berhenti, relatif terhadap durasi aliran.
GetTimeFormat Mengambil format waktu saat ini.
IsFormatSupported Menentukan apakah format waktu yang ditentukan didukung.
IsUsingTimeFormat Menentukan apakah format waktu yang ditentukan adalah format yang saat ini digunakan.
QueryPreferredFormat Mengambil format waktu yang disukai untuk aliran.
SetPositions Mengatur posisi saat ini dan posisi berhenti.
SetRate Mengatur laju pemutaran.
SetTimeFormat Mengatur format waktu.
Fungsi Pembantu Deskripsi
CreatePosPassThru CPosPassThru Membuat objek atau CRendererPosPassThru.

Persyaratan

Persyaratan Nilai
Header
Ctlutil.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)