/* Constructor with creation of basic objects. */ public ImageProvider() { /* Create a thread for image grabbing. */ m_grabThread = new Thread(Grab); /* Create objects used for buffer handling. */ m_lockObject = new Object(); m_buffers = new Dictionary <PYLON_STREAMBUFFER_HANDLE, PylonBuffer <Byte> >(); m_grabbedBuffers = new List <GrabResult>(); /* Create handles. */ m_hGrabber = new PYLON_STREAMGRABBER_HANDLE(); m_hDevice = new PYLON_DEVICE_HANDLE(); m_hRemovalCallback = new PYLON_DEVICECALLBACK_HANDLE(); m_hConverter = new PYLON_IMAGE_FORMAT_CONVERTER_HANDLE(); /* Create callback handler and attach the method. */ m_callbackHandler = new DeviceCallbackHandler(); m_callbackHandler.CallbackEvent += new DeviceCallbackHandler.DeviceCallback(RemovalCallbackHandler); }
protected bool m_triggered = true; /* Indicates that we wish to trigger single shots */ #endregion Fields #region Constructors /* Constructor with creation of basic objects. */ public ImageProvider() { /* Create a thread for image grabbing. */ m_grabThread = new Thread(Grab); /* Create objects used for buffer handling. */ m_lockObject = new Object(); m_buffers = new Dictionary<PYLON_STREAMBUFFER_HANDLE, PylonBuffer<Byte>>(); m_grabbedBuffers = new List<GrabResult>(); /* Create handles. */ m_hGrabber = new PYLON_STREAMGRABBER_HANDLE(); m_hDevice = new PYLON_DEVICE_HANDLE(); m_hRemovalCallback = new PYLON_DEVICECALLBACK_HANDLE(); m_hConverter = new PYLON_FORMAT_CONVERTER_HANDLE(); /* Create callback handler and attach the method. */ m_callbackHandler = new DeviceCallbackHandler(); m_callbackHandler.CallbackEvent += new DeviceCallbackHandler.DeviceCallback(RemovalCallbackHandler); }
/* Open using device.*/ public void Open(PYLON_DEVICE_HANDLE device) { try { /* Use provided device. */ m_hDevice = device; /* Before using the device, it must be opened. Open it for configuring * parameters and for grabbing images. */ Pylon.DeviceOpen(m_hDevice, Pylon.cPylonAccessModeControl | Pylon.cPylonAccessModeStream); /* Register the callback function. */ m_hRemovalCallback = Pylon.DeviceRegisterRemovalCallback(m_hDevice, m_callbackHandler); /* For GigE cameras, we recommend increasing the packet size for better * performance. When the network adapter supports jumbo frames, set the packet * size to a value > 1500, e.g., to 8192. In this sample, we only set the packet size * to 1500. */ /* ... Check first to see if the GigE camera packet size parameter is supported and if it is writable. */ if (Pylon.DeviceFeatureIsWritable(m_hDevice, "GevSCPSPacketSize")) { /* ... The device supports the packet size feature. Set a value. */ Pylon.DeviceSetIntegerFeature(m_hDevice, "GevSCPSPacketSize", 1500); } /* The sample does not work in chunk mode. It must be disabled. */ if (Pylon.DeviceFeatureIsWritable(m_hDevice, "ChunkModeActive")) { /* Disable the chunk mode. */ Pylon.DeviceSetBooleanFeature(m_hDevice, "ChunkModeActive", false); } /* Disable acquisition start trigger if available. */ if (Pylon.DeviceFeatureIsAvailable(m_hDevice, "EnumEntry_TriggerSelector_AcquisitionStart")) { Pylon.DeviceFeatureFromString(m_hDevice, "TriggerSelector", "AcquisitionStart"); Pylon.DeviceFeatureFromString(m_hDevice, "TriggerMode", "Off"); } /* Disable frame burst start trigger if available */ if (Pylon.DeviceFeatureIsAvailable(m_hDevice, "EnumEntry_TriggerSelector_FrameBurstStart")) { Pylon.DeviceFeatureFromString(m_hDevice, "TriggerSelector", "FrameBurstStart"); Pylon.DeviceFeatureFromString(m_hDevice, "TriggerMode", "Off"); } /* Disable frame start trigger if available. */ if (Pylon.DeviceFeatureIsAvailable(m_hDevice, "EnumEntry_TriggerSelector_FrameStart")) { Pylon.DeviceFeatureFromString(m_hDevice, "TriggerSelector", "FrameStart"); Pylon.DeviceFeatureFromString(m_hDevice, "TriggerMode", "Off"); } /* Image grabbing is done using a stream grabber. * A device may be able to provide different streams. A separate stream grabber must * be used for each stream. In this sample, we create a stream grabber for the default * stream, i.e., the first stream ( index == 0 ). */ /* Get the number of streams supported by the device and the transport layer. */ if (Pylon.DeviceGetNumStreamGrabberChannels(m_hDevice) < 1) { throw new Exception("The transport layer doesn't support image streams."); } /* Create and open a stream grabber for the first channel. */ m_hGrabber = Pylon.DeviceGetStreamGrabber(m_hDevice, 0); Pylon.StreamGrabberOpen(m_hGrabber); /* Get a handle for the stream grabber's wait object. The wait object * allows waiting for m_buffers to be filled with grabbed data. */ m_hWait = Pylon.StreamGrabberGetWaitObject(m_hGrabber); } catch { /* Get the last error message here, because it could be overwritten by cleaning up. */ UpdateLastError(); try { Close(); /* Try to close any open handles. */ } catch { /* Another exception cannot be handled. */ } throw; } /* Notify that the ImageProvider is open and ready for grabbing and configuration. */ OnDeviceOpenedEvent(); }
/* Open using device.*/ protected void Open(PYLON_DEVICE_HANDLE device) { try { /* Use provided device. */ m_hDevice = device; /* Before using the device, it must be opened. Open it for configuring parameters and for grabbing images. */ Pylon.DeviceOpen(m_hDevice, Pylon.cPylonAccessModeControl | Pylon.cPylonAccessModeStream); /* Register the callback function. */ m_hRemovalCallback = Pylon.DeviceRegisterRemovalCallback(m_hDevice, m_callbackHandler); /* For GigE cameras, we recommend increasing the packet size for better performance. When the network adapter supports jumbo frames, set the packet size to a value > 1500, e.g., to 8192. In this sample, we only set the packet size to 1500. */ /* ... Check first to see if the GigE camera packet size parameter is supported and if it is writable. */ if (Pylon.DeviceFeatureIsWritable(m_hDevice, "GevSCPSPacketSize")) { /* ... The device supports the packet size feature. Set a value. */ Pylon.DeviceSetIntegerFeature(m_hDevice, "GevSCPSPacketSize", 1500); } /* The sample does not work in chunk mode. It must be disabled. */ if (Pylon.DeviceFeatureIsWritable(m_hDevice, "ChunkModeActive")) { /* Disable the chunk mode. */ Pylon.DeviceSetBooleanFeature(m_hDevice, "ChunkModeActive", false); } /* Disable acquisition start trigger if available. */ if (Pylon.DeviceFeatureIsAvailable(m_hDevice, "EnumEntry_TriggerSelector_AcquisitionStart")) { Pylon.DeviceFeatureFromString(m_hDevice, "TriggerSelector", "AcquisitionStart"); Pylon.DeviceFeatureFromString(m_hDevice, "TriggerMode", "Off"); } /* Disable frame start trigger if available. */ if (Pylon.DeviceFeatureIsAvailable(m_hDevice, "EnumEntry_TriggerSelector_FrameStart")) { Pylon.DeviceFeatureFromString(m_hDevice, "TriggerSelector", "FrameStart"); Pylon.DeviceFeatureFromString(m_hDevice, "TriggerMode", "Off"); } /* Image grabbing is done using a stream grabber. A device may be able to provide different streams. A separate stream grabber must be used for each stream. In this sample, we create a stream grabber for the default stream, i.e., the first stream ( index == 0 ). */ /* Get the number of streams supported by the device and the transport layer. */ if (Pylon.DeviceGetNumStreamGrabberChannels(m_hDevice) < 1) { throw new Exception("The transport layer doesn't support image streams."); } /* Create and open a stream grabber for the first channel. */ m_hGrabber = Pylon.DeviceGetStreamGrabber(m_hDevice, 0); Pylon.StreamGrabberOpen(m_hGrabber); /* Get a handle for the stream grabber's wait object. The wait object allows waiting for m_buffers to be filled with grabbed data. */ m_hWait = Pylon.StreamGrabberGetWaitObject(m_hGrabber); } catch { /* Get the last error message here, because it could be overwritten by cleaning up. */ UpdateLastError(); try { Close(); /* Try to close any open handles. */ } catch { /* Another exception cannot be handled. */ } throw; } /* Notify that the ImageProvider is open and ready for grabbing and configuration. */ OnDeviceOpenedEvent(); }