Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
[DirectShow bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. Yerine MediaPlayer, IMFMediaEngineve Media Foundation 'de Ses/Video Yakalamaalmıştır. Bu özellikler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda, yeni kodun MediaPlayer, IMFMediaEngine ve Media Foundation'da Ses/Video Yakalama kullanmasını, DirectShowyerine kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]
Medya Verilerini Ayrıştırma
Filtreniz medya verilerini ayrıştırıyorsa, içerikteki üst bilgiler veya diğer kendi kendini açıklayan verilere güvenmeyin. Örneğin, AVI RIFF öbeklerinde veya MPEG paketlerinde görünen boyut değerlerine güvenmeyin. Bu tür hatalara yaygın örnekler şunlardır:
- N bayt veri okuma; bu durumda, N değeri içerikten alınmakta olup, N arabelleğinizin gerçek boyutuna göre kontrol edilmemektedir.
- Uzaklık değerinin arabelleğe denk geldiğini doğrulamadan arabellek içindeki bayt uzaklığına atlama.
Bir diğer yaygın hata sınıfı, içerikte bulunan biçim açıklamalarının doğrulanmamasıdır. Örneğin:
- Bir BITMAPINFOHEADER yapısından ardından bir renk tablosu gelebilir. BITMAPINFO yapısı, BITMAPINFOHEADER yapısı ve ardından renk tablosunu oluşturan RGBQUAD değerleri dizisi olarak tanımlanır. Dizinin boyutu, biClrUseddeğerine göre belirlenir. Bir renk tablosunu asla BITMAPINFO'e kopyalamadan önce, BITMAPINFO yapısı için ayrılan arabelleğin boyutunu kontrol ettiğinizden emin olun.
- WAVEFORMATEX yapısına ek biçim bilgileri eklenmiş olabilir. cbSize üyesi ek bilgilerin boyutunu belirtir.
Pin bağlantısı sırasında, bir filtre tüm biçim yapılarının iyi biçimlendirilmiş olduğunu ve makul değerler içerdiğini doğrulamalıdır. Aksi takdirde bağlantıyı reddedin. Biçim yapısını doğrulayan kodda, özellikle aritmetik taşma konusunda dikkatli olun. Örneğin, BITMAPINFOHEADERiçinde genişlik ve yükseklik uzunlukları 32 bit long değerleridir, ancak görüntü boyutu (bu ikisinin çarpımının bir fonksiyonudur) yalnızca bir DWORD değeridir.
Kaynaktaki biçim verileri ayrılmış arabellekten daha büyükse, kaynak verileri arabelleğinize kopyalamak için kesmeyin. Bunu yapmak, örtük boyutu gerçek boyutundan daha büyük bir yapı oluşturabilir. Örneğin, bir bitmap üst bilgisi artık mevcut olmayan bir palet tablosunu belirtebilir. Bunun yerine arabelleği yeniden dağıtın veya bağlantıyı kesin.
Akış Sırasında Hataları
Grafik çalışırken filtreniz hatalı biçimlendirilmiş içerik alıyorsa akışı sonlandırmalıdır. Aşağıdakileri yapın:
- Receive'dan hata kodu döndürün.
- Aşağı akış filtresinde IPin::EndOfStream çağrısını yapın.
- bir EC_ERRORABORT olayı göndermek için CBaseFilter::NotifyEventçağırın.
Biçim Değişiklikleri
Filtrelerin akışların ortasındaki biçimleri değiştirmesine yönelik çeşitli mekanizmalar vardır. Bunların her biri birden fazla adım içerir ve bu da yanlış kabul potansiyeli oluşturur. Filtreniz dinamik biçim değişikliği isteği alıyorsa isteği reddetmeli veya geldiğinde yeni biçimi kabul etmelidir. Benzer şekilde, diğer filtre kabul etmediği sürece hiçbir zaman biçimler arasında geçiş yapma. Daha fazla bilgi için bkz. Dinamik Biçim Değişiklikleri.