Paggalugad sa Mediastreamer2 VoIP engine. Bahagi 3

Ang materyal ng artikulo ay kinuha mula sa aking zen channel.

Paggalugad sa Mediastreamer2 VoIP engine. Bahagi 3

Pagpapabuti ng halimbawa ng tone generator

Sa nakaraan Artikulo Nagsulat kami ng application ng tone generator at ginamit ito para kumuha ng tunog mula sa isang computer speaker. Ngayon ay mapapansin namin na ang aming programa ay hindi nagbabalik ng memorya pabalik sa heap kapag natapos na ito. Panahon na para linawin ang isyung ito.

Pagkatapos namin na hindi na kailangan ang circuit, ang pagpapalaya ng memorya ay dapat magsimula sa pamamagitan ng paghinto sa pipeline ng data. Upang gawin ito, kailangan mong idiskonekta ang pinagmulan ng orasan at ticker mula sa circuit gamit ang function ms_ticker_detach(). Sa aming kaso, dapat naming idiskonekta ang ticker mula sa input ng filter voidsource:

ms_ticker_detach(ticker, voidsource)

Sa pamamagitan ng paraan, pagkatapos ihinto ang conveyor, maaari naming baguhin ang circuit nito at ibalik ito sa operasyon, muling kumonekta sa ticker.

Ngayon ay maaari na nating alisin ito gamit ang function ms_ticker_destroy():

ms_ticker_destroy(ticker)

Ang conveyor ay huminto at maaari naming simulan upang i-disassemble ang mga bahagi nito, idiskonekta ang mga filter. Upang gawin ito, gamitin ang function ms_filter_unlink():

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

ang layunin ng mga argumento ay kapareho ng para sa function ms_filter_link().

Aalisin namin ang ngayon na pinaghihiwalay na mga filter gamit ms_filter_destroy():

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

Sa pamamagitan ng pagdaragdag ng mga linyang ito sa aming halimbawa, makakakuha kami ng tamang pagwawakas ng programa mula sa punto ng view ng pamamahala ng memorya.

Tulad ng nakikita natin, ang tamang pagkumpleto ng programa ay nangangailangan sa amin na magdagdag ng humigit-kumulang sa parehong bilang ng mga linya ng code tulad ng sa simula, na may average na apat na linya ng code bawat filter. Lumalabas na ang laki ng program code ay tataas sa proporsyon sa bilang ng mga filter na ginamit sa proyekto. Kung pinag-uusapan natin ang tungkol sa isang libong mga filter sa circuit, pagkatapos ay apat na libong linya ng mga nakagawiang operasyon para sa paglikha at pagsira sa mga ito ay idaragdag sa iyong code.

Ngayon alam mo na kung paano wastong wakasan ang isang program na gumagamit ng media streamer. Sa mga sumusunod na halimbawa, para sa kapakanan ng pagiging compact, "makakalimutan" kong gawin ito. Pero hindi mo malilimutan?

Ang mga developer ng media streamer ay hindi nagbigay ng mga tool sa software upang mapadali ang pagmamanipula ng mga filter kapag nag-assemble/nagdidisassemble ng mga circuit. Gayunpaman, mayroong isang katulong na nagbibigay-daan sa iyo upang mabilis na magpasok / mag-alis ng isang filter mula sa circuit.

Babalik kami sa paglutas sa isyung ito sa ibang pagkakataon, kapag ang bilang ng mga filter sa aming mga halimbawa ay lumampas sa ilang dosena.

Susunod Artikulo Magbubuo kami ng signal level meter circuit at matutunan kung paano basahin ang resulta ng pagsukat mula sa filter. Suriin natin ang katumpakan ng pagsukat.

Pinagmulan: www.habr.com

Magdagdag ng komento