From 447a1aafb1a96a0f2cbdace37d62c9cb2628b50c Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Sun, 19 Mar 2023 16:44:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=9C=80=E5=A4=A7=E6=9B=9D=E5=85=89?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E4=B9=98=E4=BB=A50.95=EF=BC=8C=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=EF=BC=9A=E9=81=BF=E5=85=8D=E6=9B=9D=E5=85=89=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=B6=85=E8=BF=87=E6=9C=80=E5=A4=A7=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E9=80=A0=E6=88=90=E5=B8=A7=E7=8E=87=E9=99=8D=E4=BD=8E=EF=BC=9B?= =?UTF-8?q?=202.=20=E5=8E=BB=E6=8E=89=E5=A4=9A=E4=BD=99=E7=9A=84std::out?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=87=E9=9B=86log=E8=BF=87?= =?UTF-8?q?=E4=BA=8E=E6=9D=82=E4=B9=B1=EF=BC=9B=203.=20=E9=80=9A=E8=BF=87O?= =?UTF-8?q?penCV=E4=BB=8E=E9=AB=98=E5=85=89=E8=B0=B1=E5=BD=B1=E5=83=8F?= =?UTF-8?q?=E4=B8=AD=E6=8F=90=E5=8F=96rgb=E5=BD=B1=E5=83=8F=EF=BC=9B=204.?= =?UTF-8?q?=20=E5=9C=A8log=E4=B8=AD=E8=AE=B0=E5=BD=95=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E9=87=87=E9=9B=86=E6=97=B6=E9=97=B4=E5=92=8C=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E9=87=87=E9=9B=86=E6=97=B6=E9=97=B4=EF=BC=9B=205.=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=89=8B=E5=8A=A8=E8=AE=BE=E7=BD=AE=E6=9B=9D=E5=85=89?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=9A127.0.0.1?= =?UTF-8?q?=207,2=EF=BC=9B=206.=20=E5=A4=B4=E6=96=87=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E5=86=99=E5=85=A5=E4=BB=AA=E5=99=A8=E5=BA=8F=E5=88=97=E5=8F=B7?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 14 +- Header_Files/configfile.h | 2 + Header_Files/rgbImage.h | 75 +++++++++++ Header_Files/utility_tc.h | 3 + Header_Files/ximeaimager.h | 9 +- Source_Files/configfile.cpp | 16 +++ Source_Files/rgbImage.cpp | 253 +++++++++++++++++++++++++++++++++++ Source_Files/sbgrecorder.cpp | 12 +- Source_Files/udpserver.cpp | 25 ++-- Source_Files/utility_tc.cpp | 19 +++ Source_Files/ximeaimager.cpp | 46 ++++++- 11 files changed, 440 insertions(+), 34 deletions(-) create mode 100644 Header_Files/rgbImage.h create mode 100644 Source_Files/rgbImage.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 65d062c..1d58c0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.5.2) project(ximeaAirborneSystem) set(CMAKE_CXX_STANDARD 14) @@ -9,7 +9,7 @@ set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) -set(QT Core Network SerialPort) +set(QT Core Network SerialPort Gui) set(TEMPLATE app) set(TARGET ximeaImageRecorder) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -17,9 +17,12 @@ find_package(Qt5 REQUIRED ${QT})# include_directories(.) include_directories(/home/300tc/library/ximeaControlDll/Header_Files) - link_directories(/home/300tc/library/ximeaControlDll) +find_package(OpenCV 4.2.0 REQUIRED) +include_directories(/usr/local/include/opencv4/) +link_directories(/usr/local/lib) + add_executable(${CMAKE_PROJECT_NAME} Source_Files/fileoperation.cpp Header_Files/fileoperation.h @@ -43,10 +46,11 @@ add_executable(${CMAKE_PROJECT_NAME} Source_Files/configfile.cpp Header_Files/configfile.h Header_Files/MemoryPool.tcc - Header_Files/MemoryPool.h) + Header_Files/MemoryPool.h Source_Files/rgbImage.cpp Header_Files/rgbImage.h) qt5_use_modules(${CMAKE_PROJECT_NAME} ${QT}) target_link_libraries(${CMAKE_PROJECT_NAME} irisXimeaImager libconfig.so - libconfig++.so) + libconfig++.so + ${OpenCV_LIBS}) diff --git a/Header_Files/configfile.h b/Header_Files/configfile.h index bfdbd29..9dfb0f5 100644 --- a/Header_Files/configfile.h +++ b/Header_Files/configfile.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -32,6 +33,7 @@ public: bool getEffectiveWindow(int &width, int &offsetx, int &height, int &offsety); bool getEffectiveWindowRoi(int &width, int &offsetx); bool getGainOffset(float &gain, float &offset); + bool getSN(QString &SN); bool createConfigFile(); bool updateConfigFile(); diff --git a/Header_Files/rgbImage.h b/Header_Files/rgbImage.h new file mode 100644 index 0000000..004cbc2 --- /dev/null +++ b/Header_Files/rgbImage.h @@ -0,0 +1,75 @@ +// +// Created by tangchao on 2022/12/24. +// + +#ifndef XIMEAAIRBORNESYSTEM_RGBIMAGE_H +#define XIMEAAIRBORNESYSTEM_RGBIMAGE_H + +#include +#include + +#include +#include +#include //包含了所有东西,编译很慢 + +using namespace cv; +class rgbImage :public QObject +{ + +Q_OBJECT +public: + rgbImage(QWidget* pParent = NULL); + ~rgbImage(); + + void SetRgbImageWidthAndHeight(int BandCount, int Sample, int FrameNumber); + void FillRgbImage(unsigned short *datacube); + void FillFocusGrayImage(unsigned short *datacube); + void FillFocusGrayQImage(unsigned short * datacube); + + void FillOnerowofRgbImage(cv::Mat * matRgbImage, int rowNumber, unsigned short *datacube); + + QImage *m_QRgbImage; + cv::Mat *m_matRgbImage; + + QImage *m_qimageFocusGrayImage; + cv::Mat *m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图 + //cv::Mat m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图 + + + CvVideoWriter *m_frame_writer; + VideoWriter m_VideoWriter; +// VideoWriter m_video("appsrc ! autovideoconvert ! filesink location=/media/nvme/delete/live.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480)); +// VideoWriter video("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));// + + + + + + //控制该填充rgb图像第几帧(行)数据 + //以下两种情况需要重置为0:1)调用函数SetRgbImageWidthAndHeight;2)每次开始填充数据前 + int m_iFrameCounter; + + + int m_iFramerate;// + + +protected: + +private: + int m_iSampleNumber;// + int m_iBandNumber;// + + int m_iFrameNumber;// + +public slots: + +signals : + void sendstr(QString str); + void sendstr1(QString str); + void refreslabelimg(QImage* img1); + + +}; + + +#endif //XIMEAAIRBORNESYSTEM_RGBIMAGE_H diff --git a/Header_Files/utility_tc.h b/Header_Files/utility_tc.h index eb6cefc..7ae1f94 100644 --- a/Header_Files/utility_tc.h +++ b/Header_Files/utility_tc.h @@ -2,12 +2,15 @@ #define UTILITY_TC_H #include +#include #include #include QString getFileNameBaseOnTime(); +QString formatTimeStr(char * format); + //https://blog.csdn.net/MoreWindows/article/details/6657829 void bubbleSort(unsigned short * a, int n); diff --git a/Header_Files/ximeaimager.h b/Header_Files/ximeaimager.h index 4df67f0..be4fada 100644 --- a/Header_Files/ximeaimager.h +++ b/Header_Files/ximeaimager.h @@ -41,6 +41,8 @@ #include #include +#include "rgbImage.h" + //#ifdef WIN32 @@ -96,7 +98,7 @@ Q_OBJECT public: WriteData2Disk(); - void setParm(queue * q, QString baseFileName, int frameSizeInByte, MemoryPool * pool); + void setParm(queue * q, QString baseFileName, int frameSizeInByte, MemoryPool * pool, rgbImage * rgbImage); private: queue * m_q; @@ -104,6 +106,8 @@ private: int m_iFrameSizeInByte; MemoryPool * m_pool; + rgbImage * m_rgbImage; + public slots: void write2Disk(); @@ -116,10 +120,12 @@ class XimeaImager : public QObject public: XimeaImager(); + ~XimeaImager(); void setFramerate(double framerate); double getFramerate(); double setExposureTime(float exposureTime); + double wrapSetExposureTime(float exposureTime_in_us); double getExposureTime(); double autoExposure(); void setGain(double gain); @@ -159,6 +165,7 @@ private: bool m_bRecordControl; int m_iFrameCounter; int m_iFrameSizeInByte; + rgbImage * m_rgbImage; void writeHdr(); void processXiApiErrorCodes(int xiApiErrorCodes); diff --git a/Source_Files/configfile.cpp b/Source_Files/configfile.cpp index c54d362..eff9481 100644 --- a/Source_Files/configfile.cpp +++ b/Source_Files/configfile.cpp @@ -206,6 +206,22 @@ bool Configfile::getGainOffset(float &gain, float &offset) return true; } +bool Configfile::getSN(QString &SN) +{ + try + { + std::string SN_tem = cfg.lookup("SN"); + SN = QString::fromStdString(SN_tem); + + return true; + } + catch(const SettingNotFoundException &nfex) + { + cerr << "No 'spectralBin' setting in configuration file." << endl; + return false; + } +} + bool Configfile::createConfigFile() { using namespace std; diff --git a/Source_Files/rgbImage.cpp b/Source_Files/rgbImage.cpp new file mode 100644 index 0000000..8cdb7e6 --- /dev/null +++ b/Source_Files/rgbImage.cpp @@ -0,0 +1,253 @@ +// +// Created by tangchao on 2022/12/24. +// + +#include "../Header_Files/rgbImage.h" + + +rgbImage::rgbImage(QWidget* pParent) +{ + m_QRgbImage = nullptr; + m_matRgbImage = nullptr; + m_matFocusGrayImage = nullptr; + m_qimageFocusGrayImage = nullptr; + + + +} + +rgbImage::~rgbImage() +{ + +} + + +void rgbImage::SetRgbImageWidthAndHeight(int BandCount, int Sample, int FrameNumber) +{ + using namespace cv; + + if (m_QRgbImage != nullptr) + { + delete m_QRgbImage;//有问题???????????????????????????????????????????????? + } + //m_QRgbImage = new QImage(Sample, FrameNumber, QImage::Format_RGB888); + + + if (m_matRgbImage != nullptr) + { + delete m_matRgbImage; + } + m_matRgbImage = new Mat(FrameNumber, Sample, CV_8UC3, Scalar(0, 0, 0)); + + int codec = VideoWriter::fourcc('M', 'P', '4', '2'); // select desired codec (must be available at runtime) + double fps = 20.0; // framerate of the created video stream + std::string filename = "appsrc ! autovideoconvert ! filesink location=/media/nvme/delete/live.avi";//https://blog.csdn.net/ancientapesman/article/details/117324638 + m_VideoWriter.open(filename, codec, fps, m_matRgbImage->size(), true); + +// VideoWriter video("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480)); + +// m_frame_writer = cvCreateVideoWriter("/media/nvme/delete/live.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 20.0, Size(688, 688), false); + + + + + + if (m_qimageFocusGrayImage == nullptr) + { + m_qimageFocusGrayImage = new QImage(Sample, BandCount, QImage::Format_RGB32); + } + + + if (m_matFocusGrayImage == nullptr) + { + m_matFocusGrayImage = new Mat(BandCount, Sample, CV_16U, Scalar(0)); + + //cv::Mat matAdjustPreview = Mat::zeros(BandCount, Sample, CV_16U); + } + + //cv::Mat matAdjustPreview = Mat::zeros(BandCount, Sample, CV_16U); + //m_matFocusGrayImage = matAdjustPreview; + + + + + + + + + std::cout << "设置帧数:" << FrameNumber << std::endl; + + m_iFrameCounter = 0;//每次都重置为0 + m_iSampleNumber = Sample; + m_iBandNumber = BandCount; + m_iFrameNumber = FrameNumber; + + //std::cout << "rgb影像内存地址为:" << m_QRgbImage << std::endl; +} + +void rgbImage::FillOnerowofRgbImage(cv::Mat * matRgbImage, int rowNumber, unsigned short *datacube) +{ + unsigned short r, g, b; + for (int j = 0; j < m_iSampleNumber; j++) + { + //取值:一帧影像中,从左到右的rgb像元值 + r = *(datacube + 121 * m_iSampleNumber + j)*255/4096; + g = *(datacube + 79 * m_iSampleNumber + j)*255/4096; + b = *(datacube + 40 * m_iSampleNumber + j)*255/4096; + + //将像元值赋值到cv::Mat中,操作像元值:https://zhuanlan.zhihu.com/p/51842288 + //int dataType = m_matRgbImage->type();//当数据类型为CV_16UC3时,返回18 + //std::cout << "m_matRgbImage数据类型为:" << dataType << std::endl; + if (matRgbImage->type() == CV_16UC3) + { + //std::cout << "操作像素值!" << std::endl; + matRgbImage->at(rowNumber, j)[2] = r; + matRgbImage->at(rowNumber, j)[1] = g; + matRgbImage->at(rowNumber, j)[0] = b; + } + } +} + +void rgbImage::FillRgbImage(unsigned short *datacube) +{ + unsigned short *r_row, *g_row, *b_row; + + if(m_iFrameCounterrowRange(1, m_matRgbImage->rows).copyTo(m_matRgbImage->rowRange(0, m_matRgbImage->rows-1)); + for (int i = 1; i < m_matRgbImage->rows; ++i) + { +// std::cout << "大于:" << i << std::endl; + m_matRgbImage->col(i).copyTo(m_matRgbImage->col(i-1)); +// std::cout << "--------------" << i << std::endl; + } + + +// std::cout << "1111111111111111111111111111"<< std::endl; + //通过FillOnerowofRgbImage为m_iFrameNumber行赋值 + FillOnerowofRgbImage(m_matRgbImage, m_iFrameNumber-1, datacube); +// std::cout << "22222222222222222"<< std::endl; + + + + + +// //循环给每行像素赋值 +// r_row = datacube + 121 * m_iSampleNumber; +// g_row = datacube + 79 * m_iSampleNumber; +// b_row = datacube + 40 * m_iSampleNumber; +// for (int j = 0; j < m_iFrameNumber; j++) +// { +// p = m_matRgbImage.ptr(j); +// for ( j = 0; j < nCols; ++j){ +// p[j] = table[p[j]]; +// } +// +// } + + + + //保存rgb图片 + if (m_iFrameCounter % m_iFramerate == 0 || m_iFrameCounter == m_iFrameNumber - 1) + { + ////保存文件 + //FileOperation * fileOperation = new FileOperation(); + //string directory = fileOperation->getDirectoryOfExe(); + //string rgbFilePathStrech = “/media/nvme/300TC/config/” + "\\tmp_image_strech.png";//没有拉伸图片 +// std::string rgbFilePathNoStrech = "/media/nvme/300TC/config/" + std::to_string(m_iFrameCounter) + "ctmp_image_no_strech.png"; + + //m_QRgbImage->save(QString::fromStdString(rgbFilePathNoStrech), "PNG"); + +// cv::imwrite(rgbFilePathNoStrech, *m_matRgbImage); + //cv::imwrite(rgbFilePathStrech, CStretch(*m_matRgbImage, 0.01)); + + } + m_VideoWriter.write(*m_matRgbImage); + std::string rgbFilePathNoStrech = "/media/nvme/delete/" + std::to_string(m_iFrameCounter) + "ctmp_image_no_strech.png"; + cv::imwrite(rgbFilePathNoStrech, *m_matRgbImage); + } + + + m_iFrameCounter++; +} + +void rgbImage::FillFocusGrayImage(unsigned short * datacube) +{ + int rowCount = m_matFocusGrayImage->rows; + int colCount = m_matFocusGrayImage->cols; + for (unsigned short i = 0; i < m_matFocusGrayImage->rows; i++) + { + for (unsigned short j = 0; j < m_matFocusGrayImage->cols; j++) + { + //m_matFocusGrayImage->at(i, j) = *(datacube + m_matFocusGrayImage->cols*i + j); + m_matFocusGrayImage->at(i, j) = datacube[m_matFocusGrayImage->cols*i + j]; + } + } + + + + //int rowCount = m_matFocusGrayImage.rows; + //int colCount = m_matFocusGrayImage.cols; + ////memcpy(m_matFocusGrayImage.data, datacube, rowCount*colCount); + //for (unsigned short i = 0; i < m_matFocusGrayImage.rows; i++) + //{ + // for (unsigned short j = 0; j < m_matFocusGrayImage.cols; j++) + // { + // m_matFocusGrayImage.at(i, j) = *(datacube + m_matFocusGrayImage.cols*i + j); + // //m_matFocusGrayImage.at(i, j) = datacube[colCount*i + j]; + // } + //} + + //将mat保存成文件 + //cv::imwrite("D:/delete/2222222222/test.bmp", m_matFocusGrayImage); +} + +void rgbImage::FillFocusGrayQImage(unsigned short * datacube) +{ + float two_eight = pow(2.0, 8); + float two_sixteen = pow(2.0, 12); + + int width = m_qimageFocusGrayImage->width(); + int height = m_qimageFocusGrayImage->height(); + for (unsigned short i = 0; i < height; i++) + { + for (unsigned short j = 0; j < width; j++) + { + //uint tmp = (two_eight* *(datacube + width * i + j)) / two_sixteen; + uint tmp = (two_eight* datacube[width*i + j]) / two_sixteen; + //uint tmp = datacube[width*i + j]; + + + //m_qimageFocusGrayImage->setPixel(j, i, tmp); + m_qimageFocusGrayImage->setPixel(j, i, qRgb((unsigned char)tmp, (unsigned char)tmp, (unsigned char)tmp)); + } + } + + m_qimageFocusGrayImage->save("D:/delete/2222222222/test.bmp"); + + + + + /*float two_eight = pow(2.0, 8); + float two_sixteen = pow(2.0, 16); + QImage *qi = new QImage(imwidth, imheight, QImage::Format_RGB32); + for (int i = 0; i < imheight; i++) + { + for (int j = 0; j < imwidth; j++) + { + floatData[i*imwidth + j] = (two_eight* floatData[i*imwidth + j]) / two_sixteen; + qi->setPixel(j, i, qRgb((unsigned char)floatData[i*imwidth + j], (unsigned char)floatData[i*imwidth + j], (unsigned char)floatData[i*imwidth + j])); + + + } + }*/ + +} diff --git a/Source_Files/sbgrecorder.cpp b/Source_Files/sbgrecorder.cpp index c74e3fb..9ee170e 100644 --- a/Source_Files/sbgrecorder.cpp +++ b/Source_Files/sbgrecorder.cpp @@ -622,19 +622,19 @@ void sbgtc::SbgRecorder::parseSbgMessage(QByteArray * sbgMessage) switch (mode) { case SBG_ECOM_SOL_MODE_UNINITIALIZED: - std::cout<<"此刻模式为: "<<"UNINITIALIZED"<waitForReadyRead()) + if(m_serial->waitForReadyRead(30000)) { //requestData.resize(m_serial->size()); requestData = m_serial->readAll(); diff --git a/Source_Files/udpserver.cpp b/Source_Files/udpserver.cpp index eb0d963..b5047ae 100644 --- a/Source_Files/udpserver.cpp +++ b/Source_Files/udpserver.cpp @@ -169,18 +169,9 @@ void UdpServer::processPendingDatagrams() } case 7: { - if(datagramList[1].toInt()==1) - { - std::cout<<"拷贝数据!"<wrapSetExposureTime(time*1000); + std::cout<<"7,手动设置曝光时间为:" << time < +QString formatTimeStr(char * format) +{ + //获取系统时间 + time_t timer;//time_t就是long int 类型 + struct tm *tblock; + timer = time(NULL);//返回秒数(精度为秒),从1970-1-1,00:00:00 可以当成整型输出或用于其它函数 + tblock = localtime(&timer); + //printf("Local time is: %s\n", asctime(tblock)); + + //格式化时间为需要的格式 + char timeStr_tmp[256] = { 0 }; + strftime(timeStr_tmp, sizeof(timeStr_tmp), format, tblock);// + + QString timeStr2(timeStr_tmp); +// qDebug() << "time is:" << timeStr2; + + return timeStr2; +} + QString getFileNameBaseOnTime() { using namespace std; diff --git a/Source_Files/ximeaimager.cpp b/Source_Files/ximeaimager.cpp index b54e7dd..2e8ac38 100644 --- a/Source_Files/ximeaimager.cpp +++ b/Source_Files/ximeaimager.cpp @@ -30,6 +30,13 @@ XimeaImager::XimeaImager() m_pool = new MemoryPool; q = new queue; + + m_rgbImage = new rgbImage(); +} + +XimeaImager::~XimeaImager() +{ + } void XimeaImager::openImger() @@ -70,6 +77,9 @@ void XimeaImager::openImger() if (ret) { m_imager.setEffectiveWindow(offsetx, width, offsety, height); + m_rgbImage->SetRgbImageWidthAndHeight(height, width, 20); + std::cout<<"height:"<< height <setParm(q,m_baseFileName,m_iFrameSizeInByte, m_pool); + writeData2Disk->setParm(q,m_baseFileName,m_iFrameSizeInByte, m_pool, m_rgbImage); emit startWriteDiskSignal(); m_imager.start(); @@ -528,7 +550,8 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base fclose(hHimesFile); // timesFileHandle.close(); - printf("Stopping acquisition...\n"); + timeStr = formatTimeStr(timeFormat); + printf("停止采集:%s!\n", timeStr.toStdString().c_str()); writeHdr(); @@ -553,6 +576,11 @@ void XimeaImager::writeHdr() ofstream hdrFileHandle(hdrPath.toStdString()); hdrFileHandle << "ENVI\n"; + + QString SN; + m_configfile.getSN(SN); + hdrFileHandle << "SN = " << SN.toStdString() << "\n"; + hdrFileHandle << "interleave = bil\n"; hdrFileHandle << "byte order = 0\n"; hdrFileHandle << "data type = 2\n"; @@ -798,19 +826,27 @@ void WriteData2Disk::write2Disk() m_q->pop(); r_qtx.unlock(); + //构造rgb图像,用于推流到m300遥控器 + m_rgbImage->FillRgbImage(dataBuffer); + + // std::cout<<"WriteData2Disk::write2Disk-----------------------正在写磁盘!" << m_pool->max_size() <m_VideoWriter.release(); + std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,内存池可达到的最多元素数:" << m_pool->max_size() < * q, QString baseFileName, int frameSizeInByte, MemoryPool * pool) +void WriteData2Disk::setParm(queue * q, QString baseFileName, int frameSizeInByte, MemoryPool * pool, rgbImage * rgbImage) { m_q = q; m_QbaseFileName = baseFileName; m_iFrameSizeInByte = frameSizeInByte; m_pool = pool; + + m_rgbImage = rgbImage; }