Capturez les images rendues par Splash#

Il est possible de capturer les images rendues par Splash (depuis les Cameras, Filters, Warps, …) et soit de les utiliser en interne (dans un script Python par exemple) ou de les envoyer à un autre logiciel à travers shmdata.

Il existe actuellement trois type de Sinks, qui fonctionnent de la même manière mais on des options qui diffèrent :

  • Sink, qui donne accès aux images rendues en interne. Il peut être mis en œuvre en Python en utilisant la classe du même nom

  • SinkShmdata, qui permet d’envoyer les images rendues dans une mémoire partagée shmdata

  • SinkShmdataEncoded, qui permet également d’envoyer les images rendues dans une mémoire partagée shmdata, mais en compressant les images préalablement en utilisant les codecs h264 ou h265.

Pour utiliser un Sink, vous devez y connecter un objet qui dérive du type Texture. Un filtre est ajouté automatiquement comme objet intermédiaire, pour permettre de redimensionner et faire des ajustements sur l’image avant de l’envoyer.

Pour illustrer comment fonctionnent les Sinks, nous allons commencer avec une configuration par défaut. Vous devriez avoir un graphe de configuration qui ressemble à ceci (dans le panneau Graph) :

Graphe de configuration par défaut de Splash

Graphe de configuration par défaut de Splash#

Considérons que nous souhaitons envoyer la sortie déformée d’une caméra à un autre logiciel. L’objet auquel nous devons nous connecter est le Warp nommé « win1_cam1_warp ». Pour commencer, créez un nouvel objet Sink, par exemple un SinkShmdata, et connectez le au Warp (sélectionnez le Warpo, puis Shift + cliquer avec le bouton gauche de la souris sur le nouveau Sink).

Ajouter un Sink

Ajouter un Sink#

Sink ajouté

Sink ajouté#

Une fois que c’est fait, tout ce qu’il vous reste à faire est d’activer le Sink en configurant son attribut “opened” à 1. À partir de ce moment vous pouvez tester que les données transitent hors de Splash en utilisant l’utilitaire sdflow de shmdata :

sdflow /tmp/splash_sink

Vous devriez voir des informations sur les paquets apparaître sur l’écran, ainsi que le caps des données (mentionnant la taille de l’image, l’espace de couleur, …). Si c’est le cas, la mémoire partagée est prête à être utilisée par tout logiciel compatible avec shmdata !

N’hésitez pas à jouer avec les autres paramètres, en particulier le taux de rafraîchissement et le débit de données (pour l’objet SinkShmdataEncoded). Notez également que l’image par défaut de l’image envoyée est la taille de l’image d’entrée (celle du Warp dans notre cas). Vous pouvez redimensionner cette image à travers l’objet Filter.

Enfin, le rendu interne de Splash est fait dans un espace de couleur linéaire, ce qui signifie que les images en sortie du Sink seront également dans un espace linéaire. Vous devrez les convertir en sRGB dans le logiciel réceptionnant les image pour qu’elles soient affichées correctement sur un écran sRGB.