summaryrefslogtreecommitdiff
blob: c93458a8273bf695931d58e909800c9946a88217 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From e013fd7c2f49b40a1b482d712d531329d538da88 Mon Sep 17 00:00:00 2001
From: Brian Matherly <code@brianmatherly.com>
Date: Wed, 31 Jan 2018 20:57:42 -0600
Subject: [PATCH] Fix segmentation fault when using qimage png producer #296

---
 src/modules/qt/qimage_wrapper.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/modules/qt/qimage_wrapper.cpp b/src/modules/qt/qimage_wrapper.cpp
index 436f65d15..99b4ebf8e 100644
--- a/src/modules/qt/qimage_wrapper.cpp
+++ b/src/modules/qt/qimage_wrapper.cpp
@@ -229,18 +229,19 @@ void refresh_image( producer_qimage self, mlt_frame frame, mlt_image_format form
 		QString interps = mlt_properties_get( properties, "rescale.interp" );
 		bool interp = ( interps != "nearest" ) && ( interps != "none" );
 		QImage *qimage = static_cast<QImage*>( self->qimage );
+		int has_alpha = qimage->hasAlphaChannel();
+		QImage::Format qimageFormat = has_alpha ? QImage::Format_ARGB32 : QImage::Format_RGB32;
 
 		// Note - the original qimage is already safe and ready for destruction
-		if ( qimage->depth() == 1 )
+		if ( qimage->format() != qimageFormat )
 		{
-			QImage temp = qimage->convertToFormat( QImage::Format_RGB32 );
+			QImage temp = qimage->convertToFormat( qimageFormat );
 			delete qimage;
 			qimage = new QImage( temp );
 			self->qimage = qimage;
 		}
 		QImage scaled = interp? qimage->scaled( QSize( width, height ) ) :
 			qimage->scaled( QSize(width, height), Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
-		int has_alpha = scaled.hasAlphaChannel();
 
 		// Store width and height
 		self->current_width = width;