Esplorare il motore VoIP di Mediastreamer2. Parte 3

Il materiale dell'articolo è tratto dal mio canale zen.

Esplorare il motore VoIP di Mediastreamer2. Parte 3

Miglioramento dell'esempio del generatore di suoni

Nel precedente Articolo Abbiamo scritto un'applicazione per la generazione di suoni e l'abbiamo utilizzata per estrarre il suono dall'altoparlante di un computer. Ora noteremo che il nostro programma non restituisce la memoria nell'heap una volta terminato. E' giunto il momento di chiarire questa questione.

Una volta che non avremo più bisogno del circuito, la liberazione della memoria dovrebbe iniziare interrompendo la pipeline di dati. Per fare ciò, è necessario disconnettere la sorgente dell'orologio e il ticker dal circuito utilizzando la funzione ms_ticker_detach(). Nel nostro caso, dobbiamo scollegare il ticker dall'ingresso del filtro fonte di vuoto:

ms_ticker_detach(ticker, voidsource)

A proposito, dopo aver fermato il trasportatore, possiamo cambiare il suo circuito e rimetterlo in funzione, collegando nuovamente il ticker.

Ora possiamo rimuoverlo utilizzando la funzione ms_ticker_destroy():

ms_ticker_destroy(ticker)

Il trasportatore si è fermato e possiamo cominciare a smontarne alcune parti, scollegando i filtri. Per fare ciò, utilizzare la funzione ms_filter_unlink():

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

lo scopo degli argomenti è lo stesso della funzione ms_filter_link().

Rimuoviamo i filtri ora separati utilizzando ms_filter_destroy():

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

Aggiungendo queste righe al nostro esempio otterremo una corretta terminazione del programma dal punto di vista della gestione della memoria.

Come possiamo vedere, il corretto completamento del programma ci ha richiesto di aggiungere all'incirca lo stesso numero di righe di codice dell'inizio, con una media di quattro righe di codice per filtro. Risulta che la dimensione del codice del programma aumenterà in proporzione al numero di filtri utilizzati nel progetto. Se parliamo di mille filtri nel circuito, al tuo codice verranno aggiunte quattromila righe di operazioni di routine per crearli e distruggerli.

Ora sai come terminare correttamente un programma utilizzando uno streamer multimediale. Negli esempi che seguono, per ragioni di compattezza, “dimenticherò” di farlo. Ma non lo dimenticherai?

Gli sviluppatori dello streamer multimediale non hanno fornito strumenti software per facilitare la manipolazione dei filtri durante il montaggio/smontaggio dei circuiti. Esiste comunque un aiutante che permette di inserire/rimuovere velocemente un filtro dal circuito.

Torneremo a risolvere questo problema più tardi, quando il numero di filtri nei nostri esempi supererà un paio di dozzine.

Prossimo Articolo Assembleremo un circuito per il misuratore del livello del segnale e impareremo come leggere il risultato della misurazione dal filtro. Valutiamo la precisione della misurazione.

Fonte: habr.com

Aggiungi un commento