Mediastreamer2 VoIP programmas izpēte. 3. daļa

Raksta materiāls ņemts no mana zen kanāls.

Mediastreamer2 VoIP programmas izpēte. 3. daļa

Toņu ģeneratora uzlabošanas piemērs

Iepriekšējā raksts Mēs uzrakstījām toņu ģeneratora lietojumprogrammu un izmantojām to, lai iegūtu skaņu no datora skaļruņa. Tagad mēs pamanīsim, ka mūsu programma neatgriež atmiņu atpakaļ kaudzē, kad tā ir pabeigta. Ir pienācis laiks noskaidrot šo jautājumu.

Kad ķēde mums vairs nav vajadzīga, atmiņas atbrīvošana jāsāk, apturot datu cauruļvadu. Lai to izdarītu, jums ir jāatvieno pulksteņa avots un svārsts no ķēdes, izmantojot funkciju ms_ticker_detach(). Mūsu gadījumā mums ir jāatvieno svārsts no filtra ieejas tukšais avots:

ms_ticker_detach(ticker, voidsource)

Starp citu, pēc konveijera apturēšanas mēs varam nomainīt tā ķēdi un nodot to atkal ekspluatācijā, atkal pieslēdzot sviru.

Tagad mēs varam to noņemt, izmantojot funkciju ms_ticker_destroy():

ms_ticker_destroy(ticker)

Konveijers ir apstājies, un mēs varam sākt izjaukt tā daļas, atvienojot filtrus. Lai to izdarītu, izmantojiet funkciju ms_filter_unlink():

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

argumentu mērķis ir tāds pats kā funkcijai ms_filter_link().

Mēs noņemam tagad atdalītos filtrus, izmantojot ms_filter_destroy():

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

Pievienojot šīs rindas mūsu piemēram, mēs panāksim, ka programma tiks pareizi pārtraukta no atmiņas pārvaldības viedokļa.

Kā redzam, pareizai programmas pabeigšanai mums bija jāpievieno aptuveni tāds pats koda rindiņu skaits kā sākumā, vidēji vienam filtram četras koda rindiņas. Izrādās, ka programmas koda izmērs pieaugs proporcionāli projektā izmantoto filtru skaitam. Ja mēs runājam par tūkstoš filtriem ķēdē, tad jūsu kodam tiks pievienoti četri tūkstoši parasto darbību rindu to izveidošanai un iznīcināšanai.

Tagad jūs zināt, kā pareizi pārtraukt programmu, kas izmanto multivides straumētāju. Turpmākajos piemēros kompaktuma labad es “aizmirsīšu” to izdarīt. Bet vai neaizmirsīsi?

Multivides straumētāja izstrādātāji nenodrošināja programmatūras rīkus, kas atvieglotu manipulācijas ar filtriem, montējot/izjaucot shēmas. Neskatoties uz to, ir palīgs, kas ļauj ātri ievietot/izņemt filtru no ķēdes.

Mēs atgriezīsimies pie šīs problēmas risināšanas vēlāk, kad mūsu piemēros esošo filtru skaits pārsniegs pāris desmitus.

Nākamais raksts Mēs saliksim signāla līmeņa mērītāja ķēdi un iemācīsimies nolasīt mērījuma rezultātu no filtra. Novērtēsim mērījumu precizitāti.

Avots: www.habr.com

Pievieno komentāru