Истраживање Медиастреамер2 ВоИП механизма. Део 3

Материјал чланка је преузет са мог зен канал.

Истраживање Медиастреамер2 ВоИП механизма. Део 3

Побољшање примера генератора тона

У претходном Чланак Написали смо апликацију за генератор тона и користили је за издвајање звука из звучника рачунара. Сада ћемо приметити да наш програм не враћа меморију назад у хрпу када се заврши. Време је да разјаснимо ово питање.

Након што нам коло више није потребно, ослобађање меморије би требало да почне заустављањем цевовода података. Да бисте то урадили, потребно је да искључите извор сата и тикер из кола помоћу функције мс_тицкер_детацх(). У нашем случају, морамо искључити ознаку са улаза филтера воидсоурце:

ms_ticker_detach(ticker, voidsource)

Узгред, након заустављања транспортера, можемо променити његово коло и вратити га у рад, поново повезујући тикер.

Сада га можемо уклонити помоћу функције мс_тицкер_дестрои():

ms_ticker_destroy(ticker)

Транспортер је стао и можемо да почнемо да растављамо његове делове, одвајајући филтере. Да бисте то урадили, користите функцију мс_филтер_унлинк():

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

сврха аргумената је иста као и за функцију мс_филтер_линк().

Уклањамо сада одвојене филтере помоћу мс_филтер_дестрои():

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

Додавањем ових редова нашем примеру, добићемо исправан завршетак програма са становишта управљања меморијом.

Као што видимо, коректан завршетак програма захтевао је да додамо приближно исти број редова кода као на почетку, са просечно четири реда кода по филтеру. Испоставило се да ће се величина програмског кода повећати пропорционално броју филтера који се користе у пројекту. Ако говоримо о хиљаду филтера у колу, онда ће у ваш код бити додато четири хиљаде линија рутинских операција за њихово креирање и уништавање.

Сада знате како правилно прекинути програм који користи медијски стример. У следећим примерима, ради компактности, ја ћу то „заборавити“ да урадим. Али нећете заборавити?

Програмери медиа стреамера нису обезбедили софтверске алате за олакшавање манипулације филтерима приликом склапања/растављања кола. Ипак, постоји помоћник који вам омогућава да брзо убаците/уклоните филтер из кола.

Решавању овог проблема ћемо се вратити касније, када број филтера у нашим примерима пређе неколико десетина.

Следећи Чланак Саставићемо коло мерача нивоа сигнала и научити како да очитамо резултат мерења из филтера. Хајде да проценимо тачност мерења.

Извор: ввв.хабр.цом

Додај коментар