Raziskovanje mehanizma VoIP Mediastreamer2. 3. del

Gradivo članka je vzeto iz mojega zen kanal.

Raziskovanje mehanizma VoIP Mediastreamer2. 3. del

Primer izboljšave generatorja tonov

V prejšnjem članek Napisali smo aplikacijo za generator tonov in jo uporabili za pridobivanje zvoka iz računalniškega zvočnika. Zdaj bomo opazili, da naš program ne vrne pomnilnika nazaj v kopico, ko se konča. Čas je, da to vprašanje razjasnimo.

Ko vezja ne potrebujemo več, se mora sproščanje pomnilnika začeti z zaustavitvijo podatkovnega cevovoda. Če želite to narediti, morate s funkcijo odklopiti vir ure in ticker iz vezja ms_ticker_detach(). V našem primeru moramo odklopiti ticker z vhoda filtra voidsource:

ms_ticker_detach(ticker, voidsource)

Mimogrede, po zaustavitvi tekočega traku lahko spremenimo njegovo vezje in ga ponovno vključimo v delovanje, pri čemer ponovno povežemo ticker.

Zdaj ga lahko odstranimo s funkcijo ms_ticker_destroy():

ms_ticker_destroy(ticker)

Tekoči trak se je ustavil in lahko začnemo razstavljati njegove dele, odklopiti filtre. Če želite to narediti, uporabite funkcijo ms_filter_unlink():

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

namen argumentov je enak kot pri funkciji ms_filter_link().

Zdaj ločene filtre odstranimo z uporabo ms_filter_destroy():

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

Z dodajanjem teh vrstic v naš primer, bomo dobili pravilen zaključek programa z vidika upravljanja pomnilnika.

Kot lahko vidimo, smo za pravilen zaključek programa morali dodati približno enako število vrstic kode kot na začetku, s povprečno štirimi vrsticami kode na filter. Izkazalo se je, da se bo velikost programske kode povečevala sorazmerno s številom uporabljenih filtrov v projektu. Če govorimo o tisoč filtrih v vezju, bo vaši kodi dodanih štiri tisoč vrstic rutinskih operacij za njihovo ustvarjanje in uničenje.

Zdaj veste, kako pravilno prekiniti program, ki uporablja medijski pretočni program. V naslednjih primerih bom zaradi kompaktnosti to »pozabil«. Ampak ne boš pozabil?

Razvijalci medijskega streamerja niso zagotovili programskih orodij za lažjo manipulacijo filtrov pri sestavljanju/razstavljanju vezij. Kljub temu obstaja pomočnik, ki vam omogoča hitro vstavljanje/odstranjevanje filtra iz vezja.

K reševanju te težave se bomo vrnili kasneje, ko bo število filtrov v naših primerih preseglo nekaj ducatov.

Naslednji članek Sestavili bomo vezje merilnika nivoja signala in se naučili odčitati rezultat meritve s filtra. Ocenimo natančnost meritev.

Vir: www.habr.com

Dodaj komentar