Udforskning af Mediastreamer2 VoIP-motoren. Del 3

Artiklens materiale er hentet fra min zen kanal.

Udforskning af Mediastreamer2 VoIP-motoren. Del 3

Forbedring af tonegeneratoreksemplet

I det foregående artiklen Vi skrev et tonegeneratorprogram og brugte det til at udtrække lyd fra en computerhøjttaler. Nu vil vi bemærke, at vores program ikke returnerer hukommelsen tilbage til bunken, når det er færdigt. Det er på tide at afklare dette spørgsmål.

Når vi ikke længere har brug for kredsløbet, bør frigørelse af hukommelse begynde med at stoppe datapipelinen. For at gøre dette skal du afbryde urkilden og tickeren fra kredsløbet ved hjælp af funktionen ms_ticker_detach(). I vores tilfælde skal vi afbryde tickeren fra filterindgangen ugyldig kilde:

ms_ticker_detach(ticker, voidsource)

Forresten, efter at have stoppet transportøren, kan vi ændre dens kredsløb og sætte den i drift igen, igen forbinde tickeren.

Nu kan vi fjerne det ved hjælp af funktionen ms_ticker_destroy():

ms_ticker_destroy(ticker)

Transportøren er stoppet, og vi kan begynde at adskille dele af den og afmontere filtrene. For at gøre dette skal du bruge funktionen ms_filter_unlink():

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

formålet med argumenterne er det samme som for funktionen ms_filter_link().

Vi fjerner de nu adskilte filtre vha ms_filter_destroy():

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

Ved at tilføje disse linjer til vores eksempel vil vi opnå en korrekt programafslutning ud fra et hukommelsesstyringssynspunkt.

Som vi kan se, krævede den korrekte afslutning af programmet, at vi tilføjede omtrent det samme antal linjer kode som i begyndelsen, med et gennemsnit på fire linjer kode pr. filter. Det viser sig, at størrelsen af ​​programkoden vil stige i forhold til antallet af filtre, der bruges i projektet. Hvis vi taler om tusind filtre i kredsløbet, vil fire tusinde linjer med rutineoperationer til oprettelse og ødelæggelse blive tilføjet til din kode.

Nu ved du, hvordan du korrekt afslutter et program, der bruger en mediestreamer. I de følgende eksempler vil jeg for kompakthedens skyld "glemme" at gøre dette. Men du glemmer det ikke?

Udviklerne af mediestreameren leverede ikke softwareværktøjer til at lette manipulation af filtre ved samling/adskillelse af kredsløb. Ikke desto mindre er der en hjælper, der giver dig mulighed for hurtigt at indsætte/fjerne et filter fra kredsløbet.

Vi vender tilbage til at løse dette problem senere, når antallet af filtre i vores eksempler overstiger et par dusin.

Næste artiklen Vi vil samle et signalniveaumålerkredsløb og lære at aflæse måleresultatet fra filteret. Lad os evaluere målenøjagtigheden.

Kilde: www.habr.com

Tilføj en kommentar