Aller au contenu
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.

Matériel et infographie
  • Mis à jour
  • 13
  • Python · 98.43%
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.

Python98.43%
98.43%8 200 octets
Shell1.57%
1.57%131 octets
Langage%Octets
Python98.43%8 200
Shell1.57%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.

Diagramme de cas d’utilisation de HDR-10bpp-Display-Test : Lancer X en profondeur 30; Afficher un dégradé 10 bits; Comparer 8 bits et 10 bits; Lire une vidéo en 10 bitsHDR-10bpp-Display-TestLancer X en profondeur 30Afficher un dégradé 10 bitsComparer 8 bits et 10 bitsLire une vidéo en 10 bitsTesteur d’écran«système»Serveur X (Xorg)«système»Écran HDR10
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. Arrêter le gestionnaire d’affichage : sudo systemctl stop lightdm || sudo systemctl stop gdm, puis sudo pkill Xorg.
  2. Démarrer X avec startx -- -depth 30 (ou lancer Xdepth.sh).
  3. Confirmer avec xwininfo -root | grep Depth que la fenêtre racine indique une profondeur de 30.
  4. Lancer python3 Viewer.py pour ouvrir images/gray_gradient_10.tiff dans la fenêtre du visualiseur.
  5. 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.

README.md · Prerequisites
sudo apt-get install xserver-xorg python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 imagej
README.md · Installing
pip3 install imageio
README.md · Running the test
git clone https://github.com/yourusername/HDR-10bpp-Display-Test.git
README.md · Running the test
cd HDR-10bpp-Display-Test
README.md · Running the test
sudo systemctl stop lightdm || sudo systemctl stop gdm
sudo pkill Xorg

4. 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:
Lire les instructions complètes ↗

4.2. Installing

README.md

To install ImageIO, you can use pip:
Lire les instructions complètes ↗
Exploitation et dépannage

4.3. Troubleshooting

README.md

If the X server does not start with a color depth of 30, try starting it with a color depth of 24:
Lire les instructions complètes ↗
Développement et contributions

4.4. HDR-10bpp-Display-Test

README.md

This is a simple test to verify the HDR 4K display on Linux using a color depth of 10 bits per channel. The test requires an HDR 4K display and a Linux environment with the X server installed.
Lire les instructions complètes ↗

4.5. Running the test

README.md

To run the test, follow these steps:

  1. Clone the repository:
  2. Navigate to the project directory:
  3. Stop the display manager and X server:
  4. Start the X server with a color depth of 30:
  5. If the X server was started successfully, the output of the following command should indicate a depth of 30:
  6. Launch the viewer application:
  7. The viewer window will open. To display an image, run the following command:
  8. The image should be displayed in the viewer window. Verify that the image is displayed correctly and that the colors are accurate.
Lire les instructions complètes ↗
Documentation source

1 documents lus parmi 1 candidats.

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.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de HDR-10bpp-Display-Test
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
(root)Source principale32.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
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
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
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
  1. Test operator vers X server starts at depth
  2. Test operator vers Image viewer launches
  3. Test operator vers Image/video viewer launches
  4. Test operator vers ImageJ opens image
  5. Image viewer vers GTK window creates window
  6. Image viewer vers Image input reads image
  7. Image viewer vers Cairo drawing draws image
  8. Image/video viewer vers GTK window creates window
  9. Image/video viewer vers Image/video input reads image/video
  10. Image/video viewer vers Cairo drawing draws frames
  11. ImageJ vers Image viewer displays for checking
  12. GTK window vers Cairo drawing dispatches draw
  13. 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

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.

Viewer Source 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

  1. antoinebou12. (2026, 5 novembre). HDR-10bpp-Display-Test. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). HDR-10bpp-Display-Test: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). Viewer3.py. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). Xdepth.sh. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). xorg.conf. [Source file] github.com.
  6. Boucher, A. (2024, 1 janvier). HDR-10bpp-Display-Test. [Project article] antoineboucher.info.
  7. 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.