如何摆脱QIoDevice中的memcpy

时间:2014-06-26 20:56:36

标签: c++ qt audio qiodevice

我使用Qt制作一些音频输出。有一个示例audioouput,其中纯虚函数qint64 QIODevice :: readData(char * data,qint64 maxSize)重新实现(这不是示例中的实际代码)。

qint64 Generator::readData(char *data, qint64 len)
{
    memcpy(data, m_buffer.data(), len);
    return len;
}

因此,我们获取指向数据的指针,将内存从缓冲区复制到此数据。我想知道我是否可以将指针数据分配到新位置,如下所示:

qint64 Generator::readData(char *data, qint64 len)
{
    data = m_buffer.data();
    return len;
}

因为,memcpy很慢而且C.我可以吗?谢谢!

好的,只是不接收评论"什么是慢": 首先 - memcpy慢于指针赋值 第二 - 是的,我在声音播放方面有延迟,我希望在每一点都能使程序达到最佳状态。

P.S。我试图这样做,而且我没有声音,所以也许答案是否定的。那为什么?

1 个答案:

答案 0 :(得分:0)

此方法的签名仅允许您通过复制数据来返回数据。 分配指针是没有意义的,因为此参数作为副本传递,因此指定的值不会在方法外显示。

memcpy对于实时音频输出来说并不慢(除非你是在8位处理器上进行的)。

音频代码太慢会导致声音出现间隙,但不会导致延迟。延迟是音频缓冲区过大的结果。