public AutoTrackerDlg() { InitializeComponent(); CameraConfig cfg = new CameraConfig() { ROIs = new Point[] { new Point(0, 0) }, ROISize = new Point(800, 600) }; session = new ImaqSession("img0"); SetROIs(cfg); buflist = session.CreateBufferCollection(40); session.Acquisition.Configure(buflist); bufNum = 0; session.Acquisition.AcquireCompleted += Acquisition_AcquireCompleted; session.Acquisition.AcquireAsync(); session.Start(); }
void AcqProc() { reqStopStreaming.Reset(); Trace.TraceInformation("Setting up 'frame start' output signal lines"); SetupOutputSignal_FrameStart(rtsiLine: 0); //session.SignalEvents.AddSignal("Frame done", // new ImaqSignalEventDescriptor(ImaqSignalStatus.FrameDone, // ImaqSignalState.High)); RectSize size = PostBinningRoiSize; bool recycleBuffers = (buffers != null) && (buffers.Count == nDriverFrameBuffers) && (bufferSize == size); if (!recycleBuffers) { Trace.TraceInformation("Allocating {0} buffers...", nDriverFrameBuffers); buffers = session.CreateBufferCollection(nDriverFrameBuffers, ImaqBufferCollectionType.PixelValue2D); bufferSize = size; Trace.TraceInformation("Setting up buffer ring..."); session.RingSetup(buffers, 0, false); } Trace.TraceInformation("Starting acquisition..."); session.Start(); int frameIndex = -1; startedStreaming.Set(); while (!reqStopStreaming.WaitOne(0)) { uint extractedBufferIndex; ImaqBuffer buf = session.Acquisition.Extract( (uint)(frameIndex + 1), out extractedBufferIndex); if (extractedBufferIndex != frameIndex + 1) { Trace.TraceWarning("Skipped from frame {0} to frame {1}", frameIndex, extractedBufferIndex); } frameIndex = (int)extractedBufferIndex; RingBufferForOutput.TryCopyIn <NF, VideoFrame>(frameCopierDelegate, new NF(frameIndex, buf)); Action a = Interlocked.Exchange(ref pauseAndExecute, null); if (a != null) { Trace.TraceInformation("Pausing acquisition to execute an interrupt...."); session.Stop(); Trace.TraceInformation("Executing..."); a(); Trace.TraceInformation("Restarting acquisition..."); session.Start(); } } session.Stop(); }