示例#1
0
        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();
        }
示例#2
0
        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();
        }