haazheel | 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 ):
Code :
- //On initialise la bibliothèque
- AVIFileInit();
- PAVIFILE pFile;
- AnsiString PathVideo = "D:\\Films\\divers\\video.avi";
- char * pPath = PathVideo.c_str();
- //On ouvre la vidéo dont le path est pPath et on la place dans le buffer
- //pFile
- AVIFileOpen(&pFile,pPath,OF_SHARE_DENY_WRITE,NULL);
- //Déclaration d'une structure AVIFILEINFO qui contient les infos de la vidéo
- AVIFILEINFO pFileInfo;
- //On récupére les infos dans pFileInfo
- AVIFileInfo(pFile,&pFileInfo,sizeof(pFileInfo));
- //Nombre de streams dans la vidéo
- int NbreStreams = pFileInfo.dwStreams;
- //Durée de la vidéo
- int DureeVideo = pFileInfo.dwLength;
- //Dimensions de la vidéo
- int LargeurVideo = pFileInfo.dwWidth;
- int LongueurVideo = pFileInfo.dwHeight;
- //On ouvre les différents streams pour récupérer leur type
- AnsiString* pListeStreams = new AnsiString[NbreStreams];
- PAVISTREAM* pStream = new PAVISTREAM[NbreStreams];
- AVISTREAMINFO pStreamInfo;
- for (int i=0; i < NbreStreams; i++)
- AVIFileGetStream(pFile,&pStream[i],0,i);
- int* pLongueurStream = new int[NbreStreams];
- long* pDebutStream = new long[NbreStreams];
- long* pQteEditStream = new long[NbreStreams];
- for (int i=0; i < NbreStreams; i++)
- {
- AVIStreamInfo(pStream[i],&pStreamInfo,sizeof(pStreamInfo));
- //Type du stream
- pListeStreams[i] = pStreamInfo.fccType;
- //Longueur du stream
- pLongueurStream[i] = pStreamInfo.dwLength;
- //Debut du stream
- pDebutStream[i] = pStreamInfo.dwLength / 4;
- //Fin du stream
- pQteEditStream[i] = pStreamInfo.dwLength / 2;
- }
- //Détecte si le stream est vidéo ou audio
- for (int i=0; i < NbreStreams; i++)
- if (pListeStreams[i] == "1935960438" )
- ShowMessage("video" );
- else if (pListeStreams[i] == "1935963489" )
- ShowMessage("audio" );
- PAVISTREAM* pTempStream = new PAVISTREAM[NbreStreams];
- //On copie le AVI du 1/4 au 3/4
- for (int i=0; i < NbreStreams; i++)
- EditStreamCopy(pStream[i],&pDebutStream[i],&pQteEditStream[i],&pTempStream[i]);
- //On déclare un nouveau AVI
- PAVIFILE pNewFile;
- //On assemble les différents streams
- AVIMakeFileFromStreams(&pNewFile,NbreStreams,pTempStream);
- //On met le nouveau fichier dans le presse-papier
- AVIPutFileOnClipboard(pNewFile);
- //On ferme ce nouveau AVI
- AVIFileRelease(pNewFile);
- //On ferme les streams ouverts et on supprime les tableaux
- for (int i=0; i < NbreStreams; i++)
- AVIStreamRelease(pStream[i]);
- delete[] pListeStreams,pStream,pLongueurStream,
- pDebutStream,pQteEditStream,pTempStream;
- //Permet de quitter un AVI ouvert
- AVIFileRelease(pFile);
- //On ferme la bibliothèque AVI
- AVIFileExit();
|
Mais quand je lance la fonction, tout marche sauf ces lignes:
Code :
- //On assemble les différents streams
- AVIMakeFileFromStreams(&pNewFile,NbreStreams,pTempStream);
- //On met le nouveau fichier dans le presse-papier
- AVIPutFileOnClipboard(pNewFile);
- //On ferme ce nouveau AVI
- AVIFileRelease(pNewFile);
|
J'ai essayé de mettre AVIFileRelease(pNewFile) à différents endroits (avant ou après les AVIStreamRelease), mais ça marche toujours pas |