Fix memory leak from using libavcodec api

(cherry picked from commit 8c7eb8997660a70e1e58a4f89a82574931195e63)
Sequence class encapsulation work. Memory leak fixes work

(cherry picked from commit 7caaa778697ea2a84162f4ce523be8b6cef79647)
This commit is contained in:
Jonathan Noble
2019-01-19 15:30:35 +00:00
parent 5cc02956f3
commit 5afd135796
+10 -5
View File
@@ -1,4 +1,4 @@
#include "previewgenerator.h"
#include "previewgenerator.h"
#include "project/media.h"
#include "project/footage.h"
@@ -277,7 +277,7 @@ void PreviewGenerator::generate_waveform() {
if (!s->preview_done) {
int dstH = 120;
int dstW = dstH * ((float)temp_frame->width/(float)temp_frame->height);
uint8_t* data = new uint8_t[dstW*dstH*4];
uint8_t* imgData = new uint8_t[dstW*dstH*4];
sws_ctx = sws_getContext(
temp_frame->width,
@@ -294,9 +294,9 @@ 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);
sws_scale(sws_ctx, temp_frame->data, temp_frame->linesize, 0, temp_frame->height, &imgData, linesize);
s->video_preview = QImage(data, dstW, dstH, linesize[0], QImage::Format_RGBA8888);
s->video_preview = QImage(imgData, dstW, dstH, linesize[0], QImage::Format_RGBA8888);
s->make_square_thumb();
// is video interlaced?
@@ -311,6 +311,8 @@ void PreviewGenerator::generate_waveform() {
avcodec_close(codec_ctx[packet->stream_index]);
codec_ctx[packet->stream_index] = nullptr;
}
delete[] imgData;
}
media_lengths[packet->stream_index]++;
} else if (fmt_ctx->streams[packet->stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
@@ -415,7 +417,10 @@ void PreviewGenerator::generate_waveform() {
finalize_media();
}
delete [] media_lengths;
delete [] codec_ctx;
if (codec_ctx != NULL) {
avcodec_free_context(codec_ctx);
}
}
QString PreviewGenerator::get_thumbnail_path(const QString& hash, const FootageStream& ms) {