AttachBuffer(const void * pBuffer, int64_t BufferLength, GenApi::AttachStatistics_t * pAttachStatistics =NULL) =0 Pass in a buffer and let the chunk parser analyze it.
virtual void
DetachBuffer() =0 Detaches a buffer from the chunk parser. The buffer will no longer accessed by the chunk parser.
virtual void
UpdateBuffer(const void * pBaseAddress) =0 Pass in a buffer and let the chunk parser update the camera object's parameters.
virtual bool
HasCRC() const =0 Checks if buffer has a CRC attached.
Low Level API: The interface for chunk parsers analyzing a data stream consisting of chunks.
Note Check the payload type of the GrabResult_t before attaching or updating the buffer.
When chunk data is enabled in the camera the stream sends additional data along with the image. This data needs to be extracted with help of a chunk parser. These are created using the camera's member function IPylonDevice::CreateChunkParser().
When an image buffer containing chunked data is passed to a chunk parser, the camera's chunk related parameters are updated. After changing the data layout either by changing the AOI or enabling/disabling chunk features the parser needs to be reinitialized by calling IChunkParser::AttachBuffer(). Thereafter buffers with the same layout are processed with the IChunkParser::UpdateBuffer() method. Chunk related properties remain unchanged until a new buffer is passed in.
The code snippet below demonstrates the usage of a chunk parser. A complete program is found in the sample AcquireSingleFrame_ChunkImage.
IChunkParser&ChunkParser=*Camera.CreateChunkParser();// enable Frame Counter chunkCamera.ChunkModeActive.SetValue(true);Camera.ChunkSelector.SetValue(ChunkSelector_Framecounter);Camera.ChunkEnable.SetValue(true);// retrieve data from the chunkGrabResultResult;if(StreamGrabber.RetrieveResult(Result)&&Result.Succeeded()&&Result.PayloadType()==PayloadType_ChunkData){ChunkParser.AttachBuffer(Result.Buffer(),Result.GetPayloadSize());int64_tframeCounter=Camera.ChunkFramecounter.GetValue();}
This method can be used when the layout of the chunk data hasn't changed since a previous buffer has been attached to the chunk parser. In this case UpdateBuffer is slightly faster than AttachBuffer, because the buffer's layout is reused. If you call UpdateBuffer without having called AttachBuffer first, a LogicalErrorException is raised.