Приложение отображение JPEG с ip-камеры в Qlabel с помощью Qpixmap. Параметры потока: разрешение 800х600, размер кадра 30000 байт, 18 fps.
Наблюдая за потреблением памяти во время работы приложения создаётся впечатление, что QPixmap запоминает все полученные кадры, так как по завершению приложения потребление памяти нормализуется. При длительной работе приложение завершается с сообщением Killed, valgrind ничего не выявил.
Функция отображения кадра:
Код: Выделить всё
QByteArray jpg;
QPixmap pixmap;
jpg.truncate(0);
jpg.reserve(frame_size);
//заполнение jpg данными
void Image::view_image()
{
if (pixmap.loadFromData(jpg)) {
setFixedSize(frame_width + 10, frame_height + 10);
ui->image->resize(frame_width, frame_height);
ui->image->setPixmap(pixmap);
} else
setWindowTitle(QString(tr("can't load image")));
show();
if (cur_status != IMAGE_STOP_DATA) {
cur_status = IMAGE_WAIT_HEADER;
emit next_frame(true); //запрос следующего кадра
}
}
Отсюда возникает несколько вопросов:
- QPixmap запоминает все предыдущие кадры, как то это сомнительно
- если действительно запоминает, то как лучше его очищать, так как в документации нашёл только scaled возвращающий копию?
- возможно QPixmap не лучший выбор для этой задачи, что посоветуете?
Спасибо.