Mediastreamer2 VoIP motorunu keşfetme. 3. Bölüm

Makalenin materyali benim zenci kanalı.

Mediastreamer2 VoIP motorunu keşfetme. 3. Bölüm

Ton üreteci örneğinin iyileştirilmesi

Önceki Makale Bir ton üreteci uygulaması yazdık ve bunu bir bilgisayar hoparlöründen ses çıkarmak için kullandık. Şimdi programımızın bittiğinde hafızayı heap'e geri döndürmediğini fark edeceğiz. Bu konuyu açıklığa kavuşturmanın zamanı geldi.

Devreye artık ihtiyacımız kalmadığında, veri hattını durdurarak belleği boşaltmaya başlamalıyız. Bunu yapmak için, işlevi kullanarak saat kaynağının ve işaretleyicinin devre ile olan bağlantısını kesmeniz gerekir. ms_ticker_detach(). Bizim durumumuzda, onay işaretini filtre girişinden ayırmalıyız geçersiz kaynak:

ms_ticker_detach(ticker, voidsource)

Bu arada, konveyörü durdurduktan sonra devresini değiştirip tekrar devreye sokabilir ve şeridi tekrar bağlayabiliriz.

Artık fonksiyonu kullanarak onu kaldırabiliriz. ms_ticker_destroy():

ms_ticker_destroy(ticker)

Konveyör durdu ve filtrelerin bağlantısını keserek parçalarını sökmeye başlayabiliriz. Bunu yapmak için işlevi kullanın ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

argümanların amacı fonksiyonla aynıdır ms_filter_link().

Artık ayrılmış filtreleri kullanarak kaldırıyoruz ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

Örneğimize bu satırları ekleyerek bellek yönetimi açısından doğru bir program sonlandırması elde edeceğiz.

Gördüğümüz gibi, programın doğru şekilde tamamlanması, filtre başına ortalama dört satır kod olacak şekilde başlangıçtakiyle yaklaşık olarak aynı sayıda kod satırı eklememizi gerektiriyordu. Projede kullanılan filtre sayısıyla orantılı olarak program kodunun boyutunun artacağı ortaya çıktı. Devredeki bin filtreden bahsedersek, kodunuza bunları oluşturmak ve yok etmek için dört bin satırlık rutin işlem eklenecektir.

Artık medya aktarıcı kullanan bir programı doğru şekilde nasıl sonlandıracağınızı biliyorsunuz. Aşağıdaki örneklerde, kompaktlık adına bunu yapmayı "unutacağım". Ama unutmayacaksın değil mi?

Medya aktarıcının geliştiricileri, devreleri monte ederken/demontaj ederken filtrelerin manipülasyonunu kolaylaştıracak yazılım araçları sağlamadı. Bununla birlikte, devreye hızlı bir şekilde filtre takmanıza/çıkarmanıza olanak tanıyan bir yardımcı da mevcuttur.

Örneklerimizdeki filtre sayısı birkaç düzineyi aştığında bu sorunu çözmeye daha sonra döneceğiz.

Sonraki Makale Sinyal seviye ölçer devresi kuracağız ve ölçüm sonucunu filtreden nasıl okuyacağımızı öğreneceğiz. Ölçüm doğruluğunu değerlendirelim.

Kaynak: habr.com

Yorum ekle