Problème de vitesse d'écriture sur disque dur
Bonjour,
J'ai un problème de vitesse de sauvegarde des images sur DD. En effet, je dois sauvegarder des images qui proviennent des caméras JAI et les écrire sur le disque à une vitesse de 10 image/s.
Au début, j'utilise cette fonction (code en c++):
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 qui est dans pAqImageInfo sous forme binaire puis on fait la conversion du format binaire au format image et ensuite on sauvegarde l'image convertie. ça marche pour sauvegarder 10 image à 10 Hz mais dès que je veux sauvegarder 1000 images par exemple la vitesse descend à 2 images/s!
C'est la fonction d'écriture sur DD (J_Image_SaveFile) qui pose problème.
Je l'ai remplacée par cette fonction:
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 à trouver la solution svp
Merci d'avance!
J'ai un problème de vitesse de sauvegarde des images sur DD. En effet, je dois sauvegarder des images qui proviennent des caméras JAI et les écrire sur le disque à une vitesse de 10 image/s.
Au début, j'utilise cette fonction (code en c++):
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 qui est dans pAqImageInfo sous forme binaire puis on fait la conversion du format binaire au format image et ensuite on sauvegarde l'image convertie. ça marche pour sauvegarder 10 image à 10 Hz mais dès que je veux sauvegarder 1000 images par exemple la vitesse descend à 2 images/s!
C'est la fonction d'écriture sur DD (J_Image_SaveFile) qui pose problème.
Je l'ai remplacée par cette fonction:
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 à trouver la solution svp
Merci d'avance!
Configuration: Windows XP Firefox 2.0.0.16