Истражување на VoIP моторот Mediastreamer2. Дел 3

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

Истражување на VoIP моторот Mediastreamer2. Дел 3

Подобрување на примерот на генератор на тонови

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

Откако повеќе нема да ни треба колото, ослободувањето на меморијата треба да започне со запирање на цевководот за податоци. За да го направите ова, треба да го исклучите изворот на часовникот и тикерот од колото користејќи ја функцијата 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);

Со додавање на овие линии на нашиот пример, ќе добиеме правилно завршување на програмата од гледна точка на управување со меморијата.

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

Сега знаете како правилно да прекинете програма што користи медиумски стример. Во следните примери, заради компактност, ќе „заборавам“ да го сторам ова. Но, нема да заборавите?

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

Ќе се вратиме на решавање на ова прашање подоцна, кога бројот на филтри во нашите примери ќе надмине неколку десетици.

Во следниот Член Ќе собереме коло за мерење на нивото на сигналот и ќе научиме како да го читаме резултатот од мерењето од филтерот. Ајде да ја оцениме точноста на мерењето.

Извор: www.habr.com

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