commit:     9d08e036fc964ca46457d1784c244fb6b34b6284
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 22 20:11:37 2018 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sun Jul 22 21:49:15 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9d08e036

media-libs/mlt: Fix png 8-bit segfault

Package-Manager: Portage-2.3.43, Repoman-2.3.10

 media-libs/mlt/files/mlt-6.6.0-png-segfault.patch | 36 +++++++++++++++++++++++
 media-libs/mlt/mlt-6.6.0-r1.ebuild                |  1 +
 2 files changed, 37 insertions(+)

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
index 00000000000..c93458a8273
--- /dev/null
+++ b/media-libs/mlt/files/mlt-6.6.0-png-segfault.patch
@@ -0,0 +1,36 @@
+From e013fd7c2f49b40a1b482d712d531329d538da88 Mon Sep 17 00:00:00 2001
+From: Brian Matherly <[email protected]>
+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;

diff --git a/media-libs/mlt/mlt-6.6.0-r1.ebuild 
b/media-libs/mlt/mlt-6.6.0-r1.ebuild
index 3e57dbb3e1e..b0b811b945d 100644
--- a/media-libs/mlt/mlt-6.6.0-r1.ebuild
+++ b/media-libs/mlt/mlt-6.6.0-r1.ebuild
@@ -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() {

Reply via email to