QaudioOutput代码是否有任何内存泄漏

Is there any memory leak with the QAudioOutput code?

本文关键字:内存 泄漏 任何 代码 是否 QaudioOutput      更新时间:2023-10-16

我在这样的qthread中播放音频流:

// Setup
QAudioFormat format;
format.setFrequency(44100);
format.setChannels(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
format = info.nearestFormat(format);
this->m_AudioOutput = new QAudioOutput(format, this);
DECLARE_ALIGNED(16,uint8_t,audio_buffer)[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2];
// Playback
QIODevice *iodevice = this->m_AudioOutput->start();
for(;;) {
    // Routine that fetches audio data from network
    // data_size is length of the buffer
    fetch_packet(&audio_buffer, data_size);
    qint64 dataRemaining = data_size;
    const char *b2 = (const char *)audio_buffer;
    while (dataRemaining) {
    qint64 bytesWritten = iodevice->write((const char *)b2, dataRemaining);
        dataRemaining -= bytesWritten;
        b2 = b2 + bytesWritten ;
    }
    msleep(10);
}

音频播放效果很好,但该应用程序的内存消耗似乎随着时间的推移而增加(约为每分钟2MB)。我想知道我是否做错了。我想QAudioOutput应负责删除QIODevice的缓冲区,并用于播放?

我不这么认为,文档说:

开始播放音频流只是用Qiodevice调用start()的问题。 QaudioOutput将从IO设备中获取所需的数据。

它只是读取数据。QIODEVICE应管理缓冲区。可以肯定的是,您可以使用Qiodevice :: size()检查缓冲区的大小,并查看是否正在生长。