Qu'est-ce qui cloche dans ce code?

Qu'est-ce qui cloche dans ce code? - C++ - Programmation

Marsh Posté le 13-05-2003 à 02:13:14    

Alors en suivant un tuto de la MSDN et grâce à l'aide du SDK Windows, j'ai pondu ça pour m'initier à la manipulation de flux vidéos (Faites pas gaffe aux commentaires, c'est pour m'aider à me repérer :D ):  
 

Code :
  1. //On initialise la bibliothèque
  2. AVIFileInit();
  3. PAVIFILE pFile;
  4. AnsiString PathVideo = "D:\\Films\\divers\\video.avi";
  5. char * pPath = PathVideo.c_str();
  6. //On ouvre la vidéo dont le path est pPath et on la place dans le buffer
  7. //pFile
  8. AVIFileOpen(&pFile,pPath,OF_SHARE_DENY_WRITE,NULL);
  9. //Déclaration d'une structure AVIFILEINFO qui contient les infos de la vidéo
  10. AVIFILEINFO pFileInfo;
  11. //On récupére les infos dans pFileInfo
  12. AVIFileInfo(pFile,&pFileInfo,sizeof(pFileInfo));
  13. //Nombre de streams dans la vidéo
  14. int NbreStreams = pFileInfo.dwStreams;
  15. //Durée de la vidéo
  16. int DureeVideo = pFileInfo.dwLength;
  17. //Dimensions de la vidéo
  18. int LargeurVideo = pFileInfo.dwWidth;
  19. int LongueurVideo = pFileInfo.dwHeight;
  20. //On ouvre les différents streams pour récupérer leur type
  21. AnsiString* pListeStreams = new AnsiString[NbreStreams];
  22. PAVISTREAM* pStream = new PAVISTREAM[NbreStreams];
  23. AVISTREAMINFO pStreamInfo;
  24. for (int i=0; i < NbreStreams; i++)
  25.         AVIFileGetStream(pFile,&pStream[i],0,i);
  26. int* pLongueurStream = new int[NbreStreams];
  27. long* pDebutStream = new long[NbreStreams];
  28. long* pQteEditStream = new long[NbreStreams];
  29. for (int i=0; i < NbreStreams; i++)
  30. {
  31.         AVIStreamInfo(pStream[i],&pStreamInfo,sizeof(pStreamInfo));
  32.         //Type du stream
  33.         pListeStreams[i] = pStreamInfo.fccType;
  34.         //Longueur du stream
  35.         pLongueurStream[i] = pStreamInfo.dwLength;
  36.         //Debut du stream
  37.         pDebutStream[i] = pStreamInfo.dwLength / 4;
  38.         //Fin du stream
  39.         pQteEditStream[i] = pStreamInfo.dwLength / 2;
  40. }
  41. //Détecte si le stream est vidéo ou audio
  42. for (int i=0; i < NbreStreams; i++)
  43.         if (pListeStreams[i] == "1935960438" )
  44.                 ShowMessage("video" );
  45.         else if (pListeStreams[i] == "1935963489" )
  46.                 ShowMessage("audio" );
  47. PAVISTREAM* pTempStream = new PAVISTREAM[NbreStreams];
  48. //On copie le AVI du 1/4 au 3/4
  49. for (int i=0; i < NbreStreams; i++)
  50.         EditStreamCopy(pStream[i],&pDebutStream[i],&pQteEditStream[i],&pTempStream[i]);
  51. //On déclare un nouveau AVI
  52. PAVIFILE pNewFile;
  53. //On assemble les différents streams
  54. AVIMakeFileFromStreams(&pNewFile,NbreStreams,pTempStream);
  55. //On met le nouveau fichier dans le presse-papier
  56. AVIPutFileOnClipboard(pNewFile);
  57. //On ferme ce nouveau AVI
  58. AVIFileRelease(pNewFile);
  59. //On ferme les streams ouverts et on supprime les tableaux
  60. for (int i=0; i < NbreStreams; i++)
  61.         AVIStreamRelease(pStream[i]);
  62. delete[] pListeStreams,pStream,pLongueurStream,
  63.         pDebutStream,pQteEditStream,pTempStream;
  64. //Permet de quitter un AVI ouvert
  65. AVIFileRelease(pFile);
  66. //On ferme la bibliothèque AVI
  67. AVIFileExit();


 
Mais quand je lance la fonction, tout marche sauf ces lignes:
 

Code :
  1. //On assemble les différents streams
  2. AVIMakeFileFromStreams(&pNewFile,NbreStreams,pTempStream);
  3. //On met le nouveau fichier dans le presse-papier
  4. AVIPutFileOnClipboard(pNewFile);
  5. //On ferme ce nouveau AVI
  6. AVIFileRelease(pNewFile);


 
J'ai essayé de mettre AVIFileRelease(pNewFile) à différents endroits (avant ou après les AVIStreamRelease), mais ça marche toujours pas :fou:

Reply

Marsh Posté le 13-05-2003 à 02:13:14   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed