From 31c395abc30054f9044e4b61148b524014fa00c4 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 10 Mar 2019 20:18:34 +1100 Subject: [PATCH] fixed memory leak in thumbnail generation --- io/previewgenerator.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/io/previewgenerator.cpp b/io/previewgenerator.cpp index 91d1bdd7d..1f9143a3a 100644 --- a/io/previewgenerator.cpp +++ b/io/previewgenerator.cpp @@ -234,10 +234,6 @@ void PreviewGenerator::invalidate_media(const QString &error_msg) footage_->ready_lock.unlock(); } -void thumb_data_cleanup(void *info) { - delete [] static_cast(info); -} - void PreviewGenerator::generate_waveform() { SwsContext* sws_ctx; SwrContext* swr_ctx; @@ -340,7 +336,6 @@ void PreviewGenerator::generate_waveform() { if (!s->preview_done) { int dstH = olive::CurrentConfig.thumbnail_resolution; int dstW = qRound(dstH * (float(temp_frame->width)/float(temp_frame->height))); - uint8_t* data = new uint8_t[size_t(dstW*dstH*4)]; sws_ctx = sws_getContext( temp_frame->width, @@ -357,9 +352,18 @@ void PreviewGenerator::generate_waveform() { int linesize[AV_NUM_DATA_POINTERS]; linesize[0] = dstW*4; - sws_scale(sws_ctx, temp_frame->data, temp_frame->linesize, 0, temp_frame->height, &data, linesize); - s->video_preview = QImage(data, dstW, dstH, linesize[0], QImage::Format_RGBA8888, thumb_data_cleanup); + s->video_preview = QImage(dstW, dstH, QImage::Format_RGBA8888); + uint8_t* data = s->video_preview.bits(); + + sws_scale(sws_ctx, + temp_frame->data, + temp_frame->linesize, + 0, + temp_frame->height, + &data, + linesize); + s->make_square_thumb(); // is video interlaced?