Bagikan melalui


Filter Pengambilan Video DirectShow

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

Menangkap filter di DirectShow memiliki beberapa fitur yang membedakannya dari jenis filter lainnya. Meskipun Capture Graph Builder menyembunyikan banyak detail, ada baiknya untuk membaca bagian ini, untuk memiliki pemahaman umum tentang grafik penangkapan DirectShow.

Sematkan Kategori

Filter tangkapan sering memiliki dua atau beberapa pin output yang memberikan jenis data yang sama—misalnya, pin pratinjau dan pin tangkapan. Oleh karena itu, jenis media bukanlah cara yang baik untuk membedakan pin. Sebaliknya, pin dibedakan oleh fungsionalitasnya, yang diidentifikasi menggunakan GUID, yang disebut kategori pin.

Untuk diskusi tentang cara mengkueri pin untuk kategorinya, lihat Bekerja dengan Kategori Pin. Namun, untuk sebagian besar aplikasi, Anda tidak perlu mengkueri pin secara langsung. Sebagai gantinya, berbagai metode ICaptureGraphBuilder2 mengambil parameter yang menentukan kategori pin untuk dioperasikan. Capture Graph Builder secara otomatis menemukan pin yang benar.

Pin Pratinjau dan Ambil Pin

Beberapa perangkat pengambilan video memiliki pin output terpisah untuk pratinjau dan pengambilan. Pin pratinjau digunakan untuk merender video ke layar, sementara pin pengambilan digunakan untuk menulis video ke file.

Pin pratinjau dan pin pengambilan memiliki perbedaan berikut:

  • Pin pratinjau menghilangkan bingkai sesuai kebutuhan untuk mempertahankan throughput pada pin pengambilan.
  • Setiap bingkai dari pin pengambilan diberi stempel waktu dengan waktu streaming saat bingkai diambil. Pin pratinjau tidak memberi stempel waktu pada sampel yang dikirimkannya.

Alasan bahwa bingkai pratinjau tidak memiliki stempel waktu adalah bahwa grafik filter memperkenalkan sejumlah kecil latensi ke dalam aliran. Jika waktu pengambilan digunakan sebagai waktu presentasi, perender video memperlakukan setiap sampel sebagai sedikit terlambat. Hal ini dapat menyebabkan perender video menghilangkan bingkai saat mencoba mengejar ketinggalan. Menghapus stempel waktu memastikan bahwa perender menyajikan setiap sampel saat tiba, tanpa menghilangkan bingkai.

Kategori pin untuk pin pratinjau PIN_CATEGORY_PREVIEW. Kategori untuk menangkap pin PIN_CATEGORY_CAPTURE.

Pin Port Video

Port video adalah koneksi perangkat keras antara perangkat video (seperti tuner TV analog) dan kartu video. Port video memungkinkan perangkat mengirim data video langsung ke kartu grafis. Video ditampilkan di layar menggunakan overlay perangkat keras. Port video mungkin merupakan kabel aktual yang menghubungkan dua perangkat pada kartu terpisah; atau mungkin koneksi kabel keras pada kartu yang sama.

Keuntungan dari port video adalah bahwa video langsung masuk ke memori video, tanpa pekerjaan apa pun oleh CPU. Namun, port video memiliki beberapa kelemahan:

  • Port video selalu menggunakan permukaan overlay selama pengambilan, terlepas dari apakah Anda ingin mempratinjau video.
  • Membalik antar bingkai terjadi secara otomatis, yang menyulitkan sinkronisasi balik dengan operasi video lainnya.

Jika perangkat pengambilan menggunakan port video, filter pengambilan memiliki pin port video alih-alih pin pratinjau. Kategori pin untuk pin port video PIN_CATEGORY_VIDEOPORT.

Setiap filter tangkapan memiliki setidaknya satu pin tangkapan. Selain itu mungkin memiliki pin pratinjau atau pin port video, tetapi tidak pernah keduanya. Filter dapat memiliki beberapa pin pengambilan dan pin pratinjau, masing-masing memberikan jenis media terpisah. Dengan demikian, satu filter dapat memiliki pin pengambilan video, pin pratinjau video, pin tangkapan audio, dan pin pratinjau audio. (Namun, tidak ada yang setara dengan port video untuk audio.)

Filter WDM Upstram

Perangkat Windows Driver Model (WDM) mungkin memerlukan beberapa filter tambahan di hulu dari filter tangkapan. Filter ini mencakup hal-hal berikut:

  • Filter Tuner TV. Mengontrol penyetelan untuk penyetelan TV analog.
  • Filter Audio TV. Mengontrol pengaturan audio untuk penyetel TV analog.
  • Filter Bilah Silang Video Analog. Merutekan sinyal video dan audio melalui perangkat keras. Misalnya, perangkat mungkin memiliki beberapa input, seperti S-Video dan video komposit. Filter crossbar memungkinkan aplikasi untuk memilih input.

Meskipun ini adalah filter terpisah di DirectShow, filter biasanya mewakili perangkat keras yang sama. Setiap filter mengontrol fungsi perangkat yang berbeda. Filter disambungkan oleh pin, tetapi tidak ada data media yang bergerak di seluruh koneksi pin. Oleh karena itu, pin pada filter ini tidak terhubung dengan membuat jenis media. Sebaliknya, mereka menggunakan nilai GUID yang disebut medium. GUID sedang didefinisikan secara unik untuk minidriver perangkat tertentu. Misalnya, filter Tuner TV dan filter Pengambilan Video untuk kartu TV yang sama akan mendukung media yang sama, yang memungkinkan aplikasi untuk membangun grafik dengan benar.

Dalam praktiknya, selama Anda menggunakan ICaptureGraphBuilder2 untuk membangun grafik pengambilan Anda, filter ini ditambahkan ke grafik secara otomatis. Untuk diskusi yang lebih rinci, lihat Filter Driver Kelas WDM.

Tentang Pengambilan Video di DirectShow