Voilà,
j'ai fait des tests, mais ça ne marche toujours pas!
Voici l'init de ma structure BITMAPINFOHEADER qui me permet de mettre à jour le format de mon flux ainsi que la structure AVISTREAMINFO qui me permet de créer mon flux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| m_pBitmapInfo->biSize= sizeof(BITMAPINFOHEADER);
m_pBitmapInfo->biPlanes= 1;
m_pBitmapInfo->biBitCount= 24;
m_pBitmapInfo->biCompression= mmioFOURCC('d','i','v','x');
m_pBitmapInfo->biClrUsed= 0;
m_pBitmapInfo->biClrImportant= 0;
m_pBitmapInfoHeaderPos->biSizeImage= m_bufferSize;//taille de l'image compressée
m_pBitmapInfoHeaderPos->biWidth= SizeX;//taille de l'image src 352*288
m_pBitmapInfoHeaderPos->biHeight = SizeY;
...
m_pAviStreamInfo.fccType= streamtypeVIDEO;
m_pAviStreamInfo.fccHandler= mmioFOURCC('d','i','v','x');
m_pAviStreamInfo.dwScale= 1;
m_pAviStreamInfo.dwRate = 5;
m_pAviStreamInfo.dwSuggestedBufferSize= m_pBitmapInfo->biSizeImage;
RECT RectImageSize = { 0, 0,SizeX ,SizeY};
m_pAviStreamInfo.rcFrame= RectImageSize;
...
hr = AVIFileCreateStream(m_pAviFile, &m_psAvi, &m_pAviStreamInfo);
...
hr = AVIStreamSetFormat(m_psAvi, 0, m_pBitmapInfo, m_pBitmapInfo->biSize); |
Dans la callback de numérsation, je récupère l'adresse du buffer de l'image compressée:
McGetParamInt (SigInfo->SignalInfo, MC_SurfaceAddr, (PINT32) &m_pCurrentBuffer);
J'écris ensuite les data dans le flux:
hr = AVIStreamWrite (m_psAvi, images, 1, (PUINT8)m_pCurrentBuffer, m_bufferSize, AVIIF_KEYFRAME, &plSampWritten, &plBytesWritten);
le type de la compression de la carte est DivX5.0 MPEG-4
Les propriétés de mon avi créé sont correctes, mais la taille est énorme 12Mo !!! Je ne comprends pas ce qui est faux...
Partager