Explorando o mecanismo VoIP do Mediastreamer2. Parte 3

O material do artigo foi retirado do meu canal zen.

Explorando o mecanismo VoIP do Mediastreamer2. Parte 3

Melhorando o exemplo do gerador de tons

No anterior статье Escrevemos um aplicativo gerador de tons e o usamos para extrair som de um alto-falante de computador. Agora notaremos que nosso programa não retorna a memória para o heap quando termina. É hora de esclarecer esta questão.

Depois que não precisarmos mais do circuito, a liberação de memória deverá começar interrompendo o pipeline de dados. Para fazer isso, você precisa desconectar a fonte do relógio e o ticker do circuito usando a função ms_ticker_detach(). No nosso caso, devemos desconectar o ticker da entrada do filtro fonte nula:

ms_ticker_detach(ticker, voidsource)

Aliás, após parar a esteira, podemos alterar seu circuito e colocá-la novamente em funcionamento, conectando novamente o ticker.

Agora podemos removê-lo usando a função ms_ticker_destroy():

ms_ticker_destroy(ticker)

A esteira parou e podemos começar a desmontar partes dela, desconectando os filtros. Para fazer isso, use a função ms_filter_unlink():

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

o propósito dos argumentos é o mesmo da função ms_filtro_link().

Removemos os filtros agora separados usando ms_filter_destroy():

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

Adicionando estas linhas ao nosso exemplo, obteremos um encerramento correto do programa do ponto de vista do gerenciamento de memória.

Como podemos ver, o correto preenchimento do programa exigiu que adicionássemos aproximadamente o mesmo número de linhas de código do início, com uma média de quatro linhas de código por filtro. Acontece que o tamanho do código do programa aumentará proporcionalmente ao número de filtros utilizados no projeto. Se falarmos de mil filtros no circuito, então quatro mil linhas de operações de rotina para criá-los e destruí-los serão adicionadas ao seu código.

Agora você sabe como encerrar corretamente um programa que usa um streamer de mídia. Nos exemplos a seguir, por uma questão de compactação, “esquecerei” de fazer isso. Mas você não vai esquecer?

Os desenvolvedores do streamer de mídia não forneceram ferramentas de software para facilitar a manipulação de filtros na montagem/desmontagem de circuitos. No entanto, existe um auxiliar que permite inserir/remover rapidamente um filtro do circuito.

Voltaremos a resolver esse problema mais tarde, quando o número de filtros em nossos exemplos exceder algumas dúzias.

Próximo статье Montaremos um circuito medidor de nível de sinal e aprenderemos como ler o resultado da medição do filtro. Vamos avaliar a precisão da medição.

Fonte: habr.com

Adicionar um comentário