When I test using the Argus program, I can initially fetch images normally, but after a long period of inactivity, the following error is reported. What is causing this? How can I fix it
(Argus) Error Timeout: (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamerautils/inc/QueueImpl.h, function dequeueWait(), line 260)
(Argus) Error Timeout: Failed to dequeue next request - exiting encoder work thread (in src/eglstream/JPEGEncoder.cpp, function run(), line 478)
Argus::Status status;
std::vector<std::string> filenames;
std::mutex mtx;
#pragma omp parallel for
for (int i = 0; i < _capture_holders.size(); i++)
{
auto hold = _capture_holders[i];
if(!hold->getInitState()){
ErrorL << hold->getSensorName() << " init error!";
continue;
}
ICaptureSession *iCaptureSession = interface_cast<ICaptureSession>(hold->getSession());
Request *request = hold->getRequest();
uint32_t frameId = iCaptureSession->capture(request);
if (frameId == 0)
{
PrintE("Failed to submit capture request for camera");
continue;
}
{
Argus::Status state;
EGLStream::IFrameConsumer *iFrameConsumer = Argus::interface_cast<EGLStream::IFrameConsumer>(hold->getConsumer());
CONTINUE_IF_NULL(iFrameConsumer,"Failed to initialize Consumer for camera");
Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame(_timeout, &state));
EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
CONTINUE_IF_NULL(iFrame, "Failed to get IFrame interface");
EGLStream::Image *image = iFrame->getImage();
CONTINUE_IF_NULL(image, "Failed to get Image from iFrame->getImage()");
EGLStream::IImageJPEG *iImageJPEG = Argus::interface_cast<EGLStream::IImageJPEG>(image);
CONTINUE_IF_NULL(iImageJPEG, "Failed to get ImageJPEG Interface");
// printf("num %lld, %lld\r\n", iFrame->getNumber(), iFrame->getTime());
std::string filename = autotest::getCurrentWorkingDir() + "/media/" + hold->getSensorName() + "-" + std::to_string(iFrame->getTime()) + ".jpg";
toolkit::File::create_file(filename.c_str(),"w");
status = iImageJPEG->writeJPEG(filename.c_str());
CONTINUE_IF_NOT_OK(status, "Failed to write JPEG");
{
std::lock_guard<std::mutex> lock(mtx);
filenames.push_back(GENERATE_DATA(hold->getSensorName(),filename));
}
}
iCaptureSession->waitForIdle();
// Shut down Argus.
}
cameraProvider.reset();
std::ostringstream oss;
for (size_t i = 0; i < filenames.size(); i++)
{
oss << filenames[i];
if (i != filenames.size() - 1)
{
oss << "|"; // 添加逗号
}
}
InfoL << oss.str().c_str();
char files[1024];
memcpy(files,oss.str().c_str(),oss.str().size());
int ret = _pipe_wrap.write(files, oss.str().size());
return ret;
}