Istraživanje Mediastreamer2 VoIP motora. Dio 3

Materijal članka je preuzet sa mog zen kanal.

Istraživanje Mediastreamer2 VoIP motora. Dio 3

Poboljšanje primjera generatora tona

U prethodnom članak Napisali smo aplikaciju za generator tona i koristili je za izdvajanje zvuka iz zvučnika računara. Sada ćemo primijetiti da naš program ne vraća memoriju nazad u hrpu kada završi. Vrijeme je da razjasnimo ovo pitanje.

Nakon što nam više ne treba kolo, oslobađanje memorije bi trebalo početi zaustavljanjem cjevovoda podataka. Da biste to učinili, trebate odspojiti izvor sata i tiker iz kola pomoću funkcije ms_ticker_detach(). U našem slučaju, moramo odspojiti ticker sa ulaza filtera voidsource:

ms_ticker_detach(ticker, voidsource)

Usput, nakon zaustavljanja transportera, možemo promijeniti njegov krug i vratiti ga u rad, ponovo povezujući tiker.

Sada ga možemo ukloniti pomoću funkcije ms_ticker_destroy():

ms_ticker_destroy(ticker)

Transporter je stao i možemo početi da rastavljamo njegove dijelove, odvajajući filtere. Da biste to učinili, koristite funkciju ms_filter_unlink():

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

svrha argumenata je ista kao i za funkciju ms_filter_link().

Sada odvojene filtere uklanjamo pomoću ms_filter_destroy():

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

Dodavanjem ovih redova u naš primjer, dobićemo da se program ispravno završi, sa stanovišta upravljanja memorijom.

Kao što vidimo, za ispravan završetak programa potrebno je da dodamo približno isti broj linija koda kao na početku, sa prosječno četiri reda koda po filteru. Ispada da će se veličina programskog koda povećati proporcionalno broju filtera koji se koriste u projektu. Ako govorimo o hiljadu filtera u krugu, tada će se vašem kodu dodati četiri hiljade linija rutinskih operacija za njihovo stvaranje i uništavanje.

Sada znate kako ispravno prekinuti program koji koristi medijski streamer. U sljedećim primjerima, radi kompaktnosti, to ću "zaboraviti" učiniti. Ali nećete zaboraviti?

Programeri media streamera nisu obezbijedili softverske alate za olakšavanje manipulacije filterima prilikom sklapanja/rastavljanja kola. Ipak, postoji pomoćnik koji vam omogućava da brzo umetnete/uklonite filter iz kruga.

Na rješavanje ovog problema vratit ćemo se kasnije, kada broj filtera u našim primjerima pređe nekoliko desetina.

Sljedeći članak Sastavit ćemo krug mjerača nivoa signala i naučiti kako očitati rezultat mjerenja iz filtera. Procijenimo tačnost mjerenja.

izvor: www.habr.com

Dodajte komentar