„Mediastreamer2 VoIP“ variklio tyrinėjimas. 3 dalis

Straipsnio medžiaga paimta iš mano zen kanalas.

„Mediastreamer2 VoIP“ variklio tyrinėjimas. 3 dalis

Tonų generatoriaus tobulinimo pavyzdys

Ankstesniame straipsnis Parašėme tonų generatoriaus programą ir panaudojome ją garsui išgauti iš kompiuterio garsiakalbio. Dabar pastebėsime, kad mūsų programa negrąžina atminties į krūvą, kai ji baigiasi. Atėjo laikas išsiaiškinti šį klausimą.

Kai grandinė mums nebereikalinga, atminties atlaisvinimas turėtų prasidėti sustabdžius duomenų srautą. Norėdami tai padaryti, naudodami funkciją turite atjungti laikrodžio šaltinį ir signalą nuo grandinės ms_ticker_detach(). Mūsų atveju turime atjungti svirtį nuo filtro įvesties tuštumos šaltinis:

ms_ticker_detach(ticker, voidsource)

Beje, sustabdę konvejerį, galime pakeisti jo grandinę ir vėl pradėti eksploatuoti, vėl prijungdami tikerį.

Dabar galime jį pašalinti naudodami funkciją ms_ticker_destroy():

ms_ticker_destroy(ticker)

Konvejeris sustojo ir galime pradėti ardyti jo dalis, atjungdami filtrus. Norėdami tai padaryti, naudokite funkciją ms_filter_unlink():

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

argumentų tikslas yra toks pat kaip ir funkcijos ms_filter_link().

Dabar atskirtus filtrus pašaliname naudodami ms_filter_destroy():

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

Pridėję šias eilutes į mūsų pavyzdį, gausime teisingą programos pabaigą atminties valdymo požiūriu.

Kaip matome, norint teisingai užbaigti programą, reikėjo pridėti maždaug tiek pat kodo eilučių, kiek ir pradžioje, o vienam filtrui vidutiniškai tenka keturios kodo eilutės. Pasirodo, kad programos kodo dydis didės proporcingai projekte naudojamų filtrų skaičiui. Jei kalbėsime apie tūkstantį filtrų grandinėje, tada į jūsų kodą bus įtraukti keturi tūkstančiai eilučių įprastų operacijų, skirtų jiems sukurti ir sunaikinti.

Dabar jūs žinote, kaip teisingai nutraukti programą naudojant medijos transliuotoją. Tolesniuose pavyzdžiuose kompaktiškumo dėlei „pamiršiu“ tai padaryti. Bet tu nepamirši?

Media streamer kūrėjai nepateikė programinės įrangos įrankių, palengvinančių manipuliavimą filtrais surenkant / išmontuojant grandines. Nepaisant to, yra pagalbininkas, leidžiantis greitai įdėti/išimti filtrą iš grandinės.

Prie šios problemos sprendimo grįšime vėliau, kai mūsų pavyzdžiuose filtrų skaičius viršys porą dešimčių.

Kitas straipsnis Surinksime signalo lygio matuoklio grandinę ir išmoksime nuskaityti matavimo rezultatą iš filtro. Įvertinkime matavimo tikslumą.

Šaltinis: www.habr.com

Добавить комментарий