public BasicCamLoopState UpdateState(BasicCamLoopState state, ButtonCommands button) { int i = (int)state; int j = (int)button; return(nextState[i, j]); }
public BasicStreamController(OryxCamera oryxCamera) { manager = oryxCamera.manager; if (manager.output.nChannels != 1) { throw new Exception(message: "BasicStreamInfo accommodates only one output channel!"); } messageQueue = oryxCamera.messageQueue; Console.WriteLine("messageQueue: {0}", messageQueue); managedCamera = oryxCamera.managedCamera; inputSize = manager.input.inputChannel.imageSize; streamQueue = manager.output.streamQueue; outputSize = manager.output.outputChannels[0].imageSize; enqueueRate = manager.output.outputChannels[0].enqueueOrDequeueRate; isResizeNeeded = !Equals(objA: manager.input.inputChannel.imageSize, objB: manager.output.outputChannels[0].imageSize); handler = new MessageHandler.BasicMessageHandler(style: MessageHandlerStyle.Basic); state = BasicCamLoopState.Waiting; }
public void Run() { Console.WriteLine("Run was called"); while (true) { if (state == BasicCamLoopState.Waiting) { isMessageDequeueSuccess = messageQueue.TryDequeue(out ButtonCommands message); if (isMessageDequeueSuccess) { Console.WriteLine("message received on camera: {0}", message); state = handler.UpdateState(state: state, button: message); if (state == BasicCamLoopState.Streaming && !managedCamera.IsStreaming()) { ResetCounter(); managedCamera.BeginAcquisition(); } continue; } Thread.Sleep(100); continue; } else if (state == BasicCamLoopState.Streaming) { try { using (IManagedImage rawImage = managedCamera.GetNextImage()) { imageCtr += 1; long frameID = rawImage.ChunkData.FrameID; long timestamp = rawImage.ChunkData.Timestamp; if (imageCtr == 1) { currFrameMetaData = new FrameMetaData(streamCtr: imageCtr, frameID: frameID, timestamp: timestamp); continue; } prevFrameMetaData = currFrameMetaData; currFrameMetaData = new FrameMetaData(streamCtr: imageCtr, frameID: frameID, timestamp: timestamp); if (imageCtr % enqueueRate == 0) { Mat fullMat = new Mat(rows: inputSize.Height, cols: inputSize.Width, type: Emgu.CV.CvEnum.DepthType.Cv8U, channels: 1, data: rawImage.DataPtr, step: inputSize.Width); if (isResizeNeeded) { Mat resizedMat = new Mat(size: outputSize, type: Emgu.CV.CvEnum.DepthType.Cv8U, channels: 1); CvInvoke.Resize(src: fullMat, dst: resizedMat, dsize: outputSize, interpolation: Emgu.CV.CvEnum.Inter.Linear); Tuple <Mat, FrameMetaData>[] output = Util.GetStreamOutput(mat: resizedMat, metaData: currFrameMetaData); streamQueue.Enqueue(item: output); fullMat.Dispose(); } else { Tuple <Mat, FrameMetaData>[] output = Util.GetStreamOutput(mat: fullMat, metaData: currFrameMetaData); streamQueue.Enqueue(item: output); } } } } catch (SpinnakerException ex) { Console.WriteLine("Error in SimpleStreamingLoop: {0}", ex.Message); } isMessageDequeueSuccess = messageQueue.TryDequeue(out ButtonCommands message); if (isMessageDequeueSuccess) { state = handler.UpdateState(state: state, button: message); } } else if (state == BasicCamLoopState.Recording) { try { using (IManagedImage rawImage = managedCamera.GetNextImage()) { imageCtr += 1; long frameID = rawImage.ChunkData.FrameID; long timestamp = rawImage.ChunkData.Timestamp; if (imageCtr == 1) { currFrameMetaData = new FrameMetaData(streamCtr: imageCtr, frameID: frameID, timestamp: timestamp); continue; } prevFrameMetaData = currFrameMetaData; currFrameMetaData = new FrameMetaData(streamCtr: imageCtr, frameID: frameID, timestamp: timestamp); if (imageCtr % enqueueRate == 0) { Mat fullMat = new Mat(rows: inputSize.Height, cols: inputSize.Width, type: Emgu.CV.CvEnum.DepthType.Cv8U, channels: 1, data: rawImage.DataPtr, step: inputSize.Width); if (isResizeNeeded) { Mat resizedMat = new Mat(size: outputSize, type: Emgu.CV.CvEnum.DepthType.Cv8U, channels: 1); CvInvoke.Resize(src: fullMat, dst: resizedMat, dsize: outputSize, interpolation: Emgu.CV.CvEnum.Inter.Linear); Tuple <Mat, FrameMetaData>[] output = Util.GetStreamOutput(mat: resizedMat, metaData: currFrameMetaData); streamQueue.Enqueue(item: output); fullMat.Dispose(); } else { Tuple <Mat, FrameMetaData>[] output = Util.GetStreamOutput(mat: fullMat, metaData: currFrameMetaData); streamQueue.Enqueue(item: output); } } } } catch (SpinnakerException ex) { Console.WriteLine("Error in SimpleStreamingLoop: {0}", ex.Message); } isMessageDequeueSuccess = messageQueue.TryDequeue(out ButtonCommands message); if (isMessageDequeueSuccess) { state = handler.UpdateState(state: state, button: message); } } else if (state == BasicCamLoopState.Exit) { return; } } }