public ThreadManager(StreamArchitecture architecture, string[] sessionPaths, IList <IManagedCamera> managedCameras, Util.OryxSetupInfo[] oryxSetups) { this.architecture = architecture; this.sessionPaths = sessionPaths; this.managedCameras = managedCameras; this.oryxSetups = oryxSetups; streamGraph = new StreamGraph(this.architecture); managerBundle = new ManagerBundle(graph: streamGraph, sessionPaths: this.sessionPaths, camFrameSize: oryxSetups[0].frameSize); SetupThreads(); }
public StreamGraph(StreamArchitecture architecture) { this.architecture = architecture; if (this.architecture == StreamArchitecture.ThreeLevelBasic) { nThreadLayers = 3; nThreadsPerLayer = new int[] { 2, 2, 1 }; graph = new ThreadType[nThreadLayers][]; graph[0] = new ThreadType[2] { ThreadType.Camera, ThreadType.Camera }; graph[1] = new ThreadType[2] { ThreadType.SingleCameraStream, ThreadType.SingleCameraStream }; graph[2] = new ThreadType[1] { ThreadType.MergeStreams }; } else { throw new ArgumentException(message: "Only ThreeLevelBasic StreamArchitecture is currently supported."); } }
public Form1() { InitializeComponent(); system = new ManagedSystem(); // Print current Spinnaker library version info: LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine( "Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // Find all Flir cameras on the system: managedCameras = system.GetCameras(); // Assert that exactly two cameras are found: int nCamsFound = managedCameras.Count; if (nCamsFound != nCameras) { Console.WriteLine("Need exactly two cameras, but {0} cameras were found. Disposing system.", nCamsFound.ToString()); managedCameras.Clear(); system.Dispose(); } // Create or select folder to write video data: sessionPaths = Util.SetDataWritePaths(animalName: Util.AnimalName.Charlie); // Initialize OryxSetupInfo Object to pass to camera constructors upon initialization: oryxSetupInfos = new Util.OryxSetupInfo[nCameras]; for (int i = 0; i < nCameras; i++) { oryxSetupInfos[i] = new Util.OryxSetupInfo(); } bool areAllCamSettingsIdentical = true; if (areAllCamSettingsIdentical) { Console.WriteLine("\n\n"); Console.WriteLine("Cameras have identical settings, shown here:"); oryxSetupInfos[0].PrintSettingsToLoad(); Console.WriteLine("\n\n"); } StreamArchitecture architecture = StreamArchitecture.ThreeLevelBasic; threadManager = new ThreadManager(architecture: architecture, sessionPaths: sessionPaths, managedCameras: managedCameras, oryxSetups: oryxSetupInfos); xBoxController = new XBoxController(mainForm: this, messageQueues: threadManager.managerBundle.messageQueues, streamGraph: threadManager.streamGraph); displayTimer = new System.Windows.Forms.Timer(); displayTimer.Interval = 2; displayTimer.Tick += DisplayTimerEventProcessor; displayTimer.Enabled = true; displayQueue = threadManager.managerBundle.mergeStreamsManager.output.displayQueue; threadManager.StartThreads(); }