3 Commits
35 ... 36

2 changed files with 11 additions and 79 deletions

View File

@ -3,7 +3,7 @@
int main(int argc, char *argv[])
{
std::cout<<"ximeaAirborneSystem 版本:"<< "35." <<std::endl;
std::cout<<"ximeaAirborneSystem 版本:"<< "36." <<std::endl;
QCoreApplication a(argc, argv);
//UdpServer* x=new UdpServer();

View File

@ -938,29 +938,9 @@ WriteData2Disk::WriteData2Disk()
void WriteData2Disk::write2Disk()
{
QString imageFileName=m_QbaseFileName+".bil";
// FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b");
FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b");
int fd = open(imageFileName.toStdString().c_str(), O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
size_t fileSize = m_iFrameSizeInByte*(size_t)100*(size_t)60*(size_t)5;
size_t fileSizeIncrement = m_iFrameSizeInByte*(size_t)100*(size_t)60*(size_t)5;
if (lseek(fd, fileSize - 1, SEEK_SET) == -1) {
std::cerr << "Error calling lseek()\n";
return;
}
if (write(fd, "", 1) == -1) {
std::cerr << "Error writing last byte of the file\n";
return;
}
void* addr = mmap(nullptr, fileSize, PROT_WRITE, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
std::cerr << "Error mmapping the file\n";
return;
}
size_t sizeWrited2disk = 0;
int frameCounter = 0;
int frameNumber;
unsigned short * dataBuffer = new unsigned short[m_iFrameSizeInByte/2*m_iNumber_WriteDisk];
@ -975,12 +955,18 @@ void WriteData2Disk::write2Disk()
std::cout<<"WriteData2Disk::write2Disk-----------------------队列为空,采集线程已经退出!"<<std::endl;
break;
}
else if(isExitWriteData2Disk)
{
std::cout<<"WriteData2Disk::write2Disk-----------------------isExitWriteData2Disktrue"<<std::endl;
std::cout<<"WriteData2Disk::write2Disk-----------------------队列大小"<<m_q->size()<<std::endl;
}
else if(bempty && !isExitWriteData2Disk)
{
continue;
}
r_qtx.lock();
DataBuffer * buffer = m_q->front();
int frameNumber = m_qFrameCounter->front();
@ -996,77 +982,23 @@ void WriteData2Disk::write2Disk()
// std::cout<<"WriteData2Disk::write2Disk-----------------------正在写磁盘!" << m_pool->max_size() <<std::endl;//
fwrite(dataBuffer,1,m_iFrameSizeInByte*frameNumber, hFile);
if (fileSize < sizeWrited2disk + m_iFrameSizeInByte*frameNumber)
{
// if (munmap(addr, fileSize) == -1) {
// std::cerr << "Error un-mmapping the file\n";
// }
// std::cout<<"老fileSize" << fileSize <<std::endl;
size_t new_size = fileSize + fileSizeIncrement;
if (ftruncate(fd, new_size) == -1) {
std::cerr << "Error calling ftruncate()\n";
return;
}
// Remap the file with the new size
addr = mremap(addr, fileSize, new_size, MREMAP_MAYMOVE);
if (addr == MAP_FAILED) {
std::cerr << "Error calling mremap()\n";
return;
}
fileSize = new_size;
// std::cout<<"新fileSize" << fileSize <<std::endl;
}
// fwrite(dataBuffer,1,m_iFrameSizeInByte*frameNumber, hFile);
memcpy(addr + sizeWrited2disk, dataBuffer, m_iFrameSizeInByte*frameNumber);
sizeWrited2disk = sizeWrited2disk + m_iFrameSizeInByte*frameNumber;
// std::cout<<"sizeWrited2disk" << sizeWrited2disk <<std::endl;
frameCounter++;
}
m_rgbImage->m_VideoWriter.release();
// fclose(hFile);
fclose(hFile);
delete[] dataBuffer;
// if (munmap(addr, fileSize) == -1) {
// std::cerr << "Error un-mmapping the file\n";
// }
// Resize the file to 4096 bytes
if (ftruncate(fd, sizeWrited2disk) == -1) {
std::cerr << "Error calling ftruncate()\n";
return;
}
// Remap the file with the new size
addr = mremap(addr, fileSize, sizeWrited2disk, MREMAP_MAYMOVE);
if (addr == MAP_FAILED) {
std::cerr << "Error calling mremap()\n";
return;
}
if (munmap(addr, sizeWrited2disk) == -1) {
std::cerr << "Error un-mmapping the file\n";
}
close(fd);
std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,内存池可达到的最多元素数:" << m_pool->max_size() <<std::endl;
std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出fwrite 调用次数:" << frameCounter <<std::endl;
}
void WriteData2Disk::exitWriteData2Disk()
{
std::cout<< "执行函数WriteData2Disk::exitWriteData2Disk" <<std::endl;
isExitWriteData2Disk = true;
}