IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Problème avec ICDecompress API Windows


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème avec ICDecompress API Windows
    Bonjour,

    Je fais face depuis dèjà 2 jours a un problème qui est pour ma part très frustrant.

    Je développe une appli qui gère une webcam, prenant des captures d'images toutes les x secondes, pour ensuite traiter ces images, le tout en mèmoire.

    Malheureusement, la webcam que j'utilise (Philips), utilise le format YUY2, or mon traitement d'image ne peux se faire que sur du RGB. J'ai donc voulu utiliser un decompresseur d'image, et je suis tombé sur celui de l'api windows, le Video Compression Manager.

    Et en voulant utiliser ces fonctions, j'ai fait planté mon programme .

    Plus précisement, qu'importe la fonction que j'utilise de ce Manager, je le fais planté. Et ce toujours au même endroit. Malgré le fait que mon programme compile.

    Un exemple de fonctions du manager qui fait planté mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include <windows.h>
    #include <vfw.h>
    
    BITMAPINFOHEADER bih;
    HIC hIC;
    
    bih.biSize = sizeof(BITMAPINFOHEADER);
    bih.biWidth = bih.biHeight = 0;
    bih.biPlanes = 1;
    bih.biCompression = BI_RGB;      // standard RGB bitmap
    bih.biBitCount = 8;              // 8 bits-per-pixel format
    bih.biSizeImage = 0;
    bih.biXPelsPerMeter = bih.biYPelsPerMeter = 0;
    bih.biClrUsed = bih.biClrImportant = 256;
    
    // Fonction permettant de trouver le bon decompresseur en fonction
    // des formats d'entré et sortie.
    hIC = ICLocate (ICTYPE_VIDEO, 0L, (LPBITMAPINFOHEADER) &bih,
                          NULL, ICMODE_DECOMPRESS);
    Mais ce qui me paraît le plus étrange, c'est que, d'après le débugger, c'est la fonction capCreateCaptureWindow qui plante, créant une segmentation fault.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    HWND captWindows;
    
    captWindows = capCreateCaptureWindow( (LPCSTR) "Capture Window",
                          WS_CHILD | WS_VISIBLE, 0, 0, 320, 240,_hwnd, 1);
    
    // _hwnd est le HWND de ma fenetre principale, 
    // creer avec capCreateWindow.
    Je suis sous Code::Blocks 10.05 et j'utilise uniquement l'api windows et la librairie Vfw.

    Merci d'avance pour vos réponses que j'éspère rapide.

    Cordialement,

    Demontier.G

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bon et ben après 1 mois je reviens vers vous car cela ne marche toujours pas.
    Même si j'écrit le minimum de code, capCreateWindow et le Video Compression Manager ne veulent pas fonctionner ensemble.

    J'ai alors penser a regarder plus en profondeur le MSDN et miracle, ce que j'utilisais n'étaient pas des fonctions mais des macros.

    J'ai donc essayé d'envoyer les messages moi même (ICM_DECOMPRESS_BEGIN, ICM_DECOPRESS...). Et a ce moment rien n'a planté .
    De plus la fonction SendMessage renvoyais ICERR_OK, cela semblait parfait !
    Mais en fait je ne voyais que le haut de l'iceberg...
    Premièrement, même si SendMessage renvoyais ICERR_OK, en réalité rien ne se faisait.
    Deuxièmement, même si j'envoie des informations eronnées de par SendMessage, je recois toujours ICERR_OK.
    Et enfin, si j'envoie le message ICM_DECOMPRESS, avant ICM_DECOMPRESS_BEGIN, aucune erreur n'est renvoyé.

    Si l'un d'entre vous a déjà recontrer ce problème, j'éspère qu'il passera par ici pour m'aider.


    PS : GetLastError me renvoie ERROR_IO_PENDING (997)
    Cordialement
    Demontier.G

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bon et bien, j'ai trouvé, je suis passé sous Visual C++ express, et j'ai utilisé la fonction ICImageDecompress.

    En ne précisant que le format de départ, elle me renvoie un buffer avec les données en 24 bits RGB.

    Cordialement
    Demontier.G

    PS: Un modérateur pourrais t'il passer mettre le post en résolu plz ? Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [nasm] problème avec une API window
    Par ctrlD dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 09/12/2011, 14h25
  2. Réponses: 2
    Dernier message: 24/12/2005, 11h37
  3. Tutorial d'initiation a la programmation avec l'API Windows
    Par mcdonald dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/09/2005, 17h20
  4. Stocker un imprim ecran sous bmp avec l'api windows
    Par Tofalu dans le forum Windows
    Réponses: 7
    Dernier message: 04/05/2005, 11h32
  5. Réponses: 3
    Dernier message: 09/11/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo