media-libs/mlt: Fix png 8-bit segfault
authorAndreas Sturmlechner <asturm@gentoo.org>
Sun, 22 Jul 2018 20:11:37 +0000 (22:11 +0200)
committerAndreas Sturmlechner <asturm@gentoo.org>
Sun, 22 Jul 2018 21:49:15 +0000 (23:49 +0200)
Package-Manager: Portage-2.3.43, Repoman-2.3.10

media-libs/mlt/files/mlt-6.6.0-png-segfault.patch [new file with mode: 0644]
media-libs/mlt/mlt-6.6.0-r1.ebuild

diff --git a/media-libs/mlt/files/mlt-6.6.0-png-segfault.patch b/media-libs/mlt/files/mlt-6.6.0-png-segfault.patch
new file mode 100644 (file)
index 0000000..c93458a
--- /dev/null
@@ -0,0 +1,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;
index 3e57dbb3e1e8d8043f5fa2f69d546de5de7e45ca..b0b811b945d617bcd274ba63d441333d5a48ddcc 100644 (file)
@@ -98,6 +98,7 @@ DOCS=( AUTHORS ChangeLog NEWS README docs/{framework,melt,mlt{++,-xml}}.txt )
 PATCHES=(
        "${FILESDIR}"/${P}-vorbis-ffmpeg-3.4.patch
        "${FILESDIR}"/${P}-libav-{1,2,3}.patch
+       "${FILESDIR}"/${P}-png-segfault.patch
 )
 
 pkg_setup() {