Материал статьи взят из моего дзен-канал .
Улучшение примера тон-генератора
В предыдущем статья Мы написали приложение тон-генератора и использовали его для извлечения звука из динамика компьютера.Теперь мы заметим, что наша программа не возвращает память обратно в кучу после завершения.
Пришло время внести ясность в этот вопрос.
После того как схема нам больше не нужна, освобождение памяти следует начать с остановки конвейера данных.
Для этого необходимо отключить источник тактирования и тикер от схемы с помощью функции ms_ticker_detach() .
В нашем случае мы должны отключить тикер от входа фильтра.
источник пустоты :
Кстати, после остановки конвейера мы можем изменить его схему и снова запустить его в работу, снова подключив тикер.ms_ticker_detach(ticker, voidsource)
Теперь мы можем удалить его с помощью функции ms_ticker_destroy() : ms_ticker_destroy(ticker)
Конвейер остановился и мы можем начать разбирать его части, отсоединяя фильтры.
Для этого используйте функцию ms_filter_unlink() : ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
назначение аргументов такое же, как и для функции ms_filter_link() .
Мы удаляем теперь разделенные фильтры, используя ms_filter_destroy() : ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Добавив эти строки в наш пример, мы получим корректное завершение программы с точки зрения управления памятью.
Как мы видим, для корректного завершения программы нам потребовалось добавить примерно то же количество строк кода, что и в начале, в среднем по четыре строки кода на фильтр.
Получается, что размер программного кода будет увеличиваться пропорционально количеству используемых в проекте фильтров.
Если говорить о тысяче фильтров в схеме, то в ваш код добавятся четыре тысячи строк рутинных операций по их созданию и уничтожению.
Теперь вы знаете, как правильно завершить работу программы, использующей медиастример.
В следующих примерах я ради компактности «забуду» это сделать.
Но ты не забудешь? Разработчики медиастримера не предусмотрели программных средств, облегчающих манипуляции с фильтрами при сборке/разборке схем.
Тем не менее, есть помощник, позволяющий быстро вставить/вынуть фильтр из схемы.
К решению этого вопроса мы вернёмся позже, когда количество фильтров в наших примерах превысит пару десятков.
В следующий статья Соберем схему измерителя уровня сигнала и научимся считывать результат измерения с фильтра.
Оценим точность измерений.
Теги: #*nix #разработка Linux #с открытым исходным кодом #C++ #Системный анализ и проектирование #voip #voip #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer #mediastreamer
-
Растущая Популярность Сделки Дня В Монреале
19 Oct, 24 -
Защита Zimbra Ose От Перебора И Dos-Атак
19 Oct, 24 -
Управление Информационными Потоками
19 Oct, 24