2 Commits
42 ... master

Author SHA1 Message Date
faf83b2545 fix:
1、光谱bin2 hdr文件中的波长信息;
2、第一次运行创建配置文件时,添加推流配置;
2024-12-04 16:13:56 +08:00
e8760dcfe5 优化编码参数解决问题:
1、编码后数据量过大导致大疆图传中断;
2、大疆遥控器解码后,视频出现偶尔后退的情况;
2024-09-25 13:46:55 +08:00
3 changed files with 16 additions and 52 deletions

View File

@ -436,6 +436,10 @@ bool Configfile::createConfigFile()
ximeadll.add("buffer_policy", Setting::TypeInt) = 0; ximeadll.add("buffer_policy", Setting::TypeInt) = 0;
ximeadll.add("acq_buffer_size", Setting::TypeInt) = 400; ximeadll.add("acq_buffer_size", Setting::TypeInt) = 400;
Setting &push_flow_param = root.add("push_flow_param", Setting::TypeGroup);
push_flow_param.add("flow_switch", Setting::TypeInt) = 1;
push_flow_param.add("rgb_height", Setting::TypeInt) = 720;
push_flow_param.add("framerate_video", Setting::TypeInt) = 5;
// Write out the new configuration. // Write out the new configuration.
QString output_file = "/media/nvme/300TC/config/ximea.cfg"; QString output_file = "/media/nvme/300TC/config/ximea.cfg";

View File

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

View File

@ -96,7 +96,7 @@ void XimeaImager::openImger()
} }
float gain, offset;//用于生成头文件中的波长信息 float gain, offset;//用于生成头文件中的波长信息
ret = m_configfile.getGainOffsetOfSpectralBin1(gain, offset); ret = m_configfile.getGainOffset(gain, offset);
if (ret) if (ret)
{ {
m_imager.setGainOffset(gain, offset); m_imager.setGainOffset(gain, offset);
@ -509,24 +509,9 @@ double XimeaImager::geWavelengthAtBand(int x)
void XimeaImager::getRgbBandNumber(int &redBandNumber, int &greenBandNumber, int &blueBandNumber) void XimeaImager::getRgbBandNumber(int &redBandNumber, int &greenBandNumber, int &blueBandNumber)
{ {
vector<double> wavelengths; vector<double> wavelengths;
if (m_imager.getSpectralBin() == 1) for (int i = getWindowStartBand(); i < getWindowEndBand(); i++)
{ {
for (int i = getWindowStartBand(); i < getWindowEndBand(); i++) wavelengths.push_back(geWavelengthAtBand(i));
{
wavelengths.push_back(geWavelengthAtBand(i));
}
}
else if (m_imager.getSpectralBin() == 2)
{
for (int i = m_iOffsetyOfSpectralBin2; i < m_iOffsetyOfSpectralBin2 + m_iHeightOfSpectralBin2; i++)
{
if (i*2 + 1 > m_iOffsetyOfSpectralBin1 + m_iHeightOfSpectralBin1)
{
printf("XimeaImager::writeHdr 出现错误:窗口中,光谱 bin1 波段数小于 bin2 的 2 倍。\n");
break;
}
wavelengths.push_back((geWavelengthAtBand(i*2) + geWavelengthAtBand(i*2 + 1)) / 2);
}
} }
//envi打开文件时的红绿蓝波长nm //envi打开文件时的红绿蓝波长nm
@ -801,41 +786,16 @@ void XimeaImager::writeHdr()
hdrFileHandle << "wavelength = {"; hdrFileHandle << "wavelength = {";
//hdrFileHandle << std::setprecision(5); //hdrFileHandle << std::setprecision(5);
if (m_imager.getSpectralBin() == 1) for (int i = getWindowStartBand(); i < getWindowEndBand(); i++)
{ {
for (int i = getWindowStartBand(); i < getWindowEndBand(); i++) hdrFileHandle << geWavelengthAtBand(i);
if (i < getWindowEndBand() - 1)
hdrFileHandle << ", ";
else
{ {
hdrFileHandle << geWavelengthAtBand(i); printf("头文件中写入了多少个波段:%d\n",i-getWindowStartBand()+1);//???????????????
if (i < getWindowEndBand() - 1)
hdrFileHandle << ", ";
else
{
printf("头文件中写入了多少个波段:%d\n",i-getWindowStartBand()+1);//???????????????
}
} }
} }
else if (m_imager.getSpectralBin() == 2)
{
int counter = 0;
for (int i = m_iOffsetyOfSpectralBin2; i < m_iOffsetyOfSpectralBin2 + m_iHeightOfSpectralBin2; i++)
{
if (i*2 + 1 > m_iOffsetyOfSpectralBin1 + m_iHeightOfSpectralBin1)
{
printf("XimeaImager::writeHdr 出现错误:窗口中,光谱 bin1 波段数小于 bin2 的 2 倍。\n");
break;
}
hdrFileHandle << (geWavelengthAtBand(i*2) + geWavelengthAtBand(i*2 + 1)) / 2;
counter++;
if (i < m_iOffsetyOfSpectralBin2 + m_iHeightOfSpectralBin2 - 1)
hdrFileHandle << ", ";
else
{
printf("头文件中写入了多少个波段:%d\n", counter);
}
}
}
hdrFileHandle << "}\n"; hdrFileHandle << "}\n";
hdrFileHandle.close(); hdrFileHandle.close();
@ -1232,8 +1192,8 @@ void PushFlow::encodePushFlow()
codecContext->height = m_iHeight; codecContext->height = m_iHeight;
codecContext->time_base = {1, m_iFramerateVideo}; codecContext->time_base = {1, m_iFramerateVideo};
codecContext->pix_fmt = AV_PIX_FMT_YUV420P; // 设置为YUV420P格式 codecContext->pix_fmt = AV_PIX_FMT_YUV420P; // 设置为YUV420P格式
codecContext->gop_size = 1;//多少帧产生一组关键帧 codecContext->gop_size = 50;//多少帧产生一组关键帧
codecContext->max_b_frames = 1;//b帧参考帧 codecContext->max_b_frames = 0;//b帧参考帧设置为1会导致视频回退的现象
// codecContext->bit_rate = 1000000; // 设置比特率为 1000000 // codecContext->bit_rate = 1000000; // 设置比特率为 1000000
// 打开视频编码器 // 打开视频编码器