Wir untersuchen die VoIP-Engine Mediastreamer2. Teil 3

Der Artikelinhalt stammt von meinem Zen-Kanal.

Wir untersuchen die VoIP-Engine Mediastreamer2. Teil 3

Wir verbessern das Beispiel des Tondetektors

Im vorherigen Artikel Wir haben eine Anwendung für den Tondetektor geschrieben und damit den Ton vom Computerlautsprecher extrahiert. Jetzt wollen wir darauf achten, dass unser Programm, wenn es seine Arbeit beendet, den Speicher nicht zurück in den Heap gibt. Es ist Zeit, Klarheit in dieser Angelegenheit zu schaffen.

Nachdem das Schema für uns nicht mehr benötigt wird, muss die Speicherfreigabe mit dem Stoppen der Datenpipeline beginnen. Dafür muss die Taktquelle vom Schema über die Funktion ms_ticker_detach()getrennt werden. In unserem Fall müssen wir den Ticker vom Eingang des Filters voidsource:

ms_ticker_detach(ticker, voidsource)

Übrigens können wir nach dem Stoppen der Pipeline ihr Schema ändern und sie erneut aktivieren, indem wir den Ticker wieder anschließen.

Jetzt können wir ihn entfernen, indem wir die Funktion ms_ticker_destroy():

ms_ticker_destroy(ticker)

Die Pipeline ist gestoppt und wir können mit dem Zerlegen ihrer Teile beginnen, indem wir die Filter voneinander trennen. Dafür verwenden wir die Funktion ms_filter_unlink():

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

Die Argumente haben die gleiche Aufgabe wie die Funktion ms_filter_link().

Wir entfernen nun die bereits entkoppelten Filter mithilfe von ms_filter_destroy():

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

Wenn wir diese Zeilen zu unserem Beispiel hinzufügen, erhalten wir einen korrekten Programmabschluss in Bezug auf die Speicherverwaltung.

Wie wir sehen, hat der korrekte Abschluss des Programms von uns verlangt, etwa ebenso viele Zeilen Code hinzuzufügen, wie wir zu Beginn hatten, wobei im Durchschnitt für jeden Filter vier Zeilen Code erforderlich waren. Das bedeutet, dass die Größe des Programmcodes proportional zur Anzahl der im Projekt verwendeten Filter zunehmen wird. Wenn man von tausend Filtern im Schema spricht, kommen viertausend Zeilen routinemäßiger Operationen zur Erstellung und Zerstörung zu Ihrem Code hinzu.

Jetzt wissen Sie, wie man ein Programm, das Mediastreamer verwendet, korrekt abschließt. In den nächsten Beispielen werde ich, um die Darstellung zu komprimieren, "vergessen", dies zu tun. Aber Sie werden es nicht vergessen, oder?

Die Entwickler des Mediastreamers haben keine Softwaremittel zur Erleichterung der Manipulationen mit Filtern beim Zusammenbauen/Zerlegen von Schemas vorgesehen. Dennoch gibt es einen Helfer, der es ermöglicht, Filter schnell in das Schema einzufügen oder herauszunehmen.

Wir werden später zu dieser Frage zurückkehren, wenn die Anzahl der Filter in unseren Beispielen mehrere Dutzend überschreitet.

Im nächsten Artikel Wir werden das Schema des Signalpegeltesters erstellen und lernen, das Messergebnis aus dem Filter abzulesen. Wir werden die Messgenauigkeit bewerten.

Quelle: habr.com

60GB SSD 8Gb DDR4