O conteúdo deste artigo foi retirado do meu .

Melhorando o exemplo do gerador tonal
Na anterior escrevemos um aplicativo de gerador tonal e, com ele, extraímos som do alto-falante do computador. Agora, vamos focar no fato de que nosso programa, ao concluir seu trabalho, não retorna a memória de volta para o heap. Chegou a hora de esclarecer essa questão.
Depois que o esquema não for mais necessário, a liberação de memória deve começar com a parada do pipeline de dados. Para isso, precisamos desconectar a fonte de clock, o ticker, da função ms_ticker_detach(). No nosso caso, devemos desconectar o ticker da entrada do filtro voidsource:
ms_ticker_detach(ticker, voidsource)A propósito, após parar o pipeline, podemos alterar seu esquema e colocá-lo para funcionar novamente, reconectando o ticker.
Agora podemos removê-lo, utilizando a função ms_ticker_destroy():
ms_ticker_destroy(ticker)O pipeline foi parado e podemos começar a desmontar suas partes, desconectando os filtros. Para isso, utilizamos a função ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);a função não muda, é a mesma que a da função ms_filter_link().
Removemos agora os filtros já desconectados com ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Adicionando essas linhas ao nosso exemplo, teremos uma finalização correta do programa em termos de gerenciamento de memória.
Como podemos ver, a finalização correta do programa exigiu que adicionássemos aproximadamente o mesmo número de linhas de código que no início, sendo que em média, cada filtro consumiu quatro linhas de código. Assim, o tamanho do código do programa crescerá proporcionalmente ao número de filtros utilizados no projeto. Se falarmos de mil filtros no esquema, seu código acrescentará quatro mil linhas de operações rotineiras para criação e destruição.
Agora você sabe como finalizar corretamente um programa que utiliza um media streamer. Nos próximos exemplos, para maior compacidade, eu "esquecerei" de fazer isso. Mas você não vai esquecer, vai?
Os desenvolvedores do media streamer não previram ferramentas para facilitar a manipulação de filtros durante a montagem/desmontagem de esquemas. No entanto, há um helper que permite inserir/remover rapidamente um filtro do esquema.
Voltaremos a resolver essa questão mais tarde, quando o número de filtros em nossos exemplos ultrapassar algumas dezenas.
Na próxima Vamos montar o esquema do medidor de nível de sinal e aprender a ler o resultado da medição do filtro. Avaliaremos a precisão da medição.
Fonte: habr.com
