Utforsker Mediastreamer2 VoIP-motoren. Del 3

Stoffet til artikkelen er hentet fra min zen-kanal.

Utforsker Mediastreamer2 VoIP-motoren. Del 3

Forbedre eksempelet på tonegeneratoren

I forrige artikkel Vi skrev en tonegeneratorapplikasjon og brukte den til å trekke ut lyd fra en datamaskinhøyttaler. Nå vil vi legge merke til at programmet vårt ikke returnerer minnet tilbake til haugen når det er ferdig. Det er på tide å avklare dette problemet.

Etter at vi ikke lenger trenger kretsen, bør frigjøring av minne begynne med å stoppe datarørledningen. For å gjøre dette må du koble klokkekilden og tickeren fra kretsen ved å bruke funksjonen ms_ticker_detach(). I vårt tilfelle må vi koble tickeren fra filterinngangen voidsource:

ms_ticker_detach(ticker, voidsource)

Forresten, etter å ha stoppet transportøren, kan vi endre kretsen og sette den i drift igjen, igjen koble tickeren.

Nå kan vi fjerne den ved å bruke funksjonen ms_ticker_destroy():

ms_ticker_destroy(ticker)

Transportøren har stoppet og vi kan begynne å demontere deler av den og koble fra filtrene. For å gjøre dette, bruk funksjonen ms_filter_unlink():

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

formålet med argumentene er det samme som for funksjonen ms_filter_link().

Vi fjerner de nå separerte filtrene ved hjelp av ms_filter_destroy():

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

Ved å legge til disse linjene i vårt eksempel vil vi oppnå en korrekt programavslutning med tanke på minnehåndtering.

Som vi kan se, krevde riktig fullføring av programmet at vi la til omtrent samme antall kodelinjer som i begynnelsen, med et gjennomsnitt på fire kodelinjer per filter. Det viser seg at størrelsen på programkoden vil øke proporsjonalt med antall filtre som brukes i prosjektet. Hvis vi snakker om tusen filtre i kretsen, vil fire tusen linjer med rutineoperasjoner for å lage og ødelegge dem bli lagt til koden din.

Nå vet du hvordan du avslutter et program på riktig måte ved hjelp av en mediastreamer. I de følgende eksemplene, for kompakthetens skyld, vil jeg "glemme" å gjøre dette. Men du vil ikke glemme?

Utviklerne av mediastreameren ga ikke programvareverktøy for å lette manipulering av filtre ved montering/demontering av kretser. Likevel finnes det en hjelper som lar deg raskt sette inn/fjerne et filter fra kretsen.

Vi kommer tilbake til å løse dette problemet senere, når antallet filtre i eksemplene våre overstiger et par dusin.

Neste artikkel Vi skal sette sammen en signalnivåmålerkrets og lære å lese av måleresultatet fra filteret. La oss evaluere målenøyaktigheten.

Kilde: www.habr.com

Legg til en kommentar