Bug #81217 [Com]: imageavif() fails - Segmentation Fault or No codec available

From: Date: Fri, 08 Oct 2021 10:12:36 +0000
Subject: Bug #81217 [Com]: imageavif() fails - Segmentation Fault or No codec available
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237101@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81217&edit=1

 ID:                 81217
 Comment by:         mlocati at gmail dot com
 Reported by:        mlocati at gmail dot com
 Summary:            imageavif() fails - Segmentation Fault or No codec
                     available
 Status:             Open
 Type:               Bug
 Package:            GD related
 Operating System:   Debian Buster and Alpine Linux
 PHP Version:        8.1.0alpha2
 Block user comment: N
 Private report:     N

 New Comment:

So, it seems that the root cause of this issue is that the libaom versions currently provided by
Debian APT and Alpine APK systems are not functional (AFAIK they are compiled without the required
BUILD_SHARED_LIBS=1, but I may be wrong here).

So, in order to make imageavif() and imagecreatefromavif() work, you need to do everything by hand:

1. compile and install libaom
2. compile and install libdav1d (to decode AV1)
3. compile and install libyuv (used by libavif to better handle YUV decoding)
4. compile and install libavif
5. compile and install the gd PHP extension (with the --with-avif flag)

For an example about how that can be done in Debian (so, Ubuntu too) and Alpine, you can take a look
at https://github.com/mlocati/docker-php-extension-installer


Previous Comments:
------------------------------------------------------------------------
[2021-09-28 00:05:06] apostnikov at gmail dot com

I filed MR to upgrade libavif in Alpinelinex 3.14 but looks it needs major version bump for libaom,
meantime it should be working in alpine:edge

------------------------------------------------------------------------
[2021-09-27 17:47:27] morss at google dot com

I think this is the same thing that Pierre kindly fixed here:

https://github.com/libgd/libgd/issues/770

------------------------------------------------------------------------
[2021-08-26 14:23:18] pear at laurent-laville dot org

This issue is still live with version 8.1.0beta3

Same test procedure, but used docker image php:8.1.0beta3-fpm-buster

------------------------------------------------------------------------
[2021-07-02 09:39:39] cmb@php.net

Hmm, I wonder whether we need to explicitly configure a codec for
libavif on some platforms.  Apparently, pkg-config doesn't do this
here.

------------------------------------------------------------------------
[2021-07-01 15:29:57] mlocati at gmail dot com

I tried recompiling gd on Debian Buster after adding libaom:

apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libxpm-dev libwebp-dev
libavif-dev libaom-dev

But

php -r 'var_dump(imageavif(imagecreatetruecolor(8, 8), "/tmp/test"));'

still gives a Segmentation fault



I also tried recompiling gd on Alpine Linux 3.14 after adding aom:

apk add freetype-dev libjpeg-turbo-dev libpng-dev libxpm-dev libwebp-dev libavif-dev aom-dev

but 

php -r 'var_dump(imageavif(imagecreatetruecolor(8, 8), "/tmp/test"));'

still outputs

Warning: imageavif(): avif error - Could not encode image: No codec available in Command line code
on line 1
bool(true)

(and the generated file is empty)

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=81217


--
Edit this bug report at https://bugs.php.net/bug.php?id=81217&edit=1


Thread (11 messages)

« previous php.bugs (#237101) next »