Bonjour,
dans le cadre de notre projet, nous avons besoin de faire de l'affichage d'image très rapidement sur un écran servant à faire de la calibration de caméra.
Pour faire simple :
- nos caméras sont dans le noir, au dessus de l'écran de calibration (rétroéclairage éteint).
- les caméras acquièrent en permanence
- on affiche l'image à l'écran (les cristaux LCD de l'écran changent)
- on allume le rétroéclairage de l'écran un laps de temps nécessaire à la mesure
- on éteint le rétroéclairage
- on change d'image …
- etc …
Par ce processus, on s'assure de ce qui est affiché à l'écran, et on maitrise l’acquisition.
La configuration du PC :
- carte Nvidia Quadro NVS 300
- Linux Kernel 3.6.9
- driver Nvidia (pas driver nouveau)
- OpenSuse 12.1
- et le reste je pense pas util
Les premiers tests ont démontré qu'on ne maitrisé pas l'affichage de l'image. En effet, il y a eu des cas où l'image n'était pas complétement affichée (cristaux pas tous en place) au moment de l'allumage du rétroéclairage et de l'acquisition.
Je ne pense pas que le driver Nvidia soit capable de me dire qu'il a finit d'envoyer l'image vers l'écran et ainsi m'assurer que tout est en place. Puisqu'en plus il gère un affichage permanent, je ne vois pas vraiment comment il pourrait me dire "ouaip mon gars ton image est bien affiché, où tu voulais, quand tu voulais".
Alors quelqu'un m'a dis … utilise le framebuffer c'est plus rapide. J'ai dis "OK". Alors j'ai cherché …
Le framebuffer avec mon driver nvidia actuel ne gère que du 1280x1024 … hors mon écran de calibration fait 1920x1200. Donc pas bon …
J'ai fais un "hwinfo --framebuffer" pour savoir ça.
J'ai dis "attends mais y a celui du driver nouveau qui sait faire je crois" … oui sauf qu'il gère pas ma carte graphique.
Je me suis donc tourné vers d'autre choses mais je sèche là.
Il faudrait que je trouve un moyen en gros d'être certain que mon image (les cristaux) soit bien affichée, avant d'enclencher le process de rétroéclairage.
Je pourrai mettre une pause d'une seconde entre affichage et rétroéclairage, je serai tranquille, mais on a un total de 360 images à afficher pendant 50ms. Oui je sais ça ferait que 6min. Puis si je met une pause de 500ms, ça fait plus que trois minutes … mais c'est pas ce qu'on veut.
Enfin, c'est pas ce qu'on me demande :-)
Aujourd'hui le problème surtout c'est qu'on passe par une application Qt fait maison pour afficher l'image et qu'on ne gère pas bien le temps de chargement de cette image. C'est toujours plus rapide que tout le reste, mais pas assez. D'où l'idée du framebuffer.
Si quelqu'un a une idée/solution. Je suis preneur.
Et petite précision, le PC en question gère deux écrans : l'affichage utilisateur classique et l'écran pour la calibration.
Il faut que je puisse gérer les deux affichages en même temps bien sur.
Merci
Sylvain
# c'est pas l'option Vsync qui assure cela ?
Posté par NeoX . Évalué à 2.
ou vblank selon les cartes graphiques
http://stackoverflow.com/questions/17196117/disable-vertical-sync-for-glxgears
[^] # Re: c'est pas l'option Vsync qui assure cela ?
Posté par sygirard . Évalué à 1.
C'est à dire ?
La synchronisation verticale de mon écran ? Il faut que j'essaie de la rendre plus rapide ?
[^] # Re: c'est pas l'option Vsync qui assure cela ?
Posté par NeoX . Évalué à 2.
quand tu actives le vsync ou le vblank
la carte graphique, attend la synchro pour passer à l'image suivante
ce qui limite le nombre d'image par seconde.
dans ton cas, c'est peut-etre aussi ce qui permettra de "faire une pause" entre 2 images.
[^] # Re: c'est pas l'option Vsync qui assure cela ?
Posté par sygirard . Évalué à 1.
Ben en fait, pour qu'on se comprenne bien, j'ai pas vraiment besoin de faire une pause.
Il faut juste que je sois assuré qu'au moment au j'active le rétroéclairage, l'image soit affichée complétement à l'écran.
Je ne maitrise pas le temps d'ouverture d'une image par le système via une application.
Framebuffer était pour moi une manière de m'assurer que l'image s'affichait très rapidement .. plus rapidement que par application Qt et serveur X traditionnel
[^] # Re: c'est pas l'option Vsync qui assure cela ?
Posté par sygirard . Évalué à 1.
Et puis je pense que ce que je veux faire n'est pas faisable car j'ai une carte graphique avec 2 sorties écrans, et je voudrais un écran avec driver nvidia et l'autre avec framebuffer. Pas possible.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.