public override Task <CameraAcquisitionResponse> RequestCameraAcquisition(CameraAcquisitionRequest request,
                                                                                  Grpc.Core.ServerCallContext context)
        {
            var ret = new CameraAcquisitionResponse();

            try
            {
                lock (_acquisitionLock)
                {
                    if (_frames.Length != _numFrames)
                    {
                        _frames = new Frame[_numFrames];
                    }
                    _cameraInstance.AcquireMultipleImages(ref _frames, 10000);
                    if (_frameStreamWriter != null)
                    {
                        lock (_frameStreamWriterLock)
                        {
                            BufferedFramesResponse bufferedFrames = null;
                            foreach (var frame in _frames)
                            {
                                var ms = MakeImageBuffer(new FrameData(frame));
                                var bs = ByteString.FromStream(ms);
                                bufferedFrames = new BufferedFramesResponse();
                                bufferedFrames.Images.Add(bs);
                            }
                            _frameStreamWriter.WriteAsync(bufferedFrames);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ret.Error = ServiceHelper.BuildError(e, Error.Types.Level.Error);
            }

            return(Task.FromResult(ret));
        }
Esempio n. 2
0
 /// <summary>Осуществляет захват нескольких кадров в синхронном режиме</summary>
 /// <param name="frames">Массив, в который будут помещены захваченные кадры. Размер массива - количество захватываемых кадров</param>
 /// <param name="timeout">Таймаут, по истечению которого будет сгенерировано исключение. Относится к одиночному кадру, а не ко всей серии</param>
 public void AcquireMultipleImages(ref Frame[] frames, int timeout)
 {
     m_Camera.AcquireMultipleImages(ref frames, timeout);
 }