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 18/11/2015, à 23:56

timmit42

Impossible afficher image SDL

Bonjour à tous, je dois actuellement réaliser un projet. Et j'ai quelques problèmes et je viens vers vous pour avoir des conseils smile
En fait, je possède une BeagleBoneBlack et une camera Cap A2 qui va me servir à prendre des photos. Actuellement, je n'ai pas réussi à récupérer l'image de la caméra mais la question n'est pas là. Mon soucis réside dans le fait qu'une fois l'image récupérée de la camera je vais devoir l'afficher sur une Debian qui tourne sous "Linux version 3.2.0-4-486 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.68-1+deb7u5". Afin d'arriver à cela nous avons divisé le problème en sous partie :

1. Afficher une image stockée sur le PC et l'afficher en utilisant SDL
2. Afficher une image .bmp stockée sur la Beagle et l'afficher sur le PC
3. Récupérer l'image de la camera et l'afficher sur le PC

Or, lors de la première étape nous avons un problème. Nous utilisons le code suivant :

/*This source code copyrighted by Lazy Foo' Productions (2004-2013)
and may not be redistributed without written permission.*/

//Include SDL functions and datatypes
#include "SDL/SDL.h"

int main( int argc, char* args[] )
{
    //The images
    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;

    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    //Set up screen
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );

    //Load image
    hello = SDL_LoadBMP( "hello_world.bmp" );

    //Apply image to screen
    SDL_BlitSurface( hello, NULL, screen, NULL );

    //Update Screen
    SDL_Flip( screen );

    //Pause
    SDL_Delay( 2000 );

    //Free the loaded image
    SDL_FreeSurface( hello );

    //Quit SDL
    SDL_Quit();

    return 0;
}

Lors de la compilation tout fonctionne correctement. Cependant à l'exécution du programme il y un "segmentation fault" qui apparaît, j'ai pu voir sur le forum que ceci pouvait venir du retour des fonctions mais il me semble que tout est ok. Pour en être sur nous avons décidé de tester ce code sous une autre version de linux, Ubuntu 14.04, et la tout fonctionne correctement nous avons bien une fenêtre qui apparait avec notre image affichée. Alors ma question est : comment peut-on faire pour afficher cette image sur Debian (version que nous devons obligatoirement utilisé car elle nous est imposée par le projet). Je rappel que nous utilisons SDL car dans la librairie SDL il existe des fonctions qui nous permettront d'accéder au buffer de la Camera Cape. 

Merci d'avance pour toutes vos réponses ! wink

Dernière modification par timmit42 (Le 19/11/2015, à 00:01)

Hors ligne

#2 Le 19/11/2015, à 06:22

Compte anonymisé

Re : Impossible afficher image SDL

Salut.
Peut-on voir la ligne de commande pour compiler ?

#3 Le 19/11/2015, à 07:30

timmit42

Re : Impossible afficher image SDL

Merci d'avoir répondu aussi vite !
J'utilise un makefile :

# Chemin Lib SDL :
CLSDL = /usr/local/lib

# Chemin Includes SDL :
CISDL = /home/tpuser/Test_SDL/SDL-1.2.15/include/

aff_img : aff_img.o
    gcc -L$(CLSDL) -o aff_img -lSDL -lSDLmain aff_img.o

aff_img.o : lesson01.c
    gcc -c -I$(CISDL) -o aff_img.o lesson01.c

Mais bon je n'ai aucun message d'erreur à la compilation..

Dernière modification par timmit42 (Le 19/11/2015, à 07:32)

Hors ligne

#4 Le 19/11/2015, à 17:10

grigouille

Re : Impossible afficher image SDL

Pourquoi ne compiles-tu pas avec sdl-config comme c'est indiqué dans la page sdl ?


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#5 Le 19/11/2015, à 17:40

Compte anonymisé

Re : Impossible afficher image SDL

Resalut.

Ne pas avoir d'erreurs de compilation ne garantit pas qu'il y ait pas de segfaults.
Mais pour en éviter un max, tu peux toujours ajouter l'option -Wall (Warning All) comme indiqué en dessous. Le compilateur devrait un peu plus râler sans pour autant qu'il y ait des erreurs de compilation.

# Chemin Lib SDL :
CLSDL = /usr/local/lib

# Chemin Includes SDL :
CISDL = /home/tpuser/Test_SDL/SDL-1.2.15/include/

aff_img : aff_img.o
    gcc -Wall -L$(CLSDL) -o aff_img -lSDL -lSDLmain aff_img.o

aff_img.o : lesson01.c
    gcc -Wall -c -I$(CISDL) -o aff_img.o lesson01.c

EDIT : Pour des cas de segmentation fault, tu peux toujours utiliser un debugger comme GDB .

Dernière modification par Compte anonymisé (Le 19/11/2015, à 18:10)

#6 Le 19/11/2015, à 18:12

timmit42

Re : Impossible afficher image SDL

Merci à vous deux pour vos réponses,  c'est vrai jojo81 tu as raison mais ce que je ne comprend pas c'est pourquoi le même programme fonctionne sur Ubuntu 14.04 et pas sur la debian..
J'ai tenté vos deux solutions pour compiler et aucunes d'elles ne fonctionnent. Je n'ai aucun changement, j'ai toujours "Erreur de segmentation" qui apparaît ! sad

Hors ligne

#7 Le 19/11/2015, à 18:13

derderder

Re : Impossible afficher image SDL

Je suis sûr à 99% que la segfault vient de hello qui vaut toujours null. Toujours tester si le pointeur n'est pas nul. Remplace

 hello = SDL_LoadBMP("test.bmp"); 

par

 
hello = SDL_LoadBMP("test.bmp");
if (!hello) {
printf("Error when loading bitmap %s\n",SDL_GetError());
exit(-1);
}

Dernière modification par derderder (Le 19/11/2015, à 18:14)

Hors ligne

#8 Le 19/11/2015, à 18:23

timmit42

Re : Impossible afficher image SDL

Tu as raison Derderer, mais apparemment ce n'est pas au niveau u hello qu'il y un problème mais c'est au niveau du pointeur screen.

    //Set up screen
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    if (!screen) {
    printf("Error when loading screen %s\n",SDL_GetError());
    exit(-1);
    }

En effet, j'ai donc testé comme tu l'as dit si le pointeur était NULL pour screen aussi et voici le résultat mais je n'ai pas de message d'erreur pour le chargement de l'image :

Error when loading screen No available video device

Hors ligne

#9 Le 19/11/2015, à 18:43

derderder

Re : Impossible afficher image SDL

Comment est exécuté le programme ? Sur un emulateur de terminal genre xterm ou dans un tty ? Sur la machine ou via ssh ?

Hors ligne

#10 Le 19/11/2015, à 18:51

timmit42

Re : Impossible afficher image SDL

En fait, la Debian est montée sur une machine virtuelle. Pour lancer l'exécution, je la lance à partir d'une console c'est à dire que j'accède à Application -> Accessoire -> Terminal. Je ne sais pas si j'ai bien répondu à ta question car je ne connais pas la différence entre xterm ou tty.

Hors ligne

#11 Le 19/11/2015, à 19:07

derderder

Re : Impossible afficher image SDL

Quel solution de virtualization utilise tu ?
Avec quel environemment de bureau vu qu'il n'y as pas de menu accessoir sous gnome...
Le probleme ne vient pas de Debian ton code marche sur mon pc sous Debian.

Hors ligne

#12 Le 19/11/2015, à 19:18

grigouille

Re : Impossible afficher image SDL

Il faut tester les pointeurs et les retours de fonction :

if(SDL_Init( SDL_INIT_EVERYTHING ) != 0)
{
   std::cerr << "can't initialize SDL libray\n";
   return -1;
}

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#13 Le 25/11/2015, à 00:03

timmit42

Re : Impossible afficher image SDL

Désolé pour le retard, mais j'avais des examens hmm
Pour en revenir à mon problème, j'ai fait ce que tu m'a dit grigouille et j'ai bien un problème à ce niveau la. Le retour de la fonction est nul donc comment corriger ce problème?

Sinon pour répondre à ta question derderder, j'utilise virtualbox. Mais la version de DEBIAN qui est chargée n'est pas la dernière version mais une ancienne version :
Linux version 3.2.0-4-486 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.68-1+deb7u5

Hors ligne

#14 Le 25/11/2015, à 13:13

grigouille

Re : Impossible afficher image SDL

Comment as-tu installé la sdl ? Je te recommande la lecture de la page sdl.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#15 Le 25/11/2015, à 14:24

claudius01

Re : Impossible afficher image SDL

Bonjour,

grigouille a écrit :

... Il faut tester les pointeurs et les retours de fonction

timmit42 a écrit :

... Le retour de la fonction est nul donc comment corriger ce problème?

et donc pour aller dans le sens de grigouille, compléter dans le cas d'un retour nul de SDL_Init() par un appel à SDL_GetError() (exemple parmi tant d'autres et non testé ;-) pour en savoir plus:

if(SDL_Init( SDL_INIT_EVERYTHING ) != 0)
{
   std::cerr << "can't initialize SDL libray because:\n";
   std::cerr << "SDL_Init failed: [" << SDL_GetError() << "]\n";
   return -1;
}

Hors ligne

#16 Le 05/12/2015, à 15:25

timmit42

Re : Impossible afficher image SDL

Alors voilà j'ai fait ce que vous m'avez demandé de faire et voici le message d'erreur que j'ai eu :

No available video device

J'ia pu voir sur internet que cette erreur pouvait venir du fait qu'il manque la librairie suivante ia32-libs-sdl mais je ne parviens pas l'installer :

root@sec2014:/home/tpuser/Test_SDL# apt-get install ia32-libs-sdl
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
E: Impossible de trouver le paquet ia32-libs-sdl

Merci de votre aide encore une fois wink

Hors ligne

#17 Le 05/12/2015, à 15:32

grigouille

Re : Impossible afficher image SDL

Tu ne m'as pas répondu : comment as-tu installé la sdl ?


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#18 Le 05/12/2015, à 15:50

timmit42

Re : Impossible afficher image SDL

J'ai utilisé le lien suivant mais je n'ai pas fait la première partie qui consistait à installer certaines bibliothèques car :
             * Lors de l'installation de SDL sur Ubuntu 14.04 je n'ai pas eu besoins de les utiliser
             * Je n'ai pas réussis à les installer car j'obtenais quasi les même erreurs qu'indiquer précédemment comme quoi il ne trouvait pas les paquets

Hors ligne

#19 Le 05/12/2015, à 17:02

grigouille

Re : Impossible afficher image SDL

Si tu n'installes pas la sdl via les dépôts, tout devient plus difficile.
Je ne peux t'aider si tu as choisis de l'installer à ta façon.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#20 Le 05/12/2015, à 17:08

timmit42

Re : Impossible afficher image SDL

Je veux bien le faire a ta manière mais comment faire ? En effet, si je suis ta méthode via les dépôts officiel avec l'apt-get il ne trouve pas le paquet ..

Hors ligne

#21 Le 05/12/2015, à 18:43

claudius01

Re : Impossible afficher image SDL

Bonsoir,

Ton erreur ressemble à [Résolu] Instalaltion paquet ia32-libs et au post #9 on peut lire "Ce paquet [ia32-libs-xxx] permet d'installer des bibliothèques 32 bits sur un système 64 bits, ce dont tu n'as logiquement pas besoin."

@timmit42: Quel le type 32 ou 64 bits de ton Ubuntu ?

Maintenant, entièrement d'accord avec grigouille, faut repartir de zéro @ SDL car je crains que ton installation soit bancale maintenant ;-(

Hors ligne

#22 Le 05/12/2015, à 23:57

derderder

Re : Impossible afficher image SDL

Pour installer des libs en 32 bits sur un systeme 64 bits, il faut utiliser apt-get install nomdupaquet:i386.
Dans ton cas apt-get install libsdl-1.2-dev:i386.

Hors ligne