Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
 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.");
     }
 }
Ejemplo n.º 3
0
        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();
        }