DeviceSpecificCameraEventHandlerTie.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //-----------------------------------------------------------------------------
  2. // Basler pylon SDK
  3. // Copyright (c) 2010-2021 Basler AG
  4. // http://www.baslerweb.com
  5. // Author: Andreas Gau
  6. //-----------------------------------------------------------------------------
  7. /*!
  8. \file
  9. \brief Contains an adapter class for device specific camera event handlers.
  10. */
  11. #ifndef INCLUDED_DEVICESPECIFICCAMERAEVENTHANDLERTIE_H_4759899
  12. #define INCLUDED_DEVICESPECIFICCAMERAEVENTHANDLERTIE_H_4759899
  13. #include <pylon/CameraEventHandler.h>
  14. #include <pylon/stdinclude.h>
  15. namespace Pylon
  16. {
  17. /*!
  18. \class CDeviceSpecificCameraEventHandlerTie
  19. \brief Implementation Detail: Adapter for device specific camera event handlers.
  20. */
  21. template <typename DeviceSpecificCameraT, typename InterfaceT>
  22. class CDeviceSpecificCameraEventHandlerTie : public CCameraEventHandler
  23. {
  24. public:
  25. CDeviceSpecificCameraEventHandlerTie( InterfaceT* ptr, bool isCleanupDelete )
  26. : m_ptr( ptr )
  27. , m_isCleanupDelete( isCleanupDelete )
  28. {
  29. }
  30. ~CDeviceSpecificCameraEventHandlerTie()
  31. {
  32. }
  33. virtual void OnCameraEvent( CInstantCamera& camera, intptr_t userProvidedId, GenApi::INode* pNode )
  34. {
  35. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  36. m_ptr->OnCameraEvent( static_cast<DeviceSpecificCameraT&>(camera), userProvidedId, pNode );
  37. }
  38. virtual void OnCameraEventHandlerRegistered( CInstantCamera& camera, const String_t& nodeName, intptr_t userProvidedId )
  39. {
  40. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  41. m_ptr->OnCameraEventHandlerRegistered( static_cast<DeviceSpecificCameraT&>(camera), nodeName, userProvidedId );
  42. }
  43. virtual void OnCameraEventHandlerDeregistered( CInstantCamera& camera, const String_t& nodeName, intptr_t userProvidedId )
  44. {
  45. m_ptr->OnCameraEventHandlerDeregistered( static_cast<DeviceSpecificCameraT&>(camera), nodeName, userProvidedId );
  46. }
  47. virtual void DestroyCameraEventHandler()
  48. {
  49. try
  50. {
  51. // destroy only when demanded
  52. if (m_isCleanupDelete)
  53. {
  54. m_ptr->DestroyCameraEventHandler();
  55. }
  56. m_ptr = NULL;
  57. }
  58. catch (...)
  59. {
  60. delete this;
  61. m_ptr = NULL;
  62. throw;
  63. }
  64. delete this;
  65. }
  66. private:
  67. InterfaceT* m_ptr;
  68. bool m_isCleanupDelete;
  69. };
  70. }
  71. #endif /* INCLUDED_DEVICESPECIFICCAMERAEVENTHANDLERTIE_H_4759899 */