Explorarea motorului VoIP Mediastreamer2. Partea 3

Materialul articolului este preluat de pe mine canal zen.

Explorarea motorului VoIP Mediastreamer2. Partea 3

Îmbunătățirea exemplului generatorului de tonuri

În anteriorul articol Am scris o aplicație de generator de tonuri și am folosit-o pentru a extrage sunetul din difuzorul unui computer. Acum vom observa că programul nostru nu returnează memoria înapoi în heap când se termină. Este timpul să clarificăm această problemă.

După ce nu mai avem nevoie de circuit, eliberarea memoriei ar trebui să înceapă prin oprirea conductei de date. Pentru a face acest lucru, trebuie să deconectați sursa ceasului și ticker-ul de la circuit folosind funcția ms_ticker_detach(). În cazul nostru, trebuie să deconectam ticker-ul de la intrarea filtrului voidsource:

ms_ticker_detach(ticker, voidsource)

Apropo, după oprirea transportorului, îi putem schimba circuitul și îl putem pune din nou în funcțiune, conectând din nou tickerul.

Acum îl putem elimina folosind funcția ms_ticker_destroy():

ms_ticker_destroy(ticker)

Transportorul s-a oprit și putem începe să dezasamblam părți ale acestuia, deconectând filtrele. Pentru a face acest lucru, utilizați funcția ms_filter_unlink():

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

scopul argumentelor este același ca și pentru funcție ms_filter_link().

Îndepărtăm filtrele acum separate folosind ms_filter_destroy():

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

Adăugând aceste linii la exemplul nostru, vom obține o terminare corectă a programului din punct de vedere al gestionării memoriei.

După cum putem vedea, finalizarea corectă a programului ne-a impus să adăugăm aproximativ același număr de linii de cod ca la început, cu o medie de patru linii de cod pe filtru. Se pare că dimensiunea codului programului va crește proporțional cu numărul de filtre utilizate în proiect. Dacă vorbim despre o mie de filtre în circuit, atunci patru mii de linii de operațiuni de rutină pentru crearea și distrugerea lor vor fi adăugate codului tău.

Acum știți cum să închideți corect un program care utilizează un streamer media. În următoarele exemple, de dragul compactității, voi „uita” să fac acest lucru. Dar nu vei uita?

Dezvoltatorii streamerului media nu au furnizat instrumente software pentru a facilita manipularea filtrelor la asamblarea/dezasamblarea circuitelor. Cu toate acestea, există un ajutor care vă permite să introduceți/scoateți rapid un filtru din circuit.

Vom reveni la rezolvarea acestei probleme mai târziu, când numărul de filtre din exemplele noastre depășește câteva zeci.

Următorul articol Vom asambla un circuit de măsurare a nivelului de semnal și vom învăța cum să citim rezultatul măsurătorii de la filtru. Să evaluăm precizia măsurării.

Sursa: www.habr.com

Adauga un comentariu