J'ai utilisé la bibliothèque libheic en C++ pour décoder les fichiers image heic, mais c'est extrêmement lent. Il faut environ 1 à 2 secondes pour décoder une image. C'est la même chose dans le visualiseur de photos de Windows. Mais comment puis-je faire défiler des centaines de photos heic instantanément sur le visualiseur de photos de l'iPhone ?
Réponse
Trop de publicités?Je vais supposer que vous voulez dire "libheif" là où vous avez écrit "libheic" (le premier est une bibliothèque populaire pour décoder les fichiers HEIC, tandis que le second n'est pas quelque chose que l'on peut trouver n'importe où).
Il existe plusieurs raisons pour lesquelles le visualiseur de photos intégré à iOS est rapide alors que votre propre décodeur basé sur libheif est lent :
-
Les appareils iOS avec un processeur A10 ou plus récent (c'est-à-dire l'iPhone 7 et plus récent) ont un décodage matériel intégré. Cela signifie que les logiciels exploitant cette fonctionnalité peuvent effectuer un décodage accéléré par matériel, ce qui est généralement beaucoup plus rapide que le décodage d'images basé uniquement sur le processeur.
-
Les ingénieurs d'Apple ont passé beaucoup de temps et d'efforts à optimiser le logiciel pour décoder les fichiers HEIC, car ils sont largement utilisés dans tout le système iOS. Cela inclut le fait de faciliter grandement aux développeurs d'applications (de première ou de troisième partie) de profiter du décodage accéléré par matériel.
-
Vous n'avez peut-être pas compilé libheif et ses dépendances de la manière la plus efficace, ou n'avez pas utilisé les paramètres les plus efficaces lors de l'exécution de votre programme. Autrement dit, les options que vous utilisez lors de la compilation du programme peuvent faire une énorme différence en termes de performances.
libheif utilise libde265 pour décoder réellement les données d'image HEIC. libde265 ne prend pas en charge les fonctionnalités de décodage matériels accélérés Apple A ou M series. Cependant, il prend en charge l'accélération SSE plus générale (sur les processeurs x86, lorsqu'elle est activée).
-
libheif n'est pas connu pour être "super rapide". Je ne pense pas que l'intention de libheif soit d'être "l'option la plus rapide" - il semble plutôt être axé sur le support d'un large éventail de fonctionnalités, la facilité d'utilisation et la compatibilité avec une grande variété de langages de programmation.
Par exemple, j'ai vu que des régressions de performance ont été introduites dans le passé en échange de plus de fonctionnalités. À un moment donné, j'ai vu un benchmark notant une chute des performances de décodage d'image à presque un tiers de son niveau précédent lors de la mise à jour de libheif vers une version récente par rapport à l'ancienne version 1.6.
-
Il est possible d'utiliser divers "trucs du métier" pour optimiser par exemple le défilement à travers une longue liste de photos dans un visualiseur de photos. En particulier, les fichiers HEIC peuvent en fait contenir des miniatures intégrées encodées avec JPEG. Ainsi, vous pouvez effectuer un décodage très rapide des miniatures 320x240 intégrées dans le fichier HEIC, dans les cas où vous n'avez besoin que d'une miniature et pouvez différer le décodage de l'image réelle à plus tard.