vitesse d'écriture sur disque
Bonjour,
Je developpe un programme qui doit sauvegarder 1000 images sur DD provenant des caméras JAi à une vitesse de 1000 images/s.
j'utilise cette fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
void CCamera::StreamCBFunc2(J_tIMAGE_INFO * pAqImageInfo)
{
std::cout << index << " " << i << " " << std::endl;
nbr_missing_packets+=pAqImageInfo->iMissingPackets;
if (J_Image_Malloc(pAqImageInfo, &tCnvImageInfo) == J_ST_SUCCESS) {
if (J_Image_FromRawToImage(pAqImageInfo, &tCnvImageInfo) == J_ST_SUCCESS) {
std::ostringstream out;
out << i++;
std::string sFileName = filename + "\\photo" + out.str() + ".tiff";
if (J_Image_SaveFile(&tCnvImageInfo, LPCTSTR(sFileName.c_str())) == J_ST_SUCCESS) {}
if (J_Image_Free(&tCnvImageInfo) != J_ST_SUCCESS) {}
}
}
} |
On convertit l'image brute qui se trouve dans pAqImageInfo en format image et on la stocke dans tCnvImageInfo et on la sauvegarde sur le disque. ça marche pour sauvegarder 10 images mais dès que j'enregidtre 1000 images par exemple la vitesse descend à 2 images/s
c'est la fonction J_Image_SaveFile qui ralentit la vitesse. je l'ai remplacée par:
Code:
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
|
void CCamera::StreamCBFunc3(J_tIMAGE_INFO * pAqImageInfo)
{
FILE *f;
std::cout <<"cam"<< index << " " << i << " " << std::endl;
nbr_missing_packets+=pAqImageInfo->iMissingPackets;
std::ostringstream out;
out << i++;
std::string sFileName = filename + "\\photo" + out.str()+ ".jpg";
f=fopen(sFileName.c_str(),"wb");
if(f!=NULL)
{
fwrite(pAqImageInfo->pImageBuffer,sizeof(uint8_t),sizeof(&pAqImageInfo->pImageBuffer),f);
fclose(f);
}
else
TRACE("pas d'écriture!!\n");
} |
mais ça marche pas.
Aidez moi svp!
Merci d'avance!