探索 Mediastreamer2 VoIP 引擎。 第 3 部分

文章素材取自我 禅频道.

探索 Mediastreamer2 VoIP 引擎。 第 3 部分

改进音调生成器示例

在以前 文章 我们编写了一个音频发生器应用程序,并用它从计算机扬声器中提取声音。 现在我们会注意到,我们的程序在完成时不会将内存返回到堆。 是时候澄清这个问题了。

当我们不再需要该电路后,应该从停止数据管道开始释放内存。 为此,您需要使用以下函数断开时钟源和计时器与电路的连接 ms_ticker_detach()。 在我们的例子中,我们必须断开股票代码与过滤器输入的连接 虚源:

ms_ticker_detach(ticker, voidsource)

顺便说一下,停止输送机后,我们可以更改其电路并将其重新投入运行,再次连接自动收报机。

现在我们可以使用该函数删除它 ms_ticker_destroy():

ms_ticker_destroy(ticker)

传送带已经停止,我们可以开始拆卸其部件,断开过滤器。 为此,请使用该函数 ms_filter_unlink():

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

参数的目的与函数相同 ms_filter_link().

我们使用以下方法删除现在分离的过滤器 ms_filter_destroy():

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

通过将这些行添加到我们的示例中,我们将从内存管理的角度获得正确的程序终止。

正如我们所看到的,程序的正确完成要求我们添加与开始时大致相同数量的代码行,每个过滤器平均四行代码。 事实证明,程序代码的大小将与项目中使用的过滤器数量成比例增加。 如果我们谈论电路中的一千个过滤器,那么用于创建和销毁它们的四千行例行操作将添加到您的代码中。

现在您知道如何正确终止使用媒体流的程序。 在下面的例子中,为了简洁起见,我将“忘记”这样做。 但你不会忘记吗?

媒体流传输器的开发人员没有提供软件工具来方便在组装/拆卸电路时操作过滤器。 不过,有一个帮助程序可以让您快速在电路中插入/移除滤波器。

当我们的示例中的过滤器数量超过几十个时,我们将在稍后返回解决这个问题。

下一个 文章 我们将组装一个信号电平计电路并学习如何从滤波器读取测量结果。 我们来评估一下测量精度。

来源: habr.com

添加评论