Entdecken Sie die VoIP-Engine von Mediastreamer2. Teil 3

Das Material des Artikels stammt von mir Zen-Kanal.

Entdecken Sie die VoIP-Engine von Mediastreamer2. Teil 3

Beispiel: Verbesserung des Tongenerators

Im vorigen Artikel Wir haben eine Tongeneratoranwendung geschrieben und damit den Ton aus einem Computerlautsprecher extrahiert. Jetzt werden wir feststellen, dass unser Programm nach Abschluss keinen Speicher auf den Heap zurückgibt. Es ist Zeit, dieses Problem zu klären.

Nachdem wir die Schaltung nicht mehr benötigen, sollte die Speicherfreigabe mit dem Stoppen der Datenpipeline beginnen. Dazu müssen Sie die Taktquelle und den Ticker über die Funktion vom Stromkreis trennen ms_ticker_detach(). In unserem Fall müssen wir den Ticker vom Filtereingang trennen Leerequelle:

ms_ticker_detach(ticker, voidsource)

Übrigens können wir nach dem Stoppen des Förderers seinen Kreislauf ändern und ihn wieder in Betrieb nehmen, indem wir den Ticker wieder anschließen.

Jetzt können wir es mit der Funktion entfernen ms_ticker_destroy():

ms_ticker_destroy(ticker)

Das Förderband ist angehalten und wir können mit der Demontage von Teilen beginnen und die Filter trennen. Nutzen Sie dazu die Funktion ms_filter_unlink():

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

Der Zweck der Argumente ist derselbe wie für die Funktion ms_filter_link().

Wir entfernen die nun getrennten Filter mit ms_filter_destroy():

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

Durch das Hinzufügen dieser Zeilen zu unserem Beispiel erhalten wir aus Sicht der Speicherverwaltung einen korrekten Programmabbruch.

Wie wir sehen können, mussten wir für die korrekte Fertigstellung des Programms ungefähr die gleiche Anzahl an Codezeilen wie am Anfang hinzufügen, mit durchschnittlich vier Codezeilen pro Filter. Es stellt sich heraus, dass die Größe des Programmcodes proportional zur Anzahl der im Projekt verwendeten Filter zunimmt. Wenn wir von tausend Filtern in der Schaltung sprechen, werden Ihrem Code viertausend Zeilen Routineoperationen für deren Erstellung und Zerstörung hinzugefügt.

Jetzt wissen Sie, wie Sie ein Programm mithilfe eines Media-Streamers korrekt beenden. In den folgenden Beispielen werde ich der Kompaktheit halber darauf „vergessen“. Aber du wirst es nicht vergessen?

Die Entwickler des Media-Streamers stellten keine Softwaretools zur Verfügung, die die Manipulation von Filtern beim Zusammenbau/Demontage von Schaltkreisen erleichtern. Dennoch gibt es einen Helfer, der das schnelle Einsetzen/Entfernen eines Filters in den Kreislauf ermöglicht.

Wir werden auf die Lösung dieses Problems später zurückkommen, wenn die Anzahl der Filter in unseren Beispielen ein paar Dutzend überschreitet.

Nächste Artikel Wir bauen eine Signalpegelmesserschaltung zusammen und lernen, wie man das Messergebnis vom Filter ablesen kann. Lassen Sie uns die Messgenauigkeit bewerten.

Source: habr.com

Kommentar hinzufügen