public override Task <BufferedFramesResponse> RequestBufferedFrames(BufferedFramesRequest request, Grpc.Core.ServerCallContext context) { var ret = new BufferedFramesResponse(); try { foreach (var frame in _frames) { if (frame.ReceiveStatus == VmbFrameStatusType.VmbFrameStatusComplete) { var output = MakeImageBuffer(new FrameData(frame)); var bs = ByteString.FromStream(output); ret.Images.Add(bs); } } } catch (Exception e) { ret.Error = ServiceHelper.BuildError(e, Error.Types.Level.Error); } return(Task.FromResult(ret)); }
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)); }