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 29/05/2008, à 11:37

Slash0064

Recuperation du flux video affiche a l'ecran

Bonjour,

Je developpe une application permettant de contrôler la souris par le regard.

Celle-ci marche parfaitement mis a part que j ai un probleme de precision.

Afin de regler ce soucis, je souhaite aimanter l'ensemble des Widgets Cliquable sur l'ecran.
GtkMenu/GtkButon mais aussi les applets des Docks etc ...

Il s'offre à moi 2 possibilités ...

Soit je récupère le mapping du serveur X me permettant de connaitre précisément les positions de tous ces éléments.

Soit je recupere un flux continu de screenshot de l'ecran et en realisant une petite analyse d'image avec l'algorithme Canny, je recupere les contours des widgets me permettant ainsi de trouver leur position. (Cette méthode est plutôt moche car ces informations sont déja contenu dans le serveur X ...)

Dans les deux cas, j ai un probleme ... Est ce que quelqu'un sait comment récupérer le mapping des éléments affichés et leurs types ? Ou est ce que quelqu'un sait comment je peux récupérer le flux vidéo affiché à l'écran ?

Je vous remercie par avance pour votre écoute ...

Cordialement

Clément

#2 Le 31/05/2008, à 13:48

Slash0064

Re : Recuperation du flux video affiche a l'ecran

Salut,


j'ai trouve une solution qui est de recuperer la GdkWindow d'origine (La GdkWindow du Bureau) est de la convertir en pixbuf.

parent  = gdk_window_foreign_new (GDK_ROOT_WINDOW());

pixbuf = gdk_pixbuf_get_from_drawable(pixbuf,parent,gdk_drawable_get_colormap(parent),0,0,0,0,width,height);

Cependant, la conversion de la GdkWindow en GdkPixbuf est extrêment gourmande en ressource.

Devant réaliser ceci pour construire un flux continu d'analyse du bureau, cette technique ne peut me convenir.

Est-ce que quelqu'un à un truc et astuce pour optimiser l'ensemble ? Ou une tout autre technique... Mon but est de pouvoir acceder au data pixel de l'image du bureau...

Est-ce qu'une autre librairie serait plus adapte ? Peut-on acceder aux datas brut d'une GdkWindow ? (Celle-ci semble être une structure d'abstraction avec le serveur X) Est ce que avec Xlib, je peux le faire ??


En tout cas merci par avance

Codialement
Clément

#3 Le 01/06/2008, à 13:36

Slash0064

Re : Recuperation du flux video affiche a l'ecran

Toujours pas d'idée ?

Bon j'ai songer à integrer le tout dans un thread cependant j ai un nouveau problème ... Décidément c'est vraiment pas évident ...

	while (1)
		{
		usleep(100);
		if(Vmain->thread == 1)
			{
			printf("ici %d,%d \n",width,height);
			Wbureau = gdk_window_foreign_new (GDK_ROOT_WINDOW());
			gdk_drawable_get_size(GDK_DRAWABLE(Wbureau),&width,&height);

			gdk_threads_enter();
		//	image = gdk_drawable_get_image              (Wbureau,0,0,width,height);
			img_bureau = gdk_pixbuf_get_from_drawable(img_bureau,Wbureau,gdk_drawable_get_colormap(Wbureau),0,0,0,0,width,height);		
			gdk_threads_leave();
				
			}
		}

Mon problème est que j'ai un gros plantage aprés quelque secondes d'utilisation :

6 /usr/lib/libgobject-2.0.so.0(g_closure_invoke+0x129) [0xb7790759]
#17 /usr/lib/libgobject-2.0.so.0 [0xb77a4d1d]
#18 /usr/lib/libgobject-2.0.so.0(g_signal_emit_valist+0x5fe) [0xb77a664e]
#19 /usr/lib/libgobject-2.0.so.0(g_signal_emit+0x29) [0xb77a6c59]
Locking assertion failure.  Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb704f767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb704f81e]
#2 /usr/lib/libX11.so.6 [0xb7806518]
#3 /usr/lib/libX11.so.6(_XReply+0x140) [0xb7807200]
#4 /usr/lib/libX11.so.6(XSync+0x6a) [0xb77fb24a]
#5 /usr/lib/libgdk-x11-2.0.so.0(gdk_flush+0x35) [0xb7a50c45]
#6 /usr/lib/libgdk-x11-2.0.so.0 [0xb7a2cd65]
#7 /usr/lib/libgdk-x11-2.0.so.0 [0xb7a2d030]
#8 /usr/lib/libgdk-x11-2.0.so.0(gdk_pixbuf_get_from_drawable+0x1c5) [0xb7a31315]
#9 ./gtk-foobar [0x804b926]
#10 /lib/tls/i686/cmov/libpthread.so.0 [0xb73c14fb]
#11 /lib/tls/i686/cmov/libc.so.6(clone+0x5e) [0xb7343e5e]
ici 1280,800 
gtk-foobar: ../../src/xcb_lock.c :77 : _XGetXCBBuffer:  L'assertion « ((int) ((xcb_req) - (dpy->request)) >= 0) » a échoué.
Abandon

Graphiquement j'ai une drawwingarea qui affiche le flux video de ma camera et dans cette meme zone des problemes d'affichage interviennent du genre des carrés des applications de derriere apparaissent de façon aléatoire ...

L'erreur vient lorsque j'utilise :

img_bureau = gdk_pixbuf_get_from_drawable(img_bureau,Wbureau,gdk_drawable_get_colormap(Wbureau),0,0,0,0,width,height);

Si je commente cette ligne aucune erreur ... Note aucune variable, fonction ou quoi que ce soit est commun entre les deux fonctions ... (Le thread qui recupere la fenetre de bureau et la converti en pixbuf et la fonction qui affiche le flux de camera dans la drawingarea ....)

Il semble y avoir des bugs dans Gdk ou Xlib ou je ne sais .....


Si quelqu'un peut m aider ou me dire ou m'adresser pour avoir de l'aide ...

Merci par avance
Clément

#4 Le 05/06/2008, à 16:37

Slash0064

Re : Recuperation du flux video affiche a l'ecran

Toujours pas d'idees ?

Il n'y a vraiment personne qui a deja developpe avec xlib ? ou developper meme xorg ??? ou du moins regarder ?


Merci par avance