Hello,
In the documentation, I can see enum WaitStatus.
About “WaitStatus ::Abort” with the comment : The acquisition has been stopped asynchronously, there is no image buffer. Context : std::tie(composite, waitStatus, enumerator) = this->m_datastream->WaitFor(TIMEOUT);
Does “WaitStatus ::Abort” means that the ring ring buffer is full?
Another question :
Can “WaitFor” generate an exception and what are they?
so let me try to explain what I think is going on here and what the documentation means.
Just as a baseline for understanding: There is a buffer in CVB usually reffered to as the Ringbuffer which usually holds 3 images or buffers.
With LockMode “Auto” (default) this means, that if your processing takes longer than it takes for the 3 buffers being filled, you will start losing images.
So, I would interprete the comment on WaitStatus::Abort similar to the one on WaitSatus::Timeout.
The Timeout usually happens, when no new image data could be retrieved from you ringbuffer within the given timespan. Thus there is no buffer that can be returned. This might be due to no trigger within the given time the code has waited.
The Abort should trigger, when you for example stop a stream with stream->Abort().
This means, you might not yet have an (partly) acquired an image when the Abort happened.
In this case there should also not be returned any buffer as this might let an user ignore the returned status and go on with the partly filled image which (jokes on the user for ignoring the status) might lead to problems later on.
Regarding the exceptions I have the following information from the methods comment:
//! \brief Waits for the given time span for the next acquired image.
/*!
* \param [in] timeSpan Time to wait for an image.
* \return Wait result; a combination of an image and status.
* \throws Any exception derived from std::exception including CvbException.
*/