Table des matières
HDR-10bpp-Display-Test : Assembler des canaux dix bits pour Cairo
Cette expérience affiche des images dans GTK avec Cairo. Viewer3.py rend la représentation explicite: les canaux sont masqués et assemblés dans un tampon uint32 avant la création d’une surface RGB30.
- Langages
- 2Répartition du code
- Composants documentés
- 2Explorer les modules
- Documents source
- 1Lire les instructions
Langages du dépôtPython 98.43%2
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| Python | 8 200 | |
| Shell | 131 |
1. Aperçu
1.1. Pourquoi il existe
Pipeline de test d'affichage 10 bits HDR vérifiant le banding de couleur et la luminance sous Linux.
1.2. Cas d’usage
Calibration et vérification d'écrans HDR 10 bits sur stations de travail Linux.
2. Cas d’utilisation
Des scripts Linux pour vérifier qu’un écran HDR affiche bien 10 bits par canal sous un serveur X en profondeur 30.
- Lancer X en profondeur 30
- Testeur d’écranServeur X (Xorg)
Xdepth.sh exécute startx -- -depth 30 et affiche la profondeur via xwininfo, avec repli sur 24 ; xorg.conf fixe DefaultDepth 30.
- Afficher un dégradé 10 bits
- Testeur d’écranÉcran HDR10
Viewer.py regroupe les canaux RVB d’images/gray_gradient_10.tiff dans une surface cairo FORMAT_RGB30 et la dessine dans une fenêtre GTK 3.
- Comparer 8 bits et 10 bits
- Testeur d’écranÉcran HDR10
Le dossier images/ contient gray_gradient_8.tiff à côté de gray_gradient_10.tiff : on peut afficher le même dégradé aux deux profondeurs et comparer les bandes à l’œil.
- Lire une vidéo en 10 bits
- Testeur d’écranÉcran HDR10
Viewer3.py ajoute une interface Typer avec --image-path et --video-path ; la vidéo est lue image par image avec le lecteur ffmpeg d’imageio, dans un fil, à 30 i/s.
2.1. Scénario : Vérifier un nouvel écran HDR10 sous Ubuntu
- Arrêter le gestionnaire d’affichage : sudo systemctl stop lightdm || sudo systemctl stop gdm, puis sudo pkill Xorg.
- Démarrer X avec startx -- -depth 30 (ou lancer Xdepth.sh).
- Confirmer avec xwininfo -root | grep Depth que la fenêtre racine indique une profondeur de 30.
- Lancer python3 Viewer.py pour ouvrir images/gray_gradient_10.tiff dans la fenêtre du visualiseur.
- Chercher des bandes dans le dégradé ; des transitions lisses indiquent que la chaîne 10 bits fonctionne de bout en bout.
Fichiers consultésREADME.mdViewer.pyViewer3.pyXdepth.shxorg.conf
3. Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
sudo apt-get install xserver-xorg python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 imagejpip3 install imageiogit clone https://github.com/yourusername/HDR-10bpp-Display-Test.gitcd HDR-10bpp-Display-Testsudo systemctl stop lightdm || sudo systemctl stop gdm
sudo pkill Xorg4. Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
4.1. Prerequisites
README.md
To run the test, you will need the following software installed on your system:
- X server
- Python 3
- GTK 3
- ImageJ (for displaying images with a 10-bit color depth)
- ImageIO (for reading image files) You can install these packages on Ubuntu or Debian-based systems by running the following command:
4.2. Installing
README.md
Exploitation et dépannage
4.3. Troubleshooting
README.md
Développement et contributions
4.4. HDR-10bpp-Display-Test
README.md
4.5. Running the test
README.md
To run the test, follow these steps:
- Clone the repository:
- Navigate to the project directory:
- Stop the display manager and X server:
- Start the X server with a color depth of 30:
- If the X server was started successfully, the output of the following command should indicate a depth of 30:
- Launch the viewer application:
- The viewer window will open. To display an image, run the following command:
- The image should be displayed in the viewer window. Verify that the image is displayed correctly and that the colors are accurate.
5. Fonctions et composants 2
- Pixels et affichage
- imageio lit le tableau source. _draw_on alloue un tampon et décale chaque canal selon la profondeur choisie, puis le transmet à cairo.ImageSurface.create_for_data. Le callback GTK affiche cette surface.
- Parcours vidéo
- Un thread lit les images vidéo et met à jour l’image courante à la cadence demandée. Le dessin traite aussi manuellement les événements GTK. Cette ancienne approche demande de vérifier quel thread possède les opérations d’interface.
6. Architecture
Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.
Image ou vidéo
- Vers Tableau imageio
Tableau imageio
- Depuis Image ou vidéo
- Vers Masquage et assemblage
Masquage et assemblage
- Depuis Tableau imageio
- Vers Surface Cairo RGB30
Surface Cairo RGB30
- Depuis Masquage et assemblage
- Vers Zone de dessin GTK
Zone de dessin GTK
- Depuis Surface Cairo RGB30
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
node_user(("Test operator"))
node_imagej["ImageJ"]
subgraph group_setup["Display setup"]
node_xserver["X server"]
end
subgraph group_viewers["Viewer applications"]
node_viewer1["Image viewer<br/>[Viewer.py]"]
node_viewer3["Image/video viewer<br/>[Viewer3.py]"]
end
subgraph group_render["Image rendering"]
node_gtk1["GTK window<br/>[Viewer.py]"]
node_gtk3["GTK window<br/>[Viewer3.py]"]
node_imageio1["Image input<br/>[Viewer.py]"]
node_imageio3["Image/video input<br/>[Viewer3.py]"]
node_cairo1["Cairo drawing<br/>[Viewer.py]"]
node_cairo3["Cairo drawing<br/>[Viewer3.py]"]
end
node_user -->|"starts at depth"| node_xserver
node_user -->|"launches"| node_viewer1
node_user -->|"launches"| node_viewer3
node_gtk1 -->|"dispatches draw"| node_cairo1
node_gtk3 -->|"dispatches draw"| node_cairo3
node_user -->|"opens image"| node_imagej
node_imagej -->|"displays for checking"| node_viewer1
group_viewers --> group_render
class node_xserver toneBlue
class node_viewer1,node_viewer3 toneAmber
class node_gtk1,node_gtk3,node_imageio1,node_imageio3,node_cairo1,node_cairo3 toneMint
class node_user,node_imagej toneIndigo
Un test Linux pour les affichages HDR et 10 bits. Le parcours démarre un serveur X à la profondeur demandée, ouvre une visionneuse d’images ou de vidéos, puis dessine les images avec GTK et Cairo pour les vérifier.
- Composants
- 11
- Connexions
- 13
- Liens appuyés par le code
- 13/13
Version texte du diagramme
Le diagramme regroupe les liens parallèles entre groupes : il en montre 8 sur 13. Liste complète :
- Test operator → X server (starts at depth)
- Test operator → Image viewer (launches)
- Test operator → Image/video viewer (launches)
- Image viewer → GTK window (creates window)
- Image viewer → Image input (reads image)
- Image viewer → Cairo drawing (draws image)
- GTK window → Cairo drawing (dispatches draw)
- Image/video viewer → GTK window (creates window)
- Image/video viewer → Image/video input (reads image/video)
- Image/video viewer → Cairo drawing (draws frames)
- GTK window → Cairo drawing (dispatches draw)
- Test operator → ImageJ (opens image)
- ImageJ → Image viewer (displays for checking)
Suivre un parcours dans le code
Examinez _draw_on pour voir comment la profondeur change les décalages et le format de surface. Le stockage dix bits concerne la précision numérique; les courbes HDR, les métadonnées et la calibration demandent un travail supplémentaire.
7. Dossier technique
Établi à partir du code au commit 9c72e07 (4 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.
7.1. Couches et modules
Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.
Mermaid Vue en couches
flowchart TB
subgraph L_core["Source principale"]
direction TB
core_0["(root)<br/>3 fichiers"]
end
| Module | Couche | Fichiers | Types | Extensions |
|---|---|---|---|---|
(root) | Source principale | 3 | 2 | .py .sh |
7.2. Modèle C4
Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.
UML 1 · Contexte du système
La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "HDR-10bpp-Display-Test", "Cette expérience affiche des images dans GTK avec Cairo")
@enduml
Niveau 2: les sources disponibles ne permettent pas de tracer cette vue.
UML 3 · Composants et couches
Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "HDR-10bpp-Display-Test") {
Boundary(L0, "Source principale", "layer") {
Component(M0_0, "(root)", "Python, .sh", "3 fichiers")
}
}
@enduml
UML 4 · Code
Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "HDR-10bpp-Display-Test" {
package "Viewer3.py" as F0 {
class "Viewer" as T0_0 {
_initUI()
_window_state()
size()
fullscreen()
display_image()
_draw()
}
}
}
@enduml
7.3. Flux de données
Les appels du diagramme GitDiagram, dans l’ordre où on les rencontre depuis les points d’entrée. GitDiagram produit ce graphe par IA; les chemins de fichiers cités ont été comparés à l’arbre du dépôt.
Mermaid Diagramme de séquence
sequenceDiagram
autonumber
participant P0 as Test operator
participant P1 as X server
participant P2 as Image viewer
participant P3 as Image/video viewer
participant P4 as ImageJ
participant P5 as GTK window
participant P6 as Image input
participant P7 as Cairo drawing
participant P8 as Image/video input
P0->>P1: starts at depth
P0->>P2: launches
P0->>P3: launches
P0->>P4: opens image
P2->>P5: creates window
P2->>P6: reads image
P2->>P7: draws image
P3->>P5: creates window
P3->>P8: reads image/video
P3->>P7: draws frames
P4->>P2: displays for checking
P5->>P7: dispatches draw
P5->>P7: dispatches draw
Étapes en texte
- Test operator vers X server starts at depth
- Test operator vers Image viewer launches
- Test operator vers Image/video viewer launches
- Test operator vers ImageJ opens image
- Image viewer vers GTK window creates window
- Image viewer vers Image input reads image
- Image viewer vers Cairo drawing draws image
- Image/video viewer vers GTK window creates window
- Image/video viewer vers Image/video input reads image/video
- Image/video viewer vers Cairo drawing draws frames
- ImageJ vers Image viewer displays for checking
- GTK window vers Cairo drawing dispatches draw
- GTK window vers Cairo drawing dispatches draw
7.4. Interface privée
Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).
- Assistant préfixé _
- 11
_initUIViewer.py:36_window_stateViewer.py:51_drawViewer.py:80
7.5. Logique métier
Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.
ViewerSource principale, 12 méthodes_initUI, _window_state, size, fullscreen, display_image, _draw
7.6. Pipeline CI/CD
Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.
7.7. Déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
local["Poste local"]
repo -->|"cloner et lancer"| local
Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.
Les sources disponibles ne documentent pas les autres sections.
8. Types et structure des fichiers
2 types déclarés, dont 2 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class td926548d9d56["Viewer"] {
__init__()
_initUI()
_window_state()
size()
}
class t015018d2192b["Viewer"] {
__init__()
_initUI()
_window_state()
size()
}
class bb574778f1f7f["object"] {
<<unresolved_base>>
}
bb574778f1f7f <|-- td926548d9d56
class ba71980200e35["object"] {
<<unresolved_base>>
}
ba71980200e35 <|-- t015018d2192b
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
9. Référence
4 / 4 fichiers admissibles lus (7 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
11. Fichiers à lire 3
12. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
Volume et montage de dossier
Un volume est un stockage géré par la plateforme de conteneurs ; un montage de dossier expose un chemin de l’hôte dans un conteneur.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Webhook
Une requête HTTP envoyée à un autre système lors d’un événement. Le destinataire doit valider la requête avant de la traiter.
13. Références
- antoinebou12. (2026, 5 novembre). HDR-10bpp-Display-Test. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). HDR-10bpp-Display-Test: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). Viewer3.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). Xdepth.sh. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). xorg.conf. [Source file] github.com.
- Boucher, A. (2024, 1 janvier). HDR-10bpp-Display-Test. [Project article] antoineboucher.info.
- Boucher, A. (2026, 23 octobre). HDR-10bpp-Display-Test : Assembler des canaux dix bits pour Cairo. [Project article] antoineboucher.info.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.