![]() |
| |||||||
| Forum Arşivi Gereksiz,Yanlış konular bu alanda toplanır. |
| |
| |
| | LinkBack | Konu Araçları | Stil |
| | #1 (permalink) |
| Usta Koxper | Bilgisayarımızdaki medya dosyalarını oynatan, görüntü ve seste değişiklikler veya efekt yazmamıza yarayan ve çoğu zaman codec olarak DirectShow filtrelerinin yazılımına ilişkin bir başlangıç dökümanıdır.DirectShow filtre yazılımı için DirectShow temel sınıflarının kullanımı tavsiye edilir. Temel sınıflar ile filtrenin başvuru adımları gerçekleştirilir. Bunlara ek olarak C++ da aşağıdaki adımları uygulamak gerekir. • DirectX SDK kök klasörünün altında “Samples\Multimedia\DirectShow\BaseClasses” klasörünün altında bulunan dosyaları C++ ile “Lib” dosyası olarak oluşturmak gerekir. Bu işlem için öncelikle SDK’yı kurmalı “BaseClasses” klasörü oluşmamış ise en son yeni SDK yamaları da kurulmalıdır. Bu kütüphane için iki adet sürüm derlenmelidir. Bu derlemeler, bir serbest (release) versiyon (Strmbase.lib), bir de hata ayıklama (debug) için ayrı bir versiyon olarak yapılmalıdır. Unicode ve Multicode için de aynı işlemleri yapmak isterseniz release, debug, release_unicode, debug_unicode olarak dört versiyona ihtiyacınız olacaktır. • Filtre uygulamanızda başlık dosyası olarak daha önceden derlemiş olduğumuz kütüphaneler için “Streams.h” dosyasını eklemelisiniz. (#include <streams.h>) • Derleyici ayarlarında __stdcall çağrı düzenini seçiniz. • C için çalışma zamanında kütüphanelerin kullanımı için multithreaded olarak ayarlayın. (release, debug ve diğerleri için) • DLL fonksiyonlarının icra edilebilmesi için projenize tanım dosyası ekleyin (.def) . Mesela MyFilter.dll için bu dosya örneği aşağıdaki gibidir. • Aşağıdaki kütüphane dosyalarını derleyicinin ayarlarında tanımlayın. Debug Build: Strmbasd.lib, Msvcrtd.lib, Winmm.lib Retail Build: Strmbase.lib, Msvcrt.lib, Winmm.lib • “Linker Settings” ayarlarında “Ignode default library” seçiniz. • Aşağıdaki kodu DLL in giriş noktası olarak projenizde tanımlayın. extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID); BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved); } DirectShow 9.0 dan önceki temel sınıf kütüphaneleri için aşağıdaki ayarları yapmanız gerekir. • Hata ayıklama işlemi için prosesörde DEBUG olarak bir bayrak tanımlamalısınız. DirectShow 9.0 ve sonraki sürümler için bu gerekli değildir. Filtreler Nasıl Bağlanır? Bu bölümde filtre geliştiriciler için filrelerin birbirleri ile nasıl bağlandığı anlatılacaktır. DirectShow filtresi yazarken muhtemelen ayrıntıları atlayacaksınız. Bu bölümde size detaylar anlatılacaktır. Bu bölüm aşağıdaki konuları içerir. • Pin bağlantıları • Medya Tip işlemleri • Ayırıcı işlemleri • Özel Ayırıcı sağlama • Pinlerin tekrar bağlanması Pin Bağlantıları Filtreler kendilerine ait pinlerle IPin arayüzü vasıtasıyla bağlanır. Bir filtrenin çıkış pini diğer filtrenin giriş pinine bağlanır. Her bir pinin kendine ait bir medya tipi vardır ve AM_MEDIA_TYPE yapısı ile bu tip tanımlamaları yapılır. Herhangi bir uygulamada birbirleri ile bağlanacak olan filtreler “Filter Graph Manager” daki metotlara yapılan çağrılar ve bu metotlar kullanılarak gerçekleştirilmektedir. Asla bu filtre veya pinlere ait metotlar bağlantı için kullanılmamalıdır. Uygulama içinde filtreleri bağlamak için IFilterGraph::ConnectDirect veya IGraphBuilder::Connect metotlarını kullanabilirsiniz. Ya da dolaylı olarak IGraphBuilder arayüzünün IGraphBuilder::RenderFile metodunu kullanarak, uygun filtrelere de sahipseniz, fitrelerin eklenmesi ve bağlanması otomatik olarak gerçekleştirilir. Bağlantının başarılı olması için, her iki filtrenin de filter graph içinde olması gerekmektedir. Bunun için öncelikli olarak her iki filtrenin de IGraphBuilder::AddFilter metodu ile graph builder’a eklenmesi gerekmektedir. Filter Graph Manager, filtreleri iyi bir şekilde graph nesnesine ekleyebilir. Filtreler başarılı bir şekilde eklendiğinde “Filter Graph Manager”, durumu IBaseFilter::JoinFilterGraph metodu ile filtre tarafına bildirir. Genel olarak bağlantı işlemindeki şüreçler şunlardır; 1. Filtre Grafik Yöneticisi (Filter Graph Manager) çıkış pinindeki IPin::Connect metoduna yaptığı çağrı ile diğer filtrenin giriş pinine işaretçisini geçirir. 2. Eğer çıkış pini bağlantıyı kabul eder ise, giriş pinindeki IPin::ReceiveConnection metoduna yaptığı çağrı ile bildiride bulunur. 3. Aynı zamanda giriş pini de bağlantıyı kabul ederse, bağlantı girişimi başarı ile gerçekleşip iki pin birbiri ile bağlanır. Bazı pinlerin bağlantısı kesilebilir. Filtre etkin olduğunda bu bağlantı tekrar sağlanır. Bu bağlantı tipi yeniden dinamik bağlantı olarak adlandırılır. Ancak pek çok filtre dinamik bağlantı tipini desteklemez. Downstream işlemlerinde genellikle filtrenin giriş pinleri, çıkış pinlerinden önce bağlanır. Bir filtre bağlantı işleminde bu sırayı destekler. Bazı filtreler de öncelikli bağlantıda çıkış pinini referans alır ve çalışma koşullarında bunu destekler. Mesela dosyaya yazma işlemini gerçekleştiren filtreler için, öncelikli olarak çıkış pininin bağlanması mümkün olabilir. Bir pin Connect veya ReceiveConnection metotlarına çağrı yaparsa, pin mutlaka bu bağlantı yöntemlerini desteklemelidir. Ortak olarak pinlerin en çok içerdiği görevler şunlardır; • Kabul işlemi için medya tiplerini kontrol ederler. • Bilgi aktarım işlemi için bir ayırıcı kullanırlar. • Gerekli olan arayüzleri oluşturabilmek için diğer pinlere sorgu yaparlar. |
| |
| Etiket |
| 1 or 3, directshow, filtre, yazılımı |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Konu Araçları | |
| Stil | |
| |