Explorando el motor VoIP de Mediastreamer2. Parte 3

El material del artículo está tomado de mi canal zen.

Explorando el motor VoIP de Mediastreamer2. Parte 3

Mejorando el ejemplo del generador de tonos.

En el anterior статье Escribimos una aplicación generadora de tonos y la usamos para extraer sonido del altavoz de una computadora. Ahora notaremos que nuestro programa no devuelve la memoria al montón cuando finaliza. Es hora de aclarar esta cuestión.

Una vez que ya no necesitemos el circuito, la liberación de memoria debería comenzar deteniendo la canalización de datos. Para hacer esto, debe desconectar la fuente del reloj y el ticker del circuito usando la función ms_ticker_detach(). En nuestro caso, debemos desconectar el ticker de la entrada del filtro. fuente del vacío:

ms_ticker_detach(ticker, voidsource)

Por cierto, tras detener el transportador, podemos cambiar su circuito y volver a ponerlo en funcionamiento, conectando nuevamente el ticker.

Ahora podemos eliminarlo usando la función. ms_ticker_destroy():

ms_ticker_destroy(ticker)

El transportador se ha detenido y podemos empezar a desmontar partes del mismo, desconectando los filtros. Para hacer esto, use la función ms_filter_unlink():

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

el propósito de los argumentos es el mismo que el de la función enlace_filtro_ms().

Eliminamos los filtros ahora separados usando ms_filter_destroy():

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

Añadiendo estas líneas a nuestro ejemplo obtendremos una correcta terminación del programa desde el punto de vista de la gestión de la memoria.

Como vemos, la correcta finalización del programa nos obligó a añadir aproximadamente el mismo número de líneas de código que al principio, con una media de cuatro líneas de código por filtro. Resulta que el tamaño del código del programa aumentará en proporción a la cantidad de filtros utilizados en el proyecto. Si hablamos de mil filtros en el circuito, entonces se agregarán a su código cuatro mil líneas de operaciones de rutina para crearlos y destruirlos.

Ahora ya sabe cómo finalizar correctamente un programa que utiliza un transmisor de medios. En los siguientes ejemplos, en aras de la compacidad, me “olvidaré” de hacer esto. ¿Pero no lo olvidarás?

Los desarrolladores del transmisor multimedia no proporcionaron herramientas de software para facilitar la manipulación de los filtros al montar/desmontar circuitos. Sin embargo, existe un ayudante que le permite insertar/quitar rápidamente un filtro del circuito.

Volveremos a resolver este problema más adelante, cuando el número de filtros en nuestros ejemplos supere un par de docenas.

Próximo статье Montaremos un circuito medidor de nivel de señal y aprenderemos a leer el resultado de la medición del filtro. Evaluemos la precisión de la medición.

Fuente: habr.com

Añadir un comentario