private async Task ResizePicture(string extension, MMALEncoding encoding, MMALEncoding pixelFormat, int width, int height) { using (var imgCaptureHandler = new ImageStreamCaptureHandler("/home/pi/images/", extension)) using (var resizer = new MMALResizerComponent()) using (var imgEncoder = new MMALImageEncoder()) using (var nullSink = new MMALNullSinkComponent()) { this.Cam.ConfigureCameraSettings(); await Task.Delay(2000); var resizerConfig = new MMALPortConfig(pixelFormat, pixelFormat, width: width, height: height); var encoderConfig = new MMALPortConfig(encoding, pixelFormat, quality: 90); // Create our component pipeline. resizer.ConfigureInputPort(new MMALPortConfig(MMALCameraConfig.Encoding, MMALCameraConfig.EncodingSubFormat), this.Cam.Camera.StillPort, null); resizer.ConfigureOutputPort(resizerConfig, null); imgEncoder.ConfigureOutputPort(encoderConfig, imgCaptureHandler); this.Cam.Camera.StillPort.ConnectTo(resizer); resizer.Outputs[0].ConnectTo(imgEncoder); this.Cam.Camera.PreviewPort.ConnectTo(nullSink); await this.Cam.ProcessAsync(this.Cam.Camera.StillPort); } }
public async Task RecordVideoDirectlyFromResizer() { TestHelper.BeginTest("RecordVideoDirectlyFromResizer"); TestHelper.SetConfigurationDefaults(); TestHelper.CleanDirectory("/home/pi/videos/tests"); using (var vidCaptureHandler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "raw")) using (var preview = new MMALVideoRenderer()) using (var resizer = new MMALResizerComponent()) { Fixture.MMALCamera.ConfigureCameraSettings(); // Use the resizer to resize 1080p to 640x480. var portConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 640, 480, 0, 0, 0, false, null); resizer.ConfigureOutputPort <VideoPort>(0, portConfig, vidCaptureHandler); // Create our component pipeline. Fixture.MMALCamera.Camera.VideoPort .ConnectTo(resizer); Fixture.MMALCamera.Camera.PreviewPort .ConnectTo(preview); // Camera warm up time await Task.Delay(2000); CancellationTokenSource cts = new CancellationTokenSource(TimeSpan.FromSeconds(15)); // Record video for 20 seconds await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.VideoPort, cts.Token); Fixture.CheckAndAssertFilepath(vidCaptureHandler.GetFilepath()); } }
public async Task RecordVideoDirectlyFromResizerWithSplitterComponent() { TestHelper.BeginTest("RecordVideoDirectlyFromResizerWithSplitterComponent"); TestHelper.SetConfigurationDefaults(); TestHelper.CleanDirectory("/home/pi/videos/tests"); // I am only using a single output here because due to the disk IO performance on the Pi you ideally need to be // using a faster storage medium such as the ramdisk to output to multiple files. using (var vidCaptureHandler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264")) using (var preview = new MMALVideoRenderer()) using (var splitter = new MMALSplitterComponent()) using (var resizer = new MMALResizerComponent()) { Fixture.MMALCamera.ConfigureCameraSettings(); var splitterPortConfig = new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420); var resizerPortConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 1024, height: 768, timeout: DateTime.Now.AddSeconds(15)); // Create our component pipeline. splitter.ConfigureInputPort(new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420), Fixture.MMALCamera.Camera.VideoPort, null); splitter.ConfigureOutputPort(0, splitterPortConfig, null); resizer.ConfigureOutputPort <VideoPort>(0, resizerPortConfig, vidCaptureHandler); // Create our component pipeline. Fixture.MMALCamera.Camera.VideoPort .ConnectTo(splitter); splitter.Outputs[0].ConnectTo(resizer); Fixture.MMALCamera.Camera.PreviewPort .ConnectTo(preview); // Camera warm up time await Task.Delay(2000); await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.VideoPort); Fixture.CheckAndAssertFilepath(vidCaptureHandler.GetFilepath()); } }
private async Task BuildCameraPipelineAsync(CancellationToken cancellationToken) { camera.ConfigureCameraSettings(); this.imageEncoder = new MMALImageEncoder(); this.memoryStreamHandler = new MemoryStreamCaptureHandler(); this.resizer = new MMALResizerComponent(); this.nullSink = new MMALNullSinkComponent(); this.portConfig = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, 90); this.resizerPortConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 1024, 768, 0, 0, 0, false, null); this.imageEncoder.ConfigureOutputPort(this.portConfig, memoryStreamHandler); this.resizer.ConfigureInputPort(new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420), camera.Camera.StillPort, null) .ConfigureOutputPort(this.resizerPortConfig, null); camera.Camera.StillPort.ConnectTo(resizer); this.resizer.Outputs[0].ConnectTo(imageEncoder); camera.Camera.PreviewPort.ConnectTo(nullSink); await Task.Delay(TimeSpan.FromSeconds(2), cancellationToken); }
private void ClearCameraPipeline() { if (this.nullSink != null) { this.nullSink.Dispose(); this.nullSink = null; } if (this.imageEncoder != null) { this.imageEncoder.Dispose(); this.imageEncoder = null; } if (this.resizer != null) { this.resizer.Dispose(); this.resizer = null; } if (this.memoryStreamHandler != null) { this.memoryStreamHandler.Dispose(); this.memoryStreamHandler = null; } }
public async Task RecordVideoDirectlyFromResizerWithSplitterComponent() { TestHelper.BeginTest("RecordVideoDirectlyFromResizerWithSplitterComponent"); TestHelper.SetConfigurationDefaults(); TestHelper.CleanDirectory("/home/pi/videos/tests"); using (var vidCaptureHandler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "raw")) using (var vidCaptureHandler2 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "raw")) using (var vidCaptureHandler3 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "raw")) using (var vidCaptureHandler4 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "raw")) using (var preview = new MMALVideoRenderer()) using (var splitter = new MMALSplitterComponent()) using (var resizer = new MMALResizerComponent()) using (var resizer2 = new MMALResizerComponent()) using (var resizer3 = new MMALResizerComponent()) using (var resizer4 = new MMALResizerComponent()) { Fixture.MMALCamera.ConfigureCameraSettings(); var splitterPortConfig = new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420, 0, 0, null); // Create our component pipeline. splitter.ConfigureInputPort(new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420, 0), Fixture.MMALCamera.Camera.VideoPort, null); splitter.ConfigureOutputPort(0, splitterPortConfig, null); splitter.ConfigureOutputPort(1, splitterPortConfig, null); splitter.ConfigureOutputPort(2, splitterPortConfig, null); splitter.ConfigureOutputPort(3, splitterPortConfig, null); var portConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 1024, 768, 0, 0, 0, false, DateTime.Now.AddSeconds(20)); var portConfig2 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 800, 600, 0, 0, 0, false, DateTime.Now.AddSeconds(20)); var portConfig3 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 640, 480, 0, 0, 0, false, DateTime.Now.AddSeconds(15)); var portConfig4 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, 320, 240, 0, 0, 0, false, DateTime.Now.AddSeconds(20)); resizer.ConfigureOutputPort <VideoPort>(0, portConfig, vidCaptureHandler); resizer2.ConfigureOutputPort <VideoPort>(0, portConfig2, vidCaptureHandler2); resizer3.ConfigureOutputPort <VideoPort>(0, portConfig3, vidCaptureHandler3); resizer4.ConfigureOutputPort <VideoPort>(0, portConfig4, vidCaptureHandler4); // Create our component pipeline. Fixture.MMALCamera.Camera.VideoPort .ConnectTo(splitter); splitter.Outputs[0].ConnectTo(resizer); splitter.Outputs[1].ConnectTo(resizer2); splitter.Outputs[2].ConnectTo(resizer3); splitter.Outputs[3].ConnectTo(resizer4); Fixture.MMALCamera.Camera.PreviewPort .ConnectTo(preview); // Camera warm up time await Task.Delay(2000); // Record video for 20 seconds await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.VideoPort); Fixture.CheckAndAssertFilepath(vidCaptureHandler.GetFilepath()); Fixture.CheckAndAssertFilepath(vidCaptureHandler2.GetFilepath()); Fixture.CheckAndAssertFilepath(vidCaptureHandler3.GetFilepath()); Fixture.CheckAndAssertFilepath(vidCaptureHandler4.GetFilepath()); } }