Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Image-Info for openSUSE:Factory 
checked in at 2023-08-08 17:26:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Image-Info (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Image-Info.new.22712 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Image-Info"

Tue Aug  8 17:26:50 2023 rev:16 rq:1102954 version:1.440.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Image-Info/perl-Image-Info.changes  
2022-10-06 07:41:41.796619517 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Image-Info.new.22712/perl-Image-Info.changes   
    2023-08-08 17:26:53.519531169 +0200
@@ -1,0 +2,13 @@
+Fri Aug  4 03:06:30 UTC 2023 - Tina Müller <[email protected]>
+
+- updated to 1.44
+   see /usr/share/doc/packages/perl-Image-Info/CHANGES
+
+  2023-08-03  Slaven Rezic  <[email protected]>
+      Release 1.44
+      Stable release with the change in 1.43_50
+  2023-07-25  Slaven Rezic  <[email protected]>
+      Release 1.43_50
+      Support for AVIF files (PR #12, thanks to Zefram and Michael Kroell)
+
+-------------------------------------------------------------------

Old:
----
  Image-Info-1.43.tar.gz

New:
----
  Image-Info-1.44.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Image-Info.spec ++++++
--- /var/tmp/diff_new_pack.eAx1gd/_old  2023-08-08 17:26:54.611537954 +0200
+++ /var/tmp/diff_new_pack.eAx1gd/_new  2023-08-08 17:26:54.615537979 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Image-Info
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,16 +18,42 @@
 
 %define cpan_name Image-Info
 Name:           perl-Image-Info
-Version:        1.43
+Version:        1.440.0
 Release:        0
+%define cpan_version 1.44
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        Extract meta information from image files
 URL:            https://metacpan.org/release/%{cpan_name}
-Source0:        
https://cpan.metacpan.org/authors/id/S/SR/SREZIC/%{cpan_name}-%{version}.tar.gz
+Source0:        
https://cpan.metacpan.org/authors/id/S/SR/SREZIC/%{cpan_name}-%{cpan_version}.tar.gz
 Source1:        cpanspec.yml
 BuildArch:      noarch
 BuildRequires:  perl
 BuildRequires:  perl-macros
+Provides:       perl(Bundle::Image::Info::Everything) = 0.02
+Provides:       perl(Bundle::Image::Info::PNG) = 0.02
+Provides:       perl(Bundle::Image::Info::SVG) = 0.02
+Provides:       perl(Bundle::Image::Info::XBM) = 0.02
+Provides:       perl(Bundle::Image::Info::XPM) = 0.02
+Provides:       perl(Image::Info) = 1.440.0
+Provides:       perl(Image::Info::AVIF) = 0.10.0
+Provides:       perl(Image::Info::BMP) = 1.04
+Provides:       perl(Image::Info::GIF) = 1.02
+Provides:       perl(Image::Info::ICO) = 0.02
+Provides:       perl(Image::Info::JPEG) = 0.06
+Provides:       perl(Image::Info::PNG) = 1.03
+Provides:       perl(Image::Info::PPM) = 0.04
+Provides:       perl(Image::Info::Result)
+Provides:       perl(Image::Info::SVG) = 2.04
+Provides:       perl(Image::Info::SVG::XMLLibXMLReader) = 1.05
+Provides:       perl(Image::Info::SVG::XMLSimple) = 1.05
+Provides:       perl(Image::Info::TIFF) = 0.05
+Provides:       perl(Image::Info::WBMP) = 0.01
+Provides:       perl(Image::Info::WEBP) = 0.01
+Provides:       perl(Image::Info::XBM) = 1.08
+Provides:       perl(Image::Info::XPM) = 1.09
+Provides:       perl(Image::TIFF) = 1.11
+Provides:       perl(Image::TIFF::Rational)
+%define         __perllib_provides /bin/true
 Recommends:     perl(Bundle::Image::Info::PNG)
 Recommends:     perl(Bundle::Image::Info::SVG)
 Recommends:     perl(Bundle::Image::Info::XBM)
@@ -39,8 +65,9 @@
 from image files.
 
 %prep
-%autosetup  -n %{cpan_name}-%{version}
-find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path 
"*/script/*" ! -name "configure" -print0 | xargs -0 chmod 644
+%autosetup  -n %{cpan_name}-%{cpan_version}
+
+find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path 
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 
644
 
 %build
 perl Makefile.PL INSTALLDIRS=vendor

++++++ Image-Info-1.43.tar.gz -> Image-Info-1.44.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/CHANGES new/Image-Info-1.44/CHANGES
--- old/Image-Info-1.43/CHANGES 2022-10-03 19:50:28.000000000 +0200
+++ new/Image-Info-1.44/CHANGES 2023-08-03 19:11:10.000000000 +0200
@@ -1,5 +1,17 @@
 Revision history for Image::Info
 
+2023-08-03  Slaven Rezic  <[email protected]>
+
+    Release 1.44
+
+    Stable release with the change in 1.43_50
+
+2023-07-25  Slaven Rezic  <[email protected]>
+
+    Release 1.43_50
+
+    Support for AVIF files (PR #12, thanks to Zefram and Michael Kroell)
+
 2022-10-03  Slaven Rezic  <[email protected]>
 
     Release 1.43
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/CREDITS new/Image-Info-1.44/CREDITS
--- old/Image-Info-1.43/CREDITS 2009-11-22 20:06:39.000000000 +0100
+++ new/Image-Info-1.44/CREDITS 2023-07-25 20:21:20.000000000 +0200
@@ -24,5 +24,6 @@
                                        Testing on Mac and PPC
 Phil Harvey <[email protected]>  Panasonic Exif MakerNotes
 Ralf Steines <[email protected]>      GIF fixes
+Zefram and Michael Kröll              AVIF support
 Slaven Rezić <[email protected]>                Maintainer from 2008 on
 Tels <http://www.bloodgate.com>                Maintainer between 2006 and 2008
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/MANIFEST new/Image-Info-1.44/MANIFEST
--- old/Image-Info-1.43/MANIFEST        2022-10-03 19:52:52.000000000 +0200
+++ new/Image-Info-1.44/MANIFEST        2023-08-03 19:13:31.000000000 +0200
@@ -22,6 +22,7 @@
 img/test-multi0xff.jpg
 img/test-notrailer.gif
 img/test-unknowncode.gif
+img/test.avif
 img/test.gif                   An GIF example
 img/test.ico
 img/test.jpg                   An Exif example from my Digicam
@@ -51,6 +52,7 @@
 lib/Bundle/Image/Info/XBM.pm
 lib/Bundle/Image/Info/XPM.pm
 lib/Image/Info.pm
+lib/Image/Info/AVIF.pm
 lib/Image/Info/BMP.pm
 lib/Image/Info/GIF.pm
 lib/Image/Info/ICO.pm
@@ -71,6 +73,7 @@
 MANIFEST.SKIP
 README
 t/00_basics.t
+t/avif.t
 t/bad_exif.t
 t/bmp.t
 t/exif.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/META.json 
new/Image-Info-1.44/META.json
--- old/Image-Info-1.43/META.json       2022-10-03 19:52:52.000000000 +0200
+++ new/Image-Info-1.44/META.json       2023-08-03 19:13:31.000000000 +0200
@@ -6,13 +6,13 @@
       "Tels"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.1002, CPAN::Meta::Converter 
version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter 
version 2.150010",
    "license" : [
       "perl_5"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Image-Info",
    "no_index" : {
@@ -50,9 +50,10 @@
    "release_status" : "stable",
    "resources" : {
       "repository" : {
+         "type" : "git",
          "url" : "git://github.com/eserte/image-info.git"
       }
    },
-   "version" : "1.43",
-   "x_serialization_backend" : "JSON::PP version 2.27300_01"
+   "version" : "1.44",
+   "x_serialization_backend" : "JSON::PP version 4.07"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/META.yml new/Image-Info-1.44/META.yml
--- old/Image-Info-1.43/META.yml        2022-10-03 19:52:52.000000000 +0200
+++ new/Image-Info-1.44/META.yml        2023-08-03 19:13:31.000000000 +0200
@@ -9,7 +9,7 @@
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.1002, CPAN::Meta::Converter 
version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter version 
2.150010'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -31,5 +31,5 @@
   perl: '5.006'
 resources:
   repository: git://github.com/eserte/image-info.git
-version: '1.43'
+version: '1.44'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/README new/Image-Info-1.44/README
--- old/Image-Info-1.43/README  2019-10-16 20:58:09.000000000 +0200
+++ new/Image-Info-1.44/README  2023-07-25 20:20:14.000000000 +0200
@@ -9,6 +9,7 @@
    XBM/XPM
    BMP/DIB/RLE
    WEBP
+   AVIF
 
 Usage is something like this:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/SIGNATURE 
new/Image-Info-1.44/SIGNATURE
--- old/Image-Info-1.43/SIGNATURE       2022-10-03 19:52:52.000000000 +0200
+++ new/Image-Info-1.44/SIGNATURE       2023-08-03 19:13:32.000000000 +0200
@@ -15,16 +15,16 @@
 Hash: SHA256
 
 SHA1 c82d6187bf83f92dcd4a4ba9ab8341c3edcc094a .gitignore
-SHA1 10c316fcce180e5eff4d9821c3bcecb091c4e95f CHANGES
-SHA1 517bff80bcf518746150086148acaf8cfa37a17d CREDITS
-SHA1 5ca9bb45657728092eb1aa886e1e2b1826136c70 MANIFEST
+SHA1 5bf370331b91d40e827be45d6e9efc2b81482a88 CHANGES
+SHA1 d6cf6ad48410d9163a0a33f512562164e31f0251 CREDITS
+SHA1 109caae03241de014eec0f5965b053b426c4fe99 MANIFEST
 SHA1 7508fd127843a69e30ba4f58f4b4e769f20d49e2 MANIFEST.SKIP
-SHA1 c8a563bd0471afe68ae49cf21a69331d587a7087 META.json
-SHA1 cc712e850ee678e2cf32573642df3fb5ba9d3f42 META.yml
+SHA1 bbcb42a15f1fc43c707e0325ef8daeb85f0c3e7c META.json
+SHA1 87c6cf1fd15214421255ce7ad17732caaa830d4a META.yml
 SHA1 fd14642d591e132078fc91a8e54a4a4fed927f46 Makefile.PL
-SHA1 2223f7e51619714199f2d5cc232b5aa0e514364f README
+SHA1 9fa69197cc57e50669cedae9df4fde38c093c0ab README
 SHA1 36ea8eabe5ac80acc416411aae77b60e1480de1b TODO
-SHA1 7d1e2c484d3107a0e90b43169a04701c713953bf dev/Info.pm.tmpl
+SHA1 a5f893711cdf86ca36889a34178d9ce8f847d6a7 dev/Info.pm.tmpl
 SHA1 c11e7408bd16d35b2116ee47eaac4f08266be902 dev/build.pl
 SHA1 38b386e67725abff64ea00abb8e92c46f38e2f59 exifdump
 SHA1 fdf710d6580548b5fe62be0fd9151bc196537c17 img/anim.webp
@@ -47,6 +47,7 @@
 SHA1 1f561889c44c24dae57de74f65401ca7bc089a87 img/test-multi0xff.jpg
 SHA1 44e527641f2af0aadfb1dcc9a7f301f258d8f77d img/test-notrailer.gif
 SHA1 75da6beb9439bc07a0cd8537ce21689d560452da img/test-unknowncode.gif
+SHA1 dea5d3a37b9f934bc3b028f0467690a5cf4fe9b6 img/test.avif
 SHA1 5d3db653df616830a6a135d862e30e355464a43a img/test.gif
 SHA1 11f4a1f61f932b1eb96d1ab45beb681488e4c13d img/test.ico
 SHA1 6299f38bf7c592409362601fe34a5b0baafdcf47 img/test.jpg
@@ -73,7 +74,8 @@
 SHA1 e6fe98aa5a30dbd290668cffa515aebaf14828fa lib/Bundle/Image/Info/SVG.pm
 SHA1 fa3a601365ec108901e991a8148b62c2bf3dd62b lib/Bundle/Image/Info/XBM.pm
 SHA1 7ae5950ba4474e8099068ca6122e67cadce60842 lib/Bundle/Image/Info/XPM.pm
-SHA1 67252dd02f3c7cd3cac04b741c09ed9df54cc158 lib/Image/Info.pm
+SHA1 83171cc1b691717d85ce58de61ef8c12b03d4002 lib/Image/Info.pm
+SHA1 3da8a571a7d25f226153b177b51affe122a86a75 lib/Image/Info/AVIF.pm
 SHA1 6991a957bacde9d3b873184d90d910d083f5f403 lib/Image/Info/BMP.pm
 SHA1 0996bffe073126dceb72c04dc5b3002c78c24d56 lib/Image/Info/GIF.pm
 SHA1 fb628cb66c566ab66a1b7953a1bb29cfde1c79c7 lib/Image/Info/ICO.pm
@@ -90,6 +92,7 @@
 SHA1 4a5050fdcef00704e7d1fa2ae8751aa34a866f63 lib/Image/Info/XPM.pm
 SHA1 5e1853b08e6d86cd6be55bb7eea71cd8bd6e7aac lib/Image/TIFF.pm
 SHA1 34e6def40374dc924ea7ef58c5aa04e04a783295 t/00_basics.t
+SHA1 812aeed71b81ef55082573c4e65c7d2118395952 t/avif.t
 SHA1 38883a0d98f01e4e749168369848f3ab5b5c7660 t/bad_exif.t
 SHA1 aaf002b3e5103e15dad27d59bbf2ce7d84caf79e t/bmp.t
 SHA1 7cddff7d8bccd9b2e303554d31ad6f8891b7705b t/exif.t
@@ -117,12 +120,12 @@
 SHA1 776c2c96e3155a622221cb1c4989579a652452d7 xt/synopsis.t
 -----BEGIN PGP SIGNATURE-----
 
-iQEzBAEBCAAdFiEEhTWpz/sWDCQpAXAK3UaSYGV8Tz8FAmM7IXQACgkQ3UaSYGV8
-Tz8Rwgf/SVHdYPCv/6lxoS5gri8vv3n2DaTihCb87U8ryKs7WzK3uwTsCp4UODX/
-camM4w8ueF7Mm8GXQFetfVsDtyCSeclWyisFG4N0doP39F/pI4XHvlzHTZrSix3S
-W59ZUp7Cl+ea30p76CKBw+fKNvOyJB9HD8nYbFFDJkAPwLBW9Vmfomhi3sNDdphd
-oNRQFRhr2SI+ylLSR69daQf0KjCkc6UKQTIn3iApVA9yYTCXHM6YBllsxFUP3eqp
-aTQxWTiaOwMEbomHBY36a+dkO6ZWdLNbaO0zrD5oULvFYqXU2Se4HpuwFRMEZ9gv
-E1I/Io7NMniXD2RHr83Dzw1GpWptbg==
-=lveb
+iQEzBAEBCAAdFiEEhTWpz/sWDCQpAXAK3UaSYGV8Tz8FAmTL4DsACgkQ3UaSYGV8
+Tz8XdQf+KD6a94/oUsjC0biU5qQyRbdiAwPtjKKxz4bP60is3CzsdeZukfoqg0FU
+U5sB9vs58oEKZiU4nXFRDtkgny4wvnZihjHrDunTjE3DMkMddjenffL+FpOwkbnT
+48enjtKuTE9+2Ne4nBoja/Xp7nBzyeimhbj8eRuxKLbMwlhta30lBS0yCbbGB7PQ
+jurTx4juUUpPb1Aow3sgJzugIbuFcLrnASOEgCVcTYFZnRaucFCwYzPzVRrWXg6h
+YGYgncRLWUVusr8uzr5/kgfetqoC/G7hkrD7lkWZ0XtqLkfp5BAlVQ7ctaBjNb7a
+X9V0DyjBBLtaoNfA12Li8DZOswtl6w==
+=foeR
 -----END PGP SIGNATURE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/dev/Info.pm.tmpl 
new/Image-Info-1.44/dev/Info.pm.tmpl
--- old/Image-Info-1.43/dev/Info.pm.tmpl        2022-10-03 19:50:42.000000000 
+0200
+++ new/Image-Info-1.44/dev/Info.pm.tmpl        2023-08-03 19:11:29.000000000 
+0200
@@ -13,12 +13,12 @@
 # modify it under the same terms as Perl v5.8.8 itself.
 #
 # Previously maintained by Tels - (c) 2006 - 2008.
-# Currently maintained by Slaven Rezic - (c) 2008 - 2022.
+# Currently maintained by Slaven Rezic - (c) 2008 - 2023.
 
 use strict;
 use vars qw($VERSION @EXPORT_OK);
 
-$VERSION = '1.43';
+$VERSION = '1.44';
 
 require Exporter;
 *import = \&Exporter::import;
Binary files old/Image-Info-1.43/img/test.avif and 
new/Image-Info-1.44/img/test.avif differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/lib/Image/Info/AVIF.pm 
new/Image-Info-1.44/lib/Image/Info/AVIF.pm
--- old/Image-Info-1.43/lib/Image/Info/AVIF.pm  1970-01-01 01:00:00.000000000 
+0100
+++ new/Image-Info-1.44/lib/Image/Info/AVIF.pm  2023-07-25 20:24:01.000000000 
+0200
@@ -0,0 +1,241 @@
+package Image::Info::AVIF;
+
+{ use 5.006; }
+use warnings;
+use strict;
+
+our $VERSION = "0.01";
+
+sub die_for_info($) { die bless({ err=>$_[0] }, __PACKAGE__."::__ERROR__") }
+
+BEGIN {
+    if("$]" >= 5.008) {
+       *io_string = sub ($) { open(my $fh, "<", \$_[0]); $fh };
+    } else {
+       require IO::String;
+       *io_string = sub ($) { IO::String->new($_[0]) };
+    }
+}
+
+sub read_block($$) {
+    my($fh, $len) = @_;
+    my $d = "";
+    while(1) {
+       my $dlen = length($d);
+       last if $dlen == $len;
+       my $n = read($fh, $d, $len - $dlen, $dlen);
+       if(!defined($n)) {
+           die_for_info "read error: $!";
+       } elsif($n == 0) {
+           die_for_info "truncated file";
+       }
+    }
+    return $d;
+}
+
+sub read_nulterm($) {
+    my($fh) = @_;
+    my $d = do { local $/ = "\x00"; <$fh> };
+    defined($d) && $d =~ /\x00\z/ or die_for_info "truncated file";
+    chop $d;
+    return $d;
+}
+
+sub read_heif($$) {
+    my($fh, $box_types_to_keep) = @_;
+    my %boxes;
+    while(!eof($fh)) {
+       my($len, $type) = unpack("Na4", read_block($fh, 8));
+       my $pos = 8;
+       my $bufp;
+       if($type =~ $box_types_to_keep && !exists($boxes{$type})) {
+           $boxes{$type} = "";
+           $bufp = \$boxes{$type};
+       }
+       if($len == 1) {
+           my($lenhi, $lenlo) = unpack("NN", read_block($fh, 8));
+           $pos += 8;
+           $len = ($lenhi << 32) | $lenlo;
+           $len >> 32 == $lenhi or die_for_info "box size overflow";
+       }
+       $len >= $pos or die_for_info "bad box length";
+       $len -= $pos;
+       while($len) {
+           my $toread = $len < (1<<16) ? $len : (1<<16);
+           my $d = read_block($fh, $toread);
+           defined($bufp) and $$bufp .= $d;
+           $len -= $toread;
+       }
+    }
+    return \%boxes;
+}
+
+my @primaries_type;
+$primaries_type[$_] = "RGB" foreach 1, 4, 5, 6, 7, 9, 11, 22;
+$primaries_type[10] = "CIEXYZ";
+
+sub process_file {
+    my($info, $source) = @_;
+    if(!eval { local $SIG{__DIE__};
+       my $boxes = read_heif($source, qr/\A(?:ftyp|meta)\z/);
+       my $ftyp = $boxes->{ftyp};
+       defined $ftyp or die_for_info "no ftyp box";
+       length($ftyp) >= 8 && !(length($ftyp) & 3)
+           or die_for_info "malformed ftyp box";
+       substr($ftyp, 0, 4) eq "avif"
+           or die_for_info "major brand is not \"avif\"";
+       $info->replace_info(0, file_media_type => "image/avif");
+       $info->replace_info(0, file_ext => "avif");
+       my $mboxes;
+       {
+           my $meta = $boxes->{meta};
+           defined $meta or die_for_info "no meta box";
+           my $metafh = io_string($meta);
+           read_block($metafh, 1) eq "\x00"
+               or die_for_info "malformed meta box";
+           read_block($metafh, 3);
+           $mboxes = read_heif($metafh, qr/\A(?:hdlr|iprp)\z/);
+       }
+       {
+           my $hdlr = $mboxes->{hdlr};
+           defined $hdlr or die_for_info "no hdlr box";
+           my $hdlrfh = io_string($hdlr);
+           read_block($hdlrfh, 1) eq "\x00"
+               or die_for_info "malformed hdlr box";
+           read_block($hdlrfh, 3);
+           unpack("N", read_block($hdlrfh, 4)) == 0
+               or die_for_info "non-zero pre-defined value";
+           read_block($hdlrfh, 4) eq "pict"
+               or die_for_info "handler type is not \"pict\"";
+           read_block($hdlrfh, 12);
+           read_nulterm($hdlrfh);
+       }
+       my $pboxes;
+       {
+           my $iprp = $mboxes->{iprp};
+           defined $iprp or die_for_info "no iprp box";
+           my $iprpfh = io_string($iprp);
+           $pboxes = read_heif($iprpfh, qr/\Aipco\z/);
+       }
+       my $cboxes;
+       {
+           my $ipco = $pboxes->{ipco};
+           defined $ipco or die_for_info "no ipco box";
+           my $ipcofh = io_string($ipco);
+           $cboxes = read_heif($ipcofh,
+                       qr/\A(?:irot|clap|ispe|pixi|colr|pasp)\z/);
+       }
+       my $rot = 0;
+       if(defined(my $irot = $cboxes->{irot})) {
+           length($irot) >= 1 or die_for_info "malformed irot box";
+           my($angle) = unpack("C", $irot);
+           !($angle & -4) or die_for_info "malformed irot box";
+           $rot = 1 if $angle & 1;
+       }
+       if(defined(my $clap = $cboxes->{clap})) {
+           length($clap) >= 32 or die_for_info "malformed clap box";
+           my($width_num, $width_den, $height_num, $height_den) =
+               unpack("NNNN", $clap);
+           $width_den != 0 && $height_den != 0
+               or die_for_info "malformed clap box";
+           my $width = int($width_num/$width_den);
+           my $height = int($height_num/$height_den);
+           ($width, $height) = ($height, $width) if $rot;
+           $info->replace_info(0, width => $width);
+           $info->replace_info(0, height => $height);
+       } elsif(defined(my $ispe = $cboxes->{ispe})) {
+           length($ispe) >= 12 or die_for_info "malformed ispe box";
+           my($ver, undef, $width, $height) = unpack("Ca3NN", $ispe);
+           $ver == 0 or die_for_info "malformed ispe box";
+           ($width, $height) = ($height, $width) if $rot;
+           $info->replace_info(0, width => $width);
+           $info->replace_info(0, height => $height);
+       }
+       if(defined(my $pixi = $cboxes->{pixi})) {
+           length($pixi) >= 5 or die_for_info "malformed pixi box";
+           my($ver, undef, $planes) = unpack("Ca3C", $pixi);
+           $ver == 0 or die_for_info "malformed pixi box";
+           length($pixi) >= 5+$planes or die_for_info "malformed pixi box";
+           $info->replace_info(0, SamplesPerPixel => $planes);
+           $info->replace_info(0, BitsPerSample =>
+               [ map { unpack(q(C), substr($pixi, 5+$_, 1)) } 0..$planes-1 ]);
+       }
+       if(defined(my $colr = $cboxes->{colr})) {
+           length($colr) >= 4 or die_for_info "malformed colr box";
+           my $type = substr($colr, 0, 4);
+           if($type eq "nclx") {
+               length($colr) >= 11 or die_for_info "malformed colr box";
+               my($prim) = unpack("n", substr($colr, 4, 2));
+               if(defined(my $ctype = $primaries_type[$prim])) {
+                   $info->replace_info(0, color_type => $ctype);
+               }
+           }
+       }
+       if(defined(my $pasp = $cboxes->{pasp})) {
+           length($pasp) >= 8 or die_for_info "malformed pasp box";
+           my($hspc, $vspc) = unpack("NN", $pasp);
+           $info->replace_info(0, resolution => "$vspc/$hspc");
+       }
+       1;
+    }) {
+       my $err = $@;
+       if(ref($err) eq __PACKAGE__."::__ERROR__") {
+           $info->replace_info(0, error => $err->{err});
+       } else {
+               die $err;
+       }
+    }
+}
+
+1;
+
+=begin register
+
+MAGIC: /\A....ftypavif/s
+
+Supports the basic standard info key names.
+
+=end register
+
+=head1 NAME
+
+Image::Info::AVIF - AV1 Image File Format support for Image::Info
+
+=head1 SYNOPSIS
+
+    use Image::Info qw(image_info);
+
+    $info = image_info("image.avif");
+    if($error = $info->{error}) {
+       die "Can't parse image info: $error\n";
+    }
+    $color = $info->{color_type};
+
+=head1 DESCRIPTION
+
+This module supplies information about AVIF files within the
+L<Image::Info> system.  It supports the basic standard info key names.
+
+=head1 SEE ALSO
+
+L<Image::Info>
+
+=head1 AUTHOR
+
+Andrew Main (Zefram) <[email protected]>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2023 Andrew Main (Zefram) <[email protected]>
+
+=head1 LICENSE
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 ACKNOWLEDGEMENT
+
+The development of this module was funded by
+Preisvergleich Internet Services AG.
+
+=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/lib/Image/Info.pm 
new/Image-Info-1.44/lib/Image/Info.pm
--- old/Image-Info-1.43/lib/Image/Info.pm       2022-10-03 19:52:15.000000000 
+0200
+++ new/Image-Info-1.44/lib/Image/Info.pm       2023-08-03 19:12:28.000000000 
+0200
@@ -13,12 +13,12 @@
 # modify it under the same terms as Perl v5.8.8 itself.
 #
 # Previously maintained by Tels - (c) 2006 - 2008.
-# Currently maintained by Slaven Rezic - (c) 2008 - 2022.
+# Currently maintained by Slaven Rezic - (c) 2008 - 2023.
 
 use strict;
 use vars qw($VERSION @EXPORT_OK);
 
-$VERSION = '1.43';
+$VERSION = '1.44';
 
 require Exporter;
 *import = \&Exporter::import;
@@ -175,6 +175,7 @@
    return "PPM" if /^P[1-6]/;
    return "XPM" if /(^\/\* XPM 
\*\/)|(static\s+char\s+\*\w+\[\]\s*=\s*{\s*"\d+)/;
    return "XBM" if /^(?:\/\*.*\*\/\n)?#define\s/;
+   return "AVIF" if /\A....ftypavif/s;
    return "SVG" if /^(<\?xml|[\012\015\t ]*<svg\b)/;
    return "WEBP" if /^RIFF.{4}WEBP/s;
    return undef;
@@ -467,6 +468,10 @@
 =over
 
 
+=item AVIF
+
+Supports the basic standard info key names.
+
 =item BMP
 
 This module supports the Microsoft Device Independent Bitmap format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Image-Info-1.43/t/avif.t new/Image-Info-1.44/t/avif.t
--- old/Image-Info-1.43/t/avif.t        1970-01-01 01:00:00.000000000 +0100
+++ new/Image-Info-1.44/t/avif.t        2023-07-25 20:20:14.000000000 +0200
@@ -0,0 +1,26 @@
+use warnings;
+use strict;
+
+use Test::More tests => 16;
+
+use_ok "Image::Info", qw(image_info);
+
+chdir 't' if -d 't';
+my $i = image_info("../img/test.avif");
+ok $i;
+ok !exists($i->{error});
+is $i->{file_media_type}, "image/avif";
+is $i->{file_ext}, "avif";
+is $i->{width}, 150;
+is $i->{height}, 113;
+is $i->{color_type}, "RGB";
+ok !exists($i->{resolution});
+is $i->{SamplesPerPixel}, 3;
+is_deeply $i->{BitsPerSample}, [8,8,8];
+ok !exists($i->{Comment});
+ok !exists($i->{Interlace});
+ok !exists($i->{Compression});
+ok !exists($i->{Gamma});
+ok !exists($i->{LastModificationTime});
+
+1;

Reply via email to