Example #1
0
        public void Connect(ImageDescriptor imageDescriptor, IFrameProducer producer, ConsumerDisplay consumerDisplay, ConsumerMJPEGRecorder consumerRecord)
        {
            // At that point the consumer threads are already started.
            // But only the display thread (actually the UI main thread) should be "active".
            // The producer thread is not started yet, it will be started outside the pipeline manager.
            this.producer        = producer;
            this.consumerDisplay = consumerDisplay;
            this.consumerRecord  = consumerRecord;

            consumerDisplay.SetImageDescriptor(imageDescriptor);
            consumerRecord.SetImageDescriptor(imageDescriptor);

            consumers.Clear();
            consumers.Add(consumerDisplay as IFrameConsumer);
            consumers.Add(consumerRecord as IFrameConsumer);

            int buffers = 8;

            pipeline = new FramePipeline(producer, consumers, buffers, imageDescriptor.BufferSize);
            pipeline.SetBenchmarkMode(BenchmarkMode.None);

            if (pipeline.Allocated)
            {
                producer.FrameProduced += producer_FrameProduced;
                connected = true;
            }
        }
        private void CreatePipeline(ImageDescriptor imageDescriptor)
        {
            int buffers = 8;

            pipeline = new FramePipeline(producer, consumers, buffers, imageDescriptor.BufferSize);
            pipeline.SetBenchmarkMode(BenchmarkMode.None);

            if (pipeline.Allocated)
            {
                producer.FrameProduced += producer_FrameProduced;
                connected = true;
            }
        }
Example #3
0
        private void view_StartBenchmark(object sender, EventArgs <BenchmarkMode> e)
        {
            IFrameProducer frameProducer = grabber as IFrameProducer;
            //int width = grabber.Size.Width;
            //int height = grabber.Size.Height;
            //int depth = grabber.Depth;
            int width  = 2048;
            int height = 1084;
            int depth  = 1;

            benchmarkMode = e.Value;

            switch (benchmarkMode)
            {
            case BenchmarkMode.Heartbeat:
            case BenchmarkMode.Commitbeat:
            case BenchmarkMode.Bradycardia:
            case BenchmarkMode.FrameDrops:
                break;

            case BenchmarkMode.Noop:
                consumers.Add(new ConsumerNoop());
                break;

            case BenchmarkMode.OccasionallySlow:
                consumers.Add(new ConsumerOccasionallySlow());
                break;

            case BenchmarkMode.Slow:
                consumers.Add(new ConsumerSlow());
                break;

            case BenchmarkMode.LZ4:
                consumers.Add(new ConsumerLZ4());
                break;

            case BenchmarkMode.JPEG1:
                consumers.Add(new ConsumerJPEG());
                break;

            case BenchmarkMode.FrameNumber:
                consumers.Add(new ConsumerFrameNumber());
                break;

            default:
                break;
            }

            // Start all consumer threads.
            // In a real application some consumers would have been long started.
            // for example the application main thread is also the display consumer.
            foreach (IFrameConsumer consumer in consumers)
            {
                Thread thread = new Thread(consumer.Run)
                {
                    IsBackground = true
                };
                thread.Name = consumer.GetType().Name;
                thread.Start();
            }

            // Bind the ring buffer to consumers and producers.
            pipeline = new FramePipeline(frameProducer, consumers, width, height, depth);

            pipeline.SetBenchmarkMode(benchmarkMode);
            grabber.Start();

            // Activate all consumers.
            // In a real application this may be done much later, in a "record" button event handler for example.
            foreach (IFrameConsumer consumer in consumers)
            {
                consumer.Activate();
            }
        }