Bonjour à tous,

je dois encoder une vidéo dans mon programme et je tente d'utiliser la fonction ICCCompress mais je ne m'en sort pas. Au premier appel de la fonction j'ai un AccessViolation.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
   // ON EFFECTUE UNE FASTCOMPRESSION
   PAVISTREAM pAvi;
   PGETFRAME pGetFrame;
   void *pDIB;             // Pointeur sur le packet DIB
   void *dataOut;          // Pointeur sur donnée résultats
   int j;                 // Compteur nombre de frames
   BITMAPINFOHEADER *bih = (BITMAPINFOHEADER *) AVIGETFRAMEF_BESTDISPLAYFMT;
   BITMAPINFOHEADER bihe;
   int nb_frames;
   unsigned long retour;  
// Ouvre le fichier source
   if ( AVIStreamOpenFromFile( &pAvi, FileName.c_str(), streamtypeVIDEO,
                               0, NULL, OF_READ ) != 0 )
      return -1;     // Erreur à l'ouverture du fichier

   // Récupère le nombre de frames du fichier
   nb_frames = AVIStreamLength( pAvi );
   if (nb_frames == -1)
      return -6;

   // Alloue le buffer de données résultat & initialisation format de sortie
   dataOut = static_cast <void*> &#40; new char&#91;OUT_BUFFER_SIZE&#93; &#41;;
   bihe.biSizeImage = OUT_BUFFER_SIZE;
   bihe.biSize = sizeof &#40; BITMAPINFOHEADER &#41;;
   bihe.biBitCount =  

   // Tant qu'il y a encore des frames dans le fichier source
   for &#40; j = 0 ; j < nb_frames; ++j &#41;
   &#123;
         // Récupérer la frame du fichier
      pGetFrame = AVIStreamGetFrameOpen&#40; pAvi, bih &#41;;

      if &#40; pGetFrame == NULL &#41;
         return -2;     // Erreur impossible de décoder
         
      pDIB = AVIStreamGetFrame&#40; pGetFrame, j &#41;;

      if &#40; pDIB == NULL &#41;
         return -3;     // Erreur impossible de récupérer l'image
         
      // Encoder la frame en XviD
         // Si Keyframe, pas besoin de la frame d'avant
         // KeyFrame =  1 frame sur 25
      if &#40; j % 25 == 0 &#41;
      &#123;
         if &#40; ICCompress&#40; hCodec, ICCOMPRESS_KEYFRAME , &bihe, dataOut, bih,
                          pDIB, 0, &retour, j, 0, 0, NULL, NULL &#41; != ICERR_OK &#41;
            return -4;
      &#125; else
      &#123;
         if &#40; ICCompress&#40; hCodec, 0 , &bihe, dataOut, bih, pDIB, 0,
                          &retour, j, 0, 0, NULL, NULL &#41; != ICERR_OK &#41;
            return -5;
      &#125;
   &#125;  // Fin tant que
Si vous avez une idée du pb, ou bien un exemple d'utilisation concret de la fonction ICCompress je suis preneur !

Merci d'avance pour votre aide !