Badamy silnik VoIP Mediastreamer2. Część 3

Materiał artykułu pochodzi z mojego kanału Zen.

Badamy silnik VoIP Mediastreamer2. Część 3

Poprawiamy przykład generatora tonów

W poprzednim artykuł Napisaliśmy aplikację generatora tonów i za jej pomocą wydobyliśmy dźwięk z głośnika komputera. Teraz zwrócimy uwagę na to, że nasz program, kończąc działanie, nie zwraca pamięci z powrotem do sterty. Czas na wyjaśnienie tej kwestii.

Po tym, jak schemat przestanie być potrzebny, zwolnienie pamięci powinno rozpocząć się od zatrzymania potoku danych. Do tego celu trzeba odłączyć od schematu źródło taktowania, tj. ticker, korzystając z funkcji ms_ticker_detach(). W naszym przypadku musimy odłączyć ticker od wejścia filtra voidsource:

ms_ticker_detach(ticker, voidsource)

Zresztą, po zatrzymaniu potoku możemy zmienić jego schemat i ponownie go uruchomić, znów podłączając ticker.

Teraz możemy go usunąć, korzystając z funkcji ms_ticker_destroy():

ms_ticker_destroy(ticker)

Potok jest zatrzymany i możemy przystąpić do jego rozbiórki, odłączając filtry. Używamy do tego funkcji ms_filter_unlink():

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

przeznaczenie argumentów jest takie samo jak w funkcji ms_filter_link().

Usuwamy teraz, już rozłączone, filtry za pomocą ms_filter_destroy():

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

Dodając te linie do naszego przykładu, otrzymamy poprawne, z perspektywy zarządzania pamięcią, zakończenie programu.

Jak widać, poprawne zakończenie programu wymagało od nas dodania mniej więcej tylu samych linii kodu, co na początku, przy czym średnio na każdy filtr przypadały cztery linie kodu. Wynika z tego, że rozmiar kodu programu wzrośnie proporcjonalnie do liczby użytych w projekcie filtrów. Mówiąc o tysiącu filtrów w schemacie, do twojego kodu zostanie dodanych cztery tysiące linii rutynowych operacji związanych z tworzeniem i ich usuwaniem.

Teraz wiesz, jak poprawnie zakończyć program korzystający z mediastreamera. W następnych przykładach, dla zwięzłości, będę "zapominał" o tym. Ale ty nie zapomnisz?

Twórcy mediastreamera nie przewidzieli programowych środków ułatwiających operacje na filtrach podczas budowy/rozbiórki schematów. Niemniej jednak, istnieje pomocnik, który pozwala szybko wstawiać/wyjmować filtr ze schematu.

Powrócimy do rozwiązania tej kwestii później, gdy liczba filtrów w naszych przykładach przekroczy kilka dziesiątek.

W następnej artykuł Zebersy schemat miernika poziomu sygnału i nauczymy się odczytywać wynik pomiaru z filtra. Ocenimy dokładność pomiaru.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster