在编写音频软件时,互联网上的许多人都说不要使用内存分配或阻塞代码,即没有锁定是至关重要的.由于这些是非确定性的,因此可能导致输出缓冲器下溢并且音频将出现故障.
当我编写视频软件时,我通常使用两者,即在堆上分配视频帧并使用锁和条件变量(有界缓冲区)在线程之间传递.我喜欢它提供的功能,因为每个操作都可以使用单独的线程,允许软件最大化每个内核,从而提供最佳性能.
对于音频,我想做类似的事情,在线程之间传递可能100个样本的帧,但是,有两个问题.
如何在不使用内存分配的情况下生成帧?我想我可以使用已预先分配的帧池,但这看起来很混乱.
我知道你可以使用无锁队列,并且boost有一个很好的库来做到这一点.这将是在线程之间共享的一种很好的方式,但是不断轮询队列以查看数据是否可用似乎是CPU时间的巨大腰部.
根据我的经验,使用互斥锁实际上并不需要花费太多时间,前提是互斥锁被锁定的部分很短.
实现线程之间传递音频帧的最佳方法是什么,同时将延迟保持在最小,不浪费资源并使用相对较少的非确定性行为?
我从 KeypointBasedMotionEstimator 类获得了 OpenCV 中的仿射变换矩阵。
它的形式如下:
[1.0008478, -0.0017408683, -10.667297;
0.0011812132, 1.0009096, -3.3626099;
0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
我现在想将变换应用于向量< Pointf >,以便它会变换每个点,就像它们在图像中一样。
OpenCV 似乎不允许只转换点,函数:
void cv::warpAffine ( InputArray src,
OutputArray dst,
InputArray M,
Size dsize,
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar & borderValue = Scalar()
)
Run Code Online (Sandbox Code Playgroud)
似乎只将图像作为输入和输出。
有没有办法可以对 OpenCV 中的单点应用仿射变换?
是否有任何软件可用于不需要编码的计算机视觉管道原型。
我已经尝试过这个http://www.cassandra-vision.com/,但是它并不是很容易使用。
当人们在答案中添加内容时,我想列出不同软件的优缺点列表。
软件
优点:
缺点:
价钱:$ 99
优点:
缺点:
价格:未知,但看起来大约是100GBP。
如果您使用过此功能,请添加。
优点:
缺点:
价格:135.00美元(用于matlab)+ 39.00美元