Files
handleaiuinew/env/basler/include/pylon/PylonImageUserBufferEventHandler.h
T

93 lines
3.4 KiB
C++
Raw Normal View History

2024-05-18 23:53:26 +08:00
//-----------------------------------------------------------------------------
// Basler pylon SDK
// Copyright (c) 2021-2023 Basler AG
// http://www.baslerweb.com
// Author: JS
//-----------------------------------------------------------------------------
/**
\file
\brief Contains the pylon image event handler base class.
*/
#pragma once
#ifndef INCLUDED_PYLONIMAGEUSERBUFFEREVENTHANDLER_H_
#define INCLUDED_PYLONIMAGEUSERBUFFEREVENTHANDLER_H_
#include <pylon/stdinclude.h>
#pragma pack(push, PYLON_PACKING)
namespace Pylon
{
/** \addtogroup Pylon_ImageHandlingSupport
* @{
*/
/**
\class CPylonImageUserBufferEventHandler
\brief The CPylonImage user buffer event handler base class.
You can optionally pass an object derived from this class when calling CPylonImage::AttachUserBuffer().
When the CPylonImage doesn't need the user buffer anymore, it will call the CPylonImageUserBufferEventHandler::OnPylonImageUserBufferDetached()
method. You can override this function to execute your custom code when the user buffer has been detached implicitly.
The user is responsible for ensuring the object is valid until CPylonImageUserBufferEventHandler::OnPylonImageUserBufferDetached() has been called.
*/
class CPylonImageUserBufferEventHandler
{
public:
/**
\brief This method is called after the image class has released its user buffer.
This method is called after the image class releases its image buffer.
In case a user buffer has been attached using CPylonImage::AttachUserBuffer() you can use this to free
your user buffer.
In case you created the event handler on the heap using \c new, you can call <tt>delete this</tt> at the end of the function.
\code{.cpp}
// Sample handler to show how to delete the handler when allocating the handler on the heap.
class MyHandler : public CPylonImageUserBufferEventHandler {
OnPylonImageUserBufferDetached( void* pUserBuffer, size_t bufferSizeBytes ) override {
// Use our custom memory allocator to free the user buffer.
MyCustomFreeMemory( pUserBuffer );
// Delete the handler.
delete this;
}
};
// Use our custom memory allocator for pixel data.
void* pUserBuffer = MyCustomAllocateMemory( 640 * 480 );
// Attach user buffer using a heap-allocated event handler.
CPylonImage image;
image.AttachUserBuffer(pUserBuffer, (640 * 480), PixelType_Mono8, 640, 480, 0, ImageOrientation_TopDown, new MyHandler() );
\endcode
The default implementation does nothing. You can override this function to execute custom code.
\param[in] pUserBuffer Pointer to the user buffer passed when the user buffer was attached using CPylonImage::AttachUserBuffer().
\param[in] bufferSizeBytes Size of the user buffer passed when the user buffer was attached using CPylonImage::AttachUserBuffer().
\error
This function must not throw any exceptions.
*/
virtual void OnPylonImageUserBufferDetached( void* pUserBuffer, size_t bufferSizeBytes )
{
PYLON_UNUSED( pUserBuffer );
PYLON_UNUSED( bufferSizeBytes );
}
};
/**
* @}
*/
}
#pragma pack(pop)
#endif /* INCLUDED_PYLONIMAGEUSERBUFFEREVENTHANDLER_H_ */