De Mediastreamer2 VoIP-engine verkennen. Deel 3

Het materiaal van het artikel is afkomstig uit mijn zen-kanaal.

De Mediastreamer2 VoIP-engine verkennen. Deel 3

Verbetering van het voorbeeld van de toongenerator

In de vorige статье We schreven een toongeneratortoepassing en gebruikten deze om geluid uit een computerluidspreker te halen. Nu zullen we merken dat ons programma het geheugen niet terugzet naar de heap als het klaar is. Het is tijd om dit probleem op te helderen.

Nadat we het circuit niet langer nodig hebben, zou het vrijmaken van geheugen moeten beginnen met het stoppen van de datapijplijn. Om dit te doen, moet u de klokbron en ticker loskoppelen van het circuit met behulp van de functie ms_ticker_detach(). In ons geval moeten we de ticker loskoppelen van de filteringang leegbron:

ms_ticker_detach(ticker, voidsource)

Trouwens, na het stoppen van de transportband kunnen we het circuit veranderen en weer in gebruik nemen, waarbij we de ticker opnieuw verbinden.

Nu kunnen we het verwijderen met behulp van de functie ms_ticker_destroy():

ms_ticker_destroy(ticker)

De transportband is gestopt en we kunnen beginnen met het demonteren van delen ervan, waarbij we de filters loskoppelen. Gebruik hiervoor de functie ms_filter_unlink():

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

het doel van de argumenten is hetzelfde als voor de functie ms_filter_link().

We verwijderen de nu gescheiden filters met behulp van ms_filter_destroy():

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

Door deze regels aan ons voorbeeld toe te voegen, verkrijgen we een correcte programmabeëindiging vanuit het oogpunt van geheugenbeheer.

Zoals we kunnen zien, vereiste de correcte voltooiing van het programma dat we ongeveer hetzelfde aantal regels code moesten toevoegen als aan het begin, met een gemiddelde van vier regels code per filter. Het blijkt dat de omvang van de programmacode zal toenemen in verhouding tot het aantal filters dat in het project wordt gebruikt. Als we het hebben over duizend filters in het circuit, dan worden vierduizend regels routinebewerkingen voor het maken en vernietigen ervan aan uw code toegevoegd.

Nu weet u hoe u een programma dat gebruikmaakt van een mediastreamer correct afsluit. In de volgende voorbeelden zal ik omwille van de compactheid “vergeten” dit te doen. Maar je zult het niet vergeten?

De ontwikkelaars van de mediastreamer hebben geen softwaretools geleverd om de manipulatie van filters te vergemakkelijken bij het monteren/demonteren van circuits. Toch is er een helper waarmee je snel een filter in het circuit kunt plaatsen/verwijderen.

We zullen later terugkomen op het oplossen van dit probleem, wanneer het aantal filters in onze voorbeelden een paar dozijn overschrijdt.

Volgende статье We zullen een signaalniveaumetercircuit samenstellen en leren hoe we het meetresultaat van het filter kunnen aflezen. Laten we de meetnauwkeurigheid evalueren.

Bron: www.habr.com

Voeg een reactie