IDS Peak comfortSDK, genericSDK, IPL, and AFL developer manuals are external documents. Please contact us if you need them.
Specifies the available buffer handling mode of this DataStream.
Name |
StreamBufferHandlingMode |
Category |
|
Interface |
Enumeration |
Access |
Read/Write |
Unit |
- |
Visibility |
Beginner |
Values |
NewestOnly OldestFirst OldestFirstSingleBuffer OldestFirstDependOnCameraFIFO |
Standard |
GenTL SFNC |
Availability uEye+ |
|
Availability uEye |
|
Values description
value |
Availability |
Visibility |
Description |
---|---|---|---|
NewestOnly |
|
Beginner |
The application always gets the latest completed buffer (thus, the newest available buffer). If the Output Buffer Queue is empty, the application waits for a newly acquired buffer until the timeout expires. This buffer handling mode is typically used in a live display GUI where it is important that there is no lag between camera and display. |
OldestFirst |
|
Beginner |
The application always gets the buffer from the head of the Output Buffer Queue (thus, the oldest available one). If the Output Buffer Queue is empty, the application waits for a newly acquired buffer until the timeout expires. When data for a new buffer is available, the acquisition engine looks for any available buffer in the Input Buffer Pool, fills it, and appends it to the tail of the Output Buffer Queue. If the Input Buffer Pool is empty, the new data is dropped in the host. This results in lost frames (StreamLostFrameCount). This buffer handling mode is typically used if every image frame is to be acquired and the mean processing time is lower than the acquisition time. No buffer is discarded or overwritten in the Output Buffer Queue and all filled buffers are delivered in the order they were acquired. |
OldestFirstSingleBuffer |
Guru |
The application always gets the buffer from the head of the Output Buffer Queue (thus, the oldest available one). If the Output Buffer Queue is empty, the application waits for a newly acquired buffer until the timeout expires. When data for a new buffer is available, the acquisition engine looks for any available buffer in the Input Buffer Pool, fills it, and appends it to the tail of the Output Buffer Queue. If the Input Buffer Pool is empty, the acquisition engine stops receiving data until a buffer has been queued. This mode allows announcing one single buffer only. In this case there will be no double buffering in the transfer channel. This results in the camera dropping frames (StreamDroppedFrameCount) if the camera has insufficient buffering capabilities. This buffer handling mode is typically used if the image frames are to be acquired to a predictable memory address. The mean processing time must be lower than the acquisition time. No buffer is discarded or overwritten in the Output Buffer Queue and all filled buffers are delivered in the order they were acquired. |
|
OldestFirstDependOnCameraFIFO |
Expert |
The application always gets the buffer from the head of the Output Buffer Queue (thus, the oldest available one). If the Output Buffer Queue is empty, the application waits for a newly acquired buffer until the timeout expires. When data for a new buffer is available, the acquisition engine looks for any available buffer in the Input Buffer Pool, fills it, and appends it to the tail of the Output Buffer Queue. If the Input Buffer Pool is empty, the acquisition engine stops receiving data until a buffer has been queued. This results in the camera dropping frames (StreamDroppedFrameCount) or discarding data (StreamIncompleteFrameCount) if the camera has insufficient buffering capabilities. This buffer handling mode is typically used if every image frame is to be acquired and the mean processing time is lower than the acquisition time. No buffer is discarded or overwritten in the Output Buffer Queue and all filled buffers are delivered in the order they were acquired. |
Fig. 291: Buffer handling "OldestFirst"
Fig. 292: Buffer handling "NewestOnly"
Code example
C++
// Determine the current entry of StreamBufferHandlingMode
std::string value = nodeMapDataStream->FindNode<peak::core::nodes::EnumerationNode>("StreamBufferHandlingMode")->CurrentEntry()->SymbolicValue();
// Get a list of all available entries of StreamBufferHandlingMode
auto allEntries = nodeMapDataStream->FindNode<peak::core::nodes::EnumerationNode>("StreamBufferHandlingMode")->Entries();
std::vector<std::shared_ptr<peak::core::nodes::EnumerationEntryNode>> availableEntries;
for(const auto & entry : allEntries)
{
if ((entry->AccessStatus()!=peak::core::nodes::NodeAccessStatus::NotAvailable)
&& (entry->AccessStatus()!=peak::core::nodes::NodeAccessStatus::NotImplemented))
{
availableEntries.emplace_back(entry);
}
}
// Set StreamBufferHandlingMode to "OldestFirst"
nodeMapDataStream->FindNode<peak::core::nodes::EnumerationNode>("StreamBufferHandlingMode")->SetCurrentEntry("OldestFirst");
C#
// Determine the current entry of StreamBufferHandlingMode
string value = nodeMapDataStream.FindNode<peak.core.nodes.EnumerationNode>("StreamBufferHandlingMode").CurrentEntry().SymbolicValue();
// Get a list of all available entries of StreamBufferHandlingMode
allEntries = nodeMapDataStream.FindNode<peak.core.nodes.EnumerationNode>("StreamBufferHandlingMode").Entries();
List<string> availableEntries = new List<string>();
for(int i = 0; i < allEntries.Count(); ++i)
{
if ((allEntries[i].AccessStatus() != peak.core.nodes.NodeAccessStatus.NotAvailable)
&& (allEntries[i].AccessStatus() != peak.core.nodes.NodeAccessStatus.NotImplemented))
{
availableEntries.Add(allEntries[i].SymbolicValue());
}
}
// Set StreamBufferHandlingMode to "OldestFirst"
nodeMapDataStream.FindNode<peak.core.nodes.EnumerationNode>("StreamBufferHandlingMode").SetCurrentEntry("OldestFirst");
Python
# Determine the current entry of StreamBufferHandlingMode (str)
value = nodeMapDataStream.FindNode("StreamBufferHandlingMode").CurrentEntry().SymbolicValue()
# Get a list of all available entries of StreamBufferHandlingMode
allEntries = nodeMapDataStream.FindNode("StreamBufferHandlingMode").Entries()
availableEntries = []
for entry in allEntries:
if (entry.AccessStatus() != peak.NodeAccessStatus_NotAvailable
and entry.AccessStatus() != peak.NodeAccessStatus_NotImplemented):
availableEntries.append(entry.SymbolicValue())
# Set StreamBufferHandlingMode to "OldestFirst" (str)
nodeMapDataStream.FindNode("StreamBufferHandlingMode").SetCurrentEntry("OldestFirst")