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; } }
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(); } }