DeviceSpecificInstantCameraArray.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 Template for device specific instant camera array class.
  10. */
  11. #ifndef INCLUDED_DEVICESPECIFICINSTANTCAMERAARRAY_H_4299977
  12. #define INCLUDED_DEVICESPECIFICINSTANTCAMERAARRAY_H_4299977
  13. #include <pylon/InstantCameraArray.h>
  14. namespace Pylon
  15. {
  16. /*!
  17. \class CDeviceSpecificInstantCameraArrayT
  18. \brief Implementation Detail: Header only implementation class for creating device specific Instant Camera Array classes.
  19. */
  20. template <typename CameraT>
  21. class CDeviceSpecificInstantCameraArrayT : public CInstantCameraArray
  22. {
  23. public:
  24. /*!
  25. \copybrief CInstantCameraArray::CInstantCameraArray()
  26. \copydetails CInstantCameraArray::CInstantCameraArray()
  27. */
  28. CDeviceSpecificInstantCameraArrayT()
  29. {
  30. }
  31. /*!
  32. \copybrief CInstantCameraArray::CInstantCameraArray( size_t)
  33. \copydetails CInstantCameraArray::CInstantCameraArray( size_t)
  34. */
  35. CDeviceSpecificInstantCameraArrayT( size_t numberOfCameras )
  36. {
  37. CInstantCameraArray::Initialize( numberOfCameras );
  38. }
  39. /*!
  40. \copybrief CInstantCameraArray::~CInstantCameraArray()
  41. \copydetails CInstantCameraArray::~CInstantCameraArray()
  42. */
  43. virtual ~CDeviceSpecificInstantCameraArrayT()
  44. {
  45. // Stop grabbing and free all cameras.
  46. Initialize( 0 );
  47. }
  48. /*!
  49. \copybrief Pylon::CInstantCameraArray::operator[]( size_t)
  50. \copydetails Pylon::CInstantCameraArray::operator[]( size_t)
  51. */
  52. virtual CameraT& operator[]( size_t index )
  53. {
  54. //Cast camera at the index to the device specific camera type and return the result of the cast.
  55. return dynamic_cast<CameraT&>(CInstantCameraArray::operator[]( index ));
  56. }
  57. /*!
  58. \copybrief Pylon::CInstantCameraArray::operator[]( size_t)
  59. \copydetails Pylon::CInstantCameraArray::operator[]( size_t)
  60. */
  61. virtual const CameraT& operator[]( size_t index ) const
  62. {
  63. //Cast to the specific camera type and return it.
  64. return dynamic_cast<const CameraT&>(CInstantCameraArray::operator[]( index ));
  65. }
  66. /*!
  67. \copybrief Pylon::CInstantCameraArray::RetrieveResult
  68. \copydetails Pylon::CInstantCameraArray::RetrieveResult
  69. */
  70. virtual bool RetrieveResult( unsigned int timeoutMs, typename CameraT::GrabResultPtr_t& grabResult, ETimeoutHandling timeoutHandling = TimeoutHandling_ThrowException )
  71. {
  72. //Release the grab result.
  73. grabResult.Release();
  74. // Use basic grab result.
  75. CGrabResultPtr grabResultLocal;
  76. // Call basic RetrieveResult.
  77. CInstantCameraArray::RetrieveResult( timeoutMs, grabResultLocal, timeoutHandling );
  78. // Convert.
  79. grabResult = grabResultLocal;
  80. // Returns true if grabResultLocal is valid and the conversion to the device specific grab result type has been successful.
  81. return grabResult.IsValid();
  82. }
  83. // Also available.
  84. using CInstantCameraArray::RetrieveResult;
  85. public:
  86. /// The type of the camera class in the array.
  87. typedef CameraT InstantCamera_t;
  88. protected:
  89. //Create a specific camera object.
  90. virtual CInstantCamera* CreateInstantCamera()
  91. {
  92. return new CameraT;
  93. }
  94. //Destroy a specific camera object.
  95. virtual void DestroyInstantCamera( CInstantCamera* pCamera )
  96. {
  97. delete pCamera;
  98. }
  99. };
  100. }
  101. #endif /* INCLUDED_DEVICESPECIFICINSTANTCAMERAARRAY_H_4299977 */