Istraživanje Mediastreamer2 VoIP mehanizma. dio 3

Materijal članka preuzet je iz mog zen kanal.

Istraživanje Mediastreamer2 VoIP mehanizma. dio 3

Primjer poboljšanja generatora tona

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

Nakon što nam sklop više ne treba, oslobađanje memorije trebalo bi započeti zaustavljanjem podatkovnog cjevovoda. Da biste to učinili, morate odspojiti izvor sata i ticker iz kruga pomoću funkcije ms_ticker_detach(). U našem slučaju, moramo odspojiti ticker s ulaza filtera voidsource:

ms_ticker_detach(ticker, voidsource)

Usput, nakon zaustavljanja transportera, možemo promijeniti njegov krug i vratiti ga u rad, ponovno spajajući oznaku.

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

ms_ticker_destroy(ticker)

Transporter je stao i možemo početi rastavljati njegove dijelove, odvajajući filtere. Da biste to učinili, upotrijebite 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().

Uklanjamo sada odvojene filtre pomoću ms_filter_destroy():

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

Dodavanjem ovih redaka našem primjeru dobit ćemo ispravan završetak programa sa stajališta upravljanja memorijom.

Kao što vidimo, ispravno dovršenje programa zahtijevalo je da dodamo otprilike isti broj linija koda kao na početku, s prosječno četiri linije koda po filteru. Ispada da će se veličina programskog koda povećavati proporcionalno broju filtara koji se koriste u projektu. Ako govorimo o tisuću filtera u krugu, tada će vašem kodu biti dodano četiri tisuće redaka rutinskih operacija za njihovo stvaranje i uništavanje.

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

Programeri media streamera nisu osigurali softverske alate za olakšavanje manipulacije filtrima prilikom sastavljanja/rastavljanja sklopova. Unatoč tome, postoji pomoćnik koji vam omogućuje brzo umetanje/uklanjanje filtra iz kruga.

Rješavanju ovog problema vratit ćemo se kasnije, kada broj filtara u našim primjerima prijeđe nekoliko desetaka.

Sljedeći članak Sastavit ćemo krug mjerača razine signala i naučiti očitati rezultat mjerenja s filtra. Procijenimo točnost mjerenja.

Izvor: www.habr.com

Dodajte komentar