Core Image
Core image est le nouveau framework de traitement d'image de Tiger. Il rejoint Core Audio, le framework de traitement audio existant d'Apple. Les technologies partagent plus qu'une convention de noms. Elle fournissent toutes les deux une architecture de greffon pour traiter leurs types de données respectifs. Ces greffons s'appellent des "unités" (units). Core Audio utilise des unités Audio, et Core Image utilise des Unités Image.
Core image est conceptuellement très simple. Une image d'entrée passe par une série d'Unités Image en chaîne pour fournir l'image de sortie.
Core Image
Le pipe-line de l'image utilise des valeurs flottantes sur 32 bits pour chacun des quatre canaux (rouge, vert, bleu et alpha) pour conserver autant de précision que possible, à travers la chaîne des calculs. Tiger est livré avec 60 Unités Image pré-définies qui couvrent les tâches de manipulation d'image les plus courantes : flou, distorsions, ajustement de couleurs, etc...
Le traitement d'image ne peut être plus simple que dans le diagramme ci-dessus. Mais c'est dans l'implantation que Core Image brille véritablement. Deux aspects le rendent bien plus attractif que le diagramme ci-dessus pourrait le laisser penser.
Bien que Core Image soit conceptuellement une chaîne, avec la sortie d'une Unité Image qui constitue l'entrée de l'unité suivante, une implantation naïve de ce concept serait bien trop lente. La performance se dégraderait linéairement à mesure que le nombre d'unités d'images s'accroît, et il y aurait une quantité considérable d'entrées/sorties associée à chaque lecture ou écriture de tous les résultats intermédiaires.
Une implantation naïve de Core Image
Ce n'est pas la façon dont Core Image a été implanté dans Tiger. Au lieu de passer en séquence à travers toutes les Unités Image, en fournissant une image intermédiaire à chaque étape, Core Image utilise ce qu'on appelle une "évaluation paresseuse".
Passer une image par une Unité Image n'entraîne en fait aucune modification. La sortie d'une Unité Image est seulement une "recette" sur la façon de produire le résultat désiré. Quand l'image passe à travers toutes les Unités Image, chaque Unité Image rajoute des étapes supplémentaires à la recette.
Le rendu réel de l'image n'est fait que quand c'est absolument nécessaire. Normalement, à la fin de la séquence des Unités Image. A ce moment là, la recette complète est réellement exécutée, et donne l'image résultante finale. Si bien que l'implantation ressemble plutôt à ceci :
Core Image dans Tiger
Il y a une seule étape "accomplir le travail", aucun résultat intermédiaire (potentiellement important) à lire et à écrire, et une seule "Unité Image effective" (le gros nuage sur le diagramme) qui est une combinaison de toutes les Unités Image réelles.
Le deuxième aspect malin de l'implantation de Core Image dans Tiger est la façon dont il produit et exécute le code qui crée l' "Unité Image effective". Core Image inclut un compilateur à la volée (JIT) qui convertit la "recette", ignorante de l'implantation, pour toute la chaîne d'Unité Image, en code optimisé, en choisissant le matériel le plus rapide disponible au moment de l'exécution.
Dans de très nombreux cas, cela veut dire Altivec. Sur les Macs à multi-processeurs, le compilateur à la volée de Core Image va même créer du code SMP qui utilise tous les processeurs disponibles. Comme ce code est créé à la volée, et adapté à un ensemble spécifique d'Unités Image qui constitue la recette complète, les possibilités d'optimisation ne sont limitées que par l'intelligence du compilateur à la volée.
Si une carte vidéo moderne est installée, Altivec peut ne pas être "le matériel le plus rapide disponible". A la place, le compilateur à la volée peut cibler un GPU, et produire (pour l'essentiel) un calculateur de pixels pour exécuter la recette via OpenGL. C'est exactement dans les attributions préférées d'un GPU, et le travail est fait rapidement.
A quelle vitesse ? La démo standard de Core Image montre une poignée d'Unités Image appliquées à une image source, chacune s'exécutant immédiatement quand elle est appliquée. Quand la recette est complète, chacune des Unités Image peut être ajustée (augmenter le rayon d'un flou, ou déplacer le centre d'un effet de distorsion), et l'image est mise à jour en temps réel. C'est impressionnant.
Et ce qui l'est plus encore, c'est que rajouter d'autres Unités Image semble n'avoir aucun effet sur la performance. Du moins, initialement. Tant que le compilateur à la volée de Core Image produit du code qui s'exécute confortablement sur le GPU courant, il n'y a pas de différence perceptible de performance entre une chaîne avec deux Unités Image et une chaîne avec huit. Mais dès que la recette demande plus que le nombre de passes de rendu qu'un GPU est capable de faire, disons, 1/30 ème de seconde, la performance commence à chuter de façon perceptible.
Quiconque voit une démo de Core Image ne peut s'empêcher de penser à Photoshop. Core Image semble faire la même chose que fait Photoshop avec ses fitres, mais Core Image le fait en temps réel. La vision d'un "tueur de Photoshop" animé par Core Image saute rapidement à l'esprit.
Malheureusement, cette vision souffre d'une vue très étroite de ce que Photoshop fait réellement. Bien que Adobe Photoshop ait été initialement (et d'une façon compréhensible) identifié par ses caractéristiques de filtrage d'image quand il fut introduit en 1990, celles-ci sont peut-être les caractéristiques les moins intéressantes de l'application aujourd'hui.
Il n'est pas très difficile, pour un soi disant "tueur de Photoshop" de réimplanter chacun des filtres de Photoshop. (Si c'était tout ce qu'il faut faire pour être "tueur de Photoshop", le GIMP -gratuit- serait l'application graphique dominante de nos jours). La partie difficile est d'atteindre le niveau de quinze années de raffinement dans le domaine du dessin et des outils d'édition, dans la compatibilité et la conversion des formats de fichiers, dans l'intégration du flux de travail, et toutes ces choses qui amènent les clients de Photoshop à revenir, version après version.
Ce n'est pas pour dire que la création d'un "tueur de Photoshop" est impossible, ou qu'une telle application ne peut pas utiliser (ou n'utilisera pas) une technologie comme Core Image. Mais Core Image ne sera pas d'une aide décisive pour ce travail. En fait, en tant que technologie propre au Mac, n'importe quel "tueur de Photoshop" serait probablement obligé de contourner entièrement Core Image.
Désillusions de grandeur mises à part, Core Image est vraiment puissant, et je suis sûr qu'il y a plein d'applications non soucieuses de tuer Photoshop, qui bénéficieront de son usage. En fait, Tiger l'utilise réellement pour implanter la technologie qui suit.