Poznawanie silnika Mediastreamer2 VoIP. Część 3

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

Poznawanie silnika Mediastreamer2 VoIP. Część 3

Ulepszanie przykładu generatora tonów

W poprzednim Artykuł Napisaliśmy aplikację generującą tony i użyliśmy jej do wyodrębnienia dźwięku z głośnika komputera. Teraz zauważymy, że nasz program po zakończeniu nie zwraca pamięci z powrotem na stertę. Najwyższy czas wyjaśnić tę kwestię.

Gdy obwód nie będzie już nam potrzebny, zwalnianie pamięci należy rozpocząć od zatrzymania potoku danych. Aby to zrobić, należy odłączyć źródło zegara i ticker od obwodu za pomocą funkcji ms_ticker_detach(). W naszym przypadku musimy odłączyć ticker od wejścia filtra puste źródło:

ms_ticker_detach(ticker, voidsource)

Przy okazji, po zatrzymaniu przenośnika możemy zmienić jego obwód i ponownie uruchomić, ponownie podłączając ticker.

Teraz możemy go usunąć za pomocą funkcji ms_ticker_destroy():

ms_ticker_destroy(ticker)

Przenośnik się zatrzymał i możemy przystąpić do demontażu jego części, odłączając filtry. Aby to zrobić, użyj funkcji ms_filter_unlink():

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

cel argumentów jest taki sam jak w przypadku funkcji ms_filter_link().

Usuwamy teraz oddzielone 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 uzyskamy prawidłowe zakończenie programu z punktu widzenia zarządzania pamięcią.

Jak widać, poprawne zakończenie programu wymagało od nas dodania w przybliżeniu takiej samej liczby linii kodu jak na początku, średnio po cztery linie kodu na filtr. Okazuje się, że rozmiar kodu programu będzie rósł proporcjonalnie do liczby filtrów zastosowanych w projekcie. Jeśli mówimy o tysiącu filtrów w obwodzie, to do Twojego kodu zostaną dodane cztery tysiące linii rutynowych operacji ich tworzenia i niszczenia.

Teraz wiesz, jak poprawnie zakończyć program korzystający ze streamera multimediów. W poniższych przykładach, dla zachowania zwartości, „zapomnę” to zrobić. Ale nie zapomnisz?

Twórcy streamera multimedialnego nie udostępnili narzędzi programowych ułatwiających manipulację filtrami podczas montażu/demontażu obwodów. Niemniej jednak istnieje pomocnik, który pozwala szybko włożyć/wyjąć filtr z obwodu.

Do rozwiązania tego problemu powrócimy później, gdy liczba filtrów w naszych przykładach przekroczy kilkadziesiąt.

Następny Artykuł Złożymy obwód miernika poziomu sygnału i nauczymy się odczytywać wynik pomiaru z filtra. Oceńmy dokładność pomiaru.

Źródło: www.habr.com

Dodaj komentarz