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

C++ Discussion :

Probleme avec AVISaveOptions


Sujet :

C++

  1. #1
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut Probleme avec AVISaveOptions
    Bonjour,

    j'essaie de créer des avi avec vfw.h mais je bute sur un problème lié à la fonction "AVISaveOptions".

    Premièrement j'ai pu m'apercevoir sur la toile qu'on ne pouvait pas se passer de la boite de dialogue qui apparaît pour le choix du codec de compression lorsqu'on appelle "AVISaveOptions". Dans cette boite de dialogue on peut choisir de travailler en trames complètes (sans compression). Si je fais ce choix, puis-je me passer d'appeler "AVISaveOptions" et "AVIMakeCompressedStream" ?

    Par ailleurs, j'ai une erreur à l'exécution lors de l'appel de "AVISaveOptions".

    Je voudrais savoir si quelqu'un a déjà été confronté à ce problème lié à "AVISaveOptions" ?

    Voici le code :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            AVIFileInit();
     
            HRESULT hr = AVIFileOpen(&this->avi, videoFilename.c_str(), OF_WRITE | OF_CREATE, NULL);
     
            if(hr != AVIERR_OK)
                    ShowMessage("Error with AVIFileOpen");
     
            // Fill in the header for the video stream....
            ZeroMemory(&strhdr, sizeof(strhdr));
     
            strhdr.fccType     = streamtypeVIDEO;
            strhdr.fccHandler  = 0;
            strhdr.dwScale     = 1;
            strhdr.dwRate      = 15;
            strhdr.dwSuggestedBufferSize = 3 * width * height;
     
            SetRect(&strhdr.rcFrame, 0, 0, width, height);
     
            // And create the stream;
            hr = AVIFileCreateStream(this->avi, &this->videoStream, &this->strhdr);
     
            if(hr != AVIERR_OK)
                    ShowMessage("Error with AVIFileCreateStream");
     
            AVICOMPRESSOPTIONS options;
            AVICOMPRESSOPTIONS * arrOptions[1] = {&options};
     
            ZeroMemory(&options, sizeof(options));
     
            hr = AVISaveOptions(NULL, ICMF_CHOOSE_KEYFRAME | ICMF_CHOOSE_DATARATE, 1, &videoStream, (LPAVICOMPRESSOPTIONS *)&arrOptions);
    Avec les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            PAVIFILE avi;
            PAVISTREAM videoStream;
            PAVISTREAM psCompressed;
            AVISTREAMINFO strhdr;
    Merci beaucoup.

    Flo.

    Edit : l'erreur à l'exécution de la fonction AVISaveOptions survient après l'affichage de la boite de dialogue du choix du codec.

  2. #2
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Bonjour,

    sinon, histoire d'avancer un peu , ya un moyen de récupérer le pourquoi de l'erreur à l'exécution de AVISaveOptions ?

    Est-ce que ça peut venir du paramétrage de strhdr ?

    Flo.

  3. #3
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Sinon, j'ai essayé de remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hr = AVISaveOptions(NULL, 0, 1, &videoStream, (LPAVICOMPRESSOPTIONS *)&arrOptions);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hr = AVISaveOptions(NULL, 0, 0, &videoStream, (LPAVICOMPRESSOPTIONS *)&arrOptions);
    (J'ai changé le 1 par un 0 : ce qui représente le nombre de flux dont on veut afficher les options).

    Du coup la boite de dialogue ne s'affiche pas à l'execution de AVISaveOptions qui par ailleurs ne provoque plus d'erreur.

    Le avi s'enregistre sans problème mais sans compression : 7 secondes, 25 images / seconde, 640 x 480 et 178 Mo (vachement important la compression ).

    Mais la fonction "AVIStreamWrite" qui écrit les images dans le flux soulève une erreur (qui n'a pas l'air d'être génante puisque le avi est bien écrit).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AVIStreamWrite(psCompressed, frameNumber, 1, image_buffer,3*width*height, AVIIF_KEYFRAME,NULL,NULL);
    Je suppose que l'erreur vient de l'utilisation de psCompressed qui est un pointeur sur le flux compressé ... alors que le flux n'est pas compressé.

    Flo.

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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