Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2011, à 12:21

tiebo35

xrandr pour correction trapèze videoprojecteur

Bonjour à tous,
J'essaie d'utiliser la commande XRANDR avec l'option "TRANSFORM" afin de déformer mon affichage sous Ubuntu 10.10 pour lui donner une forme de trapèze.
Le but est de réaliser une correction de trapèze pour un vidéo-projecteur fait maison (qui ne dispose d'aucun réglage de trapèze), qui ne projette pas dans l'axe de lécran, mais plus bas.
Les 9 paramètres de l'option "TRANSFORM" définissent une matrice, mais je ne sais pas quelles valeurs leur donner...
Sinon j'ai une autre piste, xrandr / keystone.5c qui pourrait être utile à mon application, mais je ne sais pas non plus comment l'utiliser....
Est-ce que quelqu'un a déjà fait ce genre de chose ou a une idé sur la question?
Merci d'avance!

Hors ligne

#2 Le 20/04/2011, à 14:06

gl38

Re : xrandr pour correction trapèze videoprojecteur

Voici un mode d'emploi sous la forme d'un diaporama
Cordialement,
Guy

Hors ligne

#3 Le 20/04/2011, à 22:25

tiebo35

Re : xrandr pour correction trapèze videoprojecteur

Merci, j'avais déjà trouvé ce document, mais je ne le trouve pas très explicite, je ne suis pas un expert...
As-tu déjà eu l'occasion d'utiliser ce genre de fonctions?

Hors ligne

#4 Le 21/04/2011, à 14:35

gl38

Re : xrandr pour correction trapèze videoprojecteur

Le programme keystone semble avoir un rapport avec xkeystone qui est installé sur ma machine. xkeystone a besoin de nikle et cairo-5c pour tourner (?). Il consent à ouvrir une fenêtre après avoir donné une très longue liste de fonctions.
Je n'arrive à rien avec cette fenêtre.

Le texte du programme keystone.5c explique le calcul à faire, dommage qu'il n'y ait pas la moindre doc !

Il faut faire de la géométrie projective : les parallèles ne le sont plus sur ton écran, et il faut envoyer le point d'intersection des côtés verticaux de ton image à l'infini pour obtenir une image non déformée. On utilise des vecteurs à 3 coordonnées pour représenter les points, mais deux vecteurs proportionnels représentent le même point d'où les coefficients q_1w, q_2w... du diaporama (page 18). Le calcul de la matrice est fait dans la fonction solve du programme.

On a un système à 13 inconnues qu'on ramène à 12 en posant m22=1 (m33 dans le diaporama), et on a 12 équations, et il n'y a qu'à résoudre !
Il y a des programmes tout prêts à l'emploi : par exemple ici.

Je reviens voir demain. S'il n'y a pas de solution, j'essaierai de faire un programme qui calcule la matrice à partir des coordonnées des points.
Cordialement,
Guy

Hors ligne

#5 Le 22/04/2011, à 23:45

tiebo35

Re : xrandr pour correction trapèze videoprojecteur

Je vois vaguement ce que tu veux dire mais ça n'a pas l'air trivial...
L'idéal serait de pouvoir avoir une interface graphique sur laquelle on déplace simplement les 4 coins de l'image comme on peut le faire avec MediaPlayerClassic et ffdshow sous Windows lors de la lecture d'un film.
Dans mon cas, le videoprojecteur sera toujours positionné de la même façon, donc si on peut trouver une solution avec les matrices et xrandr-transform, ça serait le top puisque tout l'affichage serait corrigé et pas que la lecture des films!
Je suppose que la matrice dépend aussi de la résolution du vidéoprojecteur?

Hors ligne

#6 Le 24/04/2011, à 15:05

gl38

Re : xrandr pour correction trapèze videoprojecteur

C'est galère !
Ce programme xkeystone semble d'après son listing faire le boulot, mais il ne fonctionne pas, du moins chez moi.
Le texte de keystone.5c est identique à xkeystone qui est donc écrit en clair (!?).
On peut donc copier chez soi le fichier /usr/bin/xkeystone, le rendre exécutable et le modifier à loisir.

Pour commencer il veut un output : il suffit de taper xrandr pour avoir le nom de celui que l'on veut modifier. On lançant

./xkeystone VGA1 2>log

le flot des fonctions ne s'affiche pas, une fenêtre où je ne peux rien faire s'affiche.

La ligne 154

         { x = 0, y = 0 } ...

du programme est étonnante. Il semble que c'est là que les coordonnées des sommets du quadrilatère s'initialisent, les ... me laissent rêveur ! J'ai mis à la place
{ x = 0, y = 0 }, { x = 1, y = 0 }, { x = 1, y = 1 }, { x = 0, y = 1 }
alors un calcul de matrice se produit, donnant

matrice = 
 0.0025, 0, 0
 0, 0.00381679389313, 0
 0, 0, 1

pour des points qui ont ces coordonnées

q0x = 0, q0y = 0
 q1x = 3.2, q1y = 0
q2x = 3.2, q2y = 3.90839694656488
 q3x = 0, q3y = 3.90839694656488

l'écran étant 1280x1024, ce n'est pas idiot ! car
3.2/0.0025=1280 et 3.90839694656488/0.00381679389313=1024

J'ai aussi essayé de faire le calcul donné dans le diaporama, on arrive en fait à un système linéaire de 6 équations à 6 inconnues. Mais là je croyais ma machine équipée pour faire le calcul, manque de pot, le maxima installé sous mon Ubuntu 9.10 veut bien faire 1+1 et trouve 2, mais se plante si on lui demande quelque chose de plus compliqué, d'après google, je ne suis pas le seul.
Sous Ubuntu 10.04, maxima a l'air de marcher, mais c'est moi qui fatigue !

Une consolation : ici
la commande

xrandr --fb 1024x768 --output VGA --transform 1.24,0.16,-124,0,1.24,0,0,0.000316,1

déforme mon écran rectangulaire en un trapèze !
A suivre.
Cordialement,
Guy

Dernière modification par gl38 (Le 24/04/2011, à 15:06)

Hors ligne

#7 Le 01/05/2011, à 15:14

gl38

Re : xrandr pour correction trapèze videoprojecteur

Une solution peut être d'installer maxima.
Une fois que c'est fait on copie le texte ci-dessous dans un fichier, mettons keystone2.

w:1024;
h:768;
x:30;
m22:1;
q0x:0;q0y:0;
q1x:640;q1y:0;
q2x:640-x;q2y:400;
q3x:x;q3y:400;
m: matrix ([m00,m01,m02],[m10,m11,m12],[m20,m21,1]);
m02:q0x;
m12:q0y;
a : ((q2x - q3x)*(q1y - q2y) - (q2y - q3y)*(q1x - q2x)) * h;
b : (q2x - q1x - q3x + q0x) * (q1y - q2y) - (q2y - q1y - q3y + q0y) * (q1x - q2x);
m21 : - b / a;
m20 : (m21 * (q2x - q3x) * h + q2x - q1x - q3x + q0x) / ((q1x - q2x) * w);
m00 : m20 * q1x + (q1x - q0x) / w;
m10 : m20 * q1y + (q1y - q0y) / w;
m01 : m21 * q3x + (q3x - q0x) / h;
m11 : m21 * q3y + (q3y - q0y) / h;
''m;
print(m00, m01, m02, m10, m11, m12, m20, m21, m22);
n:invert(m);
float(''n);

Il faut donner dans les 2 premières lignes les valeurs w et h qui correspondent à la largeur et la hauteur l'écran que l'on veut déformer et qui sont données par xrandr.
Ensuite, j'ai supposé que le vidéoprojecteur était face au centre de l'écran, et on donne les coordonnées des points q0, q1, q2, q3 .
q0 est en haut à gauche, q1 en haut à droite, q2 en bas à droite et q3 en bas à gauche.
je suppose que q0 et q1 sont où on veut et qu'il faut déplacer q2 et q3 d'une valeur x.
J'ai choisi 640 et 400 dans un écran 1024x768 pour être sûr de voir ce qui se passe.

Si on tape dans un terminal

maxima -b keystone2

on doit obtenir une matrice numérique, que l'on donne à l'option transform de xrandr,
soit avec les valeurs données dans le fichier :

xrandr --fb 1024x768 --output VGA1 --transform 1.6,-0.12,0,0,1.74,0,0,-0.000234375,1

Pour d'autres valeurs, il suffit de modifier w, h, et les coordonnées des points q0, q1, q2, q3.
Cordialement,
Guy

Hors ligne

#8 Le 01/05/2011, à 22:12

gl38

Re : xrandr pour correction trapèze videoprojecteur

Plus pratique, au lieu de maxima on peut installer octave
et utiliser le fichier keystone.inp

w=1024
h=768
x=30
m22=1
q0x=0
q0y=0
q1x=640
q1y=0
q2x=640-x
q2y=400
q3x=x
q3y=400
m02=q0x
m12=q0y
a = ((q2x - q3x)*(q1y - q2y) - (q2y - q3y)*(q1x - q2x)) * h
b = (q2x - q1x - q3x + q0x) * (q1y - q2y) - (q2y - q1y - q3y + q0y) * (q1x - q2x)
m21 = - b / a
m20 = (m21 * (q2x - q3x) * h + q2x - q1x - q3x + q0x) / ((q1x - q2x) * w)
m00 = m20 * q1x + (q1x - q0x) / w
m10 = m20 * q1y + (q1y - q0y) / w
m01 = m21 * q3x + (q3x - q0x) / h
m11 = m21 * q3y + (q3y - q0y) / h
m=[m00 m01 m02
 m10 m11 m12
 m20 m21 m22]
n=inv(m)
printf('%f,%f,%f,%f,%f,%f,%f,%f,%f\n',n(1,1),n(1,2),n(1,3),n(2,1),n(2,2),n(2,3),n(3,1),n(3,2),n(3,3))

On tape alors

octave keystone.inp

c'est presque le même fichier qu'avec maxima, mais on obtient directement grâce à printf l'argument à donner à --transform.
Cordialement,
Guy

Hors ligne

#9 Le 04/05/2011, à 23:10

tiebo35

Re : xrandr pour correction trapèze videoprojecteur

Merci pour ce flot d'explications!
En utilisant Octave avec le fichier keystone.inp que tu proposes, j'ai l'erreur suivante:
error: `octave' undefined near line 11 column 1
Il manque des déclarations de variables ou quelque chose du style?

D'autre part, lorsque j'utilise la commande "xrand", j'obtiens le message d'erreur:
- avec mon écran de PC (19"):
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 240, current 1280 x 1024, maximum 1280 x 1024
default connected 1280x1024+0+0 0mm x 0mm
   1280x1024      50.0*    51.0 
   1280x960       52.0 
   1152x864       53.0     54.0     55.0     56.0 
   1024x768       57.0     58.0     59.0 
   960x600        60.0 
   960x540        61.0 
   840x525        62.0     63.0     64.0     65.0 
   832x624        66.0 
   800x600        67.0     68.0     69.0     70.0 
   720x450        71.0 
   700x525        72.0     73.0 
   680x384        74.0     75.0 
   640x480        76.0     77.0     78.0     79.0     80.0 
   512x384        81.0     82.0 
   400x300        83.0 
   320x240        84.0     85.0 

- avec mon vidéoprojecteur (15"):
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 240, current 1024 x 768, maximum 1024 x 768
default connected 1024x768+0+0 0mm x 0mm
   1024x768       50.0*    51.0     52.0     53.0 
   832x624        54.0 
   800x600        55.0     56.0     57.0     58.0     59.0 
   720x450        60.0 
   680x384        61.0     62.0 
   640x480        63.0     64.0     65.0     66.0     67.0     68.0 
   512x384        69.0     70.0 
   400x300        71.0 
   320x240        72.0     73.0

Lorsque je lance la commande: "xrandr --fb 1024x768 --output default --transform 1.6,-0.12,0,0,1.74,0,0,-0.000234375,1", j'obtiens:
- avec mon écran de PC (19"):
xrandr: Failed to get size of gamma for output default
xrandr: specified screen 1024x768 not large enough for output default (2676x2328+-161+0)
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  154 (RANDR)
  Minor opcode of failed request:  26 (RRSetCrtcTransform)
  Value in failed request:  0x162
  Serial number of failed request:  22
  Current serial number in output stream:  23

- avec mon vidéoprojecteur (15"):
xrandr: Failed to get size of gamma for output default
xrandr: specified screen 1024x768 not large enough for output default (1988x1622+-112+0)
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  154 (RANDR)
  Minor opcode of failed request:  26 (RRSetCrtcTransform)
  Value in failed request:  0x162
  Serial number of failed request:  20
  Current serial number in output stream:  21

Faut-il faire une manip préalable sur l'affichage avec d'autres commandes?
Je ne comprends pas trop ce que signifie "xrandr: Failed to get size of gamma for output default"...
Merci d'avance pour tes explications, on touche presque au but! smile

Hors ligne

#10 Le 05/05/2011, à 21:33

gl38

Re : xrandr pour correction trapèze videoprojecteur

Pour octave, j'ai retesté, ça me donne ceci :

GNU Octave, version 3.0.5
Copyright (C) 2008 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Octave was configured for "i486-pc-linux-gnu".

Additional information about Octave is available at [url]http://www.octave.org[/url].

Please contribute if you find this software useful.
For more information, visit [url]http://www.octave.org/help-wanted.html[/url]

Report bugs to <bug@octave.org> (but first, please read
[url]http://www.octave.org/bugs.html[/url] to learn how to write a helpful report).

For information about changes from previous versions, type `news'.

w =  1024
h =  768
x =  30
m22 =  1
q0x = 0
q0y = 0
q1x =  640
q1y = 0
q2x =  610
q2y =  400
q3x =  30
q3y =  400
m02 = 0
m12 = 0
a = -178176000
b =  24000
m21 =  1.3470e-04
m20 = 0
m00 =  0.62500
m10 = 0
m01 =  0.043103
m11 =  0.57471
m =

   0.62500   0.04310   0.00000
   0.00000   0.57471   0.00000
   0.00000   0.00013   1.00000

n =

   1.60000  -0.12000   0.00000
   0.00000   1.74000   0.00000
   0.00000  -0.00023   1.00000

1.600000,-0.120000,0.000000,0.000000,1.740000,0.000000,0.000000,-0.000234,1.000000

En ce qui concerne xrandr j'obtiens des trucs du gene

Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096
VGA1 disconnected (normal left inverted right x axis y axis)
LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x600       59.5*+
   800x600        85.1     72.2     75.0     60.3     56.2  
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
TV1 disconnected (normal left inverted right x axis y axis)

avec un vrai nom pour l'output (VGA,...)
Cordialement,
Guy

Hors ligne

#11 Le 05/05/2011, à 22:22

tiebo35

Re : xrandr pour correction trapèze videoprojecteur

Pour Octave, ça marche aussi chez moi, je n'avais pas compris qu'en fait il faut taper "octave keystone.inp" dans un terminal et pas dans Octave...
Il ne me reste plus qu'à trouver d'où me vient l'erreur "xrandr: Failed to get size of gamma for output default" qui m'empêche apparemment d'utiliser xrandr et l'option "transform".
Est-ce que quelqu'un a une idée? Ca a peut-être quelque chose à voir avec les pilotes nvidia, la configuration du fichier xorg.conf ou un truc du style?
Merci d'avance.

Hors ligne