Есть ли утечка памяти с кодом QAudioOutput?

Я играю аудио поток в 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);
}

Звук воспроизводится очень хорошо, но потребление памяти приложением со временем увеличивается (около 2 МБ в минуту). Мне было интересно, если я сделал что-то не так. Я полагаю QAudioOutput должен нести ответственность за удаление QIODeviceбуфер после чтения и использования для воспроизведения?

2

Решение

Я так не думаю, документы говорят:

Чтобы начать воспроизведение аудиопотока, достаточно просто вызвать start () с помощью QIODevice. Затем QAudioOutput извлечет необходимые данные с устройства io.

Это просто чтение данных. QIODevice должен управлять буфером. Чтобы быть уверенным, вы можете проверить размер вашего буфера с помощью QIODevice :: size () и посмотреть, растет ли он.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]