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