Ejemplo n.º 1
0
        public async Task VideoSplitterComponent()
        {
            TestHelper.BeginTest("VideoSplitterComponent");
            TestHelper.SetConfigurationDefaults();
            TestHelper.CleanDirectory("/home/pi/videos/tests");

            using (var handler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264"))
                using (var handler2 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264"))
                    using (var handler3 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264"))
                        using (var handler4 = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264"))
                            using (var splitter = new MMALSplitterComponent(null))
                                using (var vidEncoder = new MMALVideoEncoder(handler))
                                    using (var vidEncoder2 = new MMALVideoEncoder(handler2))
                                        using (var vidEncoder3 = new MMALVideoEncoder(handler3))
                                            using (var vidEncoder4 = new MMALVideoEncoder(handler4))
                                                using (var renderer = new MMALNullSinkComponent())
                                                {
                                                    Fixture.MMALCamera.ConfigureCameraSettings();

                                                    var splitterPortConfig = new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420, 10, 0, 13000000, null);
                                                    var portConfig1        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 10, 10, 13000000, DateTime.Now.AddSeconds(20));
                                                    var portConfig2        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 10, 20, 13000000, DateTime.Now.AddSeconds(15));
                                                    var portConfig3        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 25, 30, 13000000, DateTime.Now.AddSeconds(10));
                                                    var portConfig4        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 25, 40, 13000000, DateTime.Now.AddSeconds(10));

                                                    // Create our component pipeline.
                                                    splitter.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, Fixture.MMALCamera.Camera.VideoPort);
                                                    splitter.ConfigureOutputPort(0, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(1, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(2, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(3, splitterPortConfig);

                                                    vidEncoder.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[0]);
                                                    vidEncoder.ConfigureOutputPort(0, portConfig1);

                                                    vidEncoder2.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[1]);
                                                    vidEncoder2.ConfigureOutputPort(0, portConfig2);
                                                    vidEncoder3.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[2]);
                                                    vidEncoder3.ConfigureOutputPort(0, portConfig3);

                                                    vidEncoder4.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[3]);
                                                    vidEncoder4.ConfigureOutputPort(0, portConfig4);

                                                    Fixture.MMALCamera.Camera.VideoPort.ConnectTo(splitter);

                                                    splitter.Outputs[0].ConnectTo(vidEncoder);
                                                    splitter.Outputs[1].ConnectTo(vidEncoder2);
                                                    splitter.Outputs[2].ConnectTo(vidEncoder3);
                                                    splitter.Outputs[3].ConnectTo(vidEncoder4);

                                                    Fixture.MMALCamera.Camera.PreviewPort.ConnectTo(renderer);

                                                    // Camera warm up time
                                                    await Task.Delay(2000);

                                                    await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.VideoPort);

                                                    Fixture.CheckAndAssertFilepath(handler.GetFilepath());
                                                    Fixture.CheckAndAssertFilepath(handler2.GetFilepath());
                                                    Fixture.CheckAndAssertFilepath(handler3.GetFilepath());
                                                    Fixture.CheckAndAssertFilepath(handler4.GetFilepath());
                                                }
        }
Ejemplo n.º 2
0
        public void ChangeColorSpace()
        {
            TestHelper.BeginTest("ChangeColorSpace");
            TestHelper.SetConfigurationDefaults();
            TestHelper.CleanDirectory("/home/pi/videos/tests");

            MMALCameraConfig.VideoColorSpace = MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601;

            using (var handler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "h264"))
                using (var handler2 = new VideoStreamCaptureHandler("/home/pi/video/tests", "h264"))
                    using (var handler3 = new VideoStreamCaptureHandler("/home/pi/video/tests", "h264"))
                        using (var handler4 = new VideoStreamCaptureHandler("/home/pi/video/tests", "h264"))
                            using (var splitter = new MMALSplitterComponent(null))
                                using (var vidEncoder = new MMALVideoEncoder(handler))
                                    using (var vidEncoder2 = new MMALVideoEncoder(handler2))
                                        using (var vidEncoder3 = new MMALVideoEncoder(handler3))
                                            using (var vidEncoder4 = new MMALVideoEncoder(handler4))
                                                using (var renderer = new MMALVideoRenderer())
                                                {
                                                    Fixture.MMALCamera.ConfigureCameraSettings();

                                                    var splitterPortConfig = new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420, 10, 0, 13000000, null);
                                                    var portConfig1        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 10, 10, 13000000, DateTime.Now.AddSeconds(20));
                                                    var portConfig2        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 10, 20, 13000000, DateTime.Now.AddSeconds(15));
                                                    var portConfig3        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 25, 30, 13000000, DateTime.Now.AddSeconds(10));
                                                    var portConfig4        = new MMALPortConfig(MMALEncoding.H264, MMALEncoding.I420, 25, 40, 13000000, DateTime.Now.AddSeconds(10));

                                                    // Create our component pipeline.
                                                    splitter.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, Fixture.MMALCamera.Camera.VideoPort);
                                                    splitter.ConfigureOutputPort(0, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(1, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(2, splitterPortConfig);
                                                    splitter.ConfigureOutputPort(3, splitterPortConfig);

                                                    vidEncoder.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[0]);
                                                    vidEncoder.ConfigureOutputPort(0, portConfig1);

                                                    vidEncoder2.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[1]);
                                                    vidEncoder2.ConfigureOutputPort(0, portConfig2);
                                                    vidEncoder3.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[2]);
                                                    vidEncoder3.ConfigureOutputPort(0, portConfig3);

                                                    vidEncoder4.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[3]);
                                                    vidEncoder4.ConfigureOutputPort(0, portConfig4);

                                                    Fixture.MMALCamera.Camera.VideoPort.ConnectTo(splitter);

                                                    splitter.Outputs[0].ConnectTo(vidEncoder);
                                                    splitter.Outputs[1].ConnectTo(vidEncoder2);
                                                    splitter.Outputs[2].ConnectTo(vidEncoder3);
                                                    splitter.Outputs[3].ConnectTo(vidEncoder4);

                                                    Fixture.MMALCamera.Camera.PreviewPort.ConnectTo(renderer);

                                                    // Assert that all output ports have the same video color space.
                                                    Assert.True(Fixture.MMALCamera.Camera.VideoPort.VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);

                                                    Assert.True(splitter.Outputs[0].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(splitter.Outputs[1].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(splitter.Outputs[2].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(splitter.Outputs[3].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);

                                                    Assert.True(vidEncoder.Outputs[0].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(vidEncoder2.Outputs[0].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(vidEncoder3.Outputs[0].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                    Assert.True(vidEncoder4.Outputs[0].VideoColorSpace.EncodingVal == MMALEncoding.MMAL_COLOR_SPACE_ITUR_BT601.EncodingVal);
                                                }
        }
Ejemplo n.º 3
0
        public async Task Start(CancellationToken ct)
        {
            LogUtil.Write("Starting Camera...");
            MMALCameraConfig.VideoStabilisation = false;

            var sensorMode = MMALSensorMode.Mode0;

            switch (camMode)
            {
            case 1:
                sensorMode = MMALSensorMode.Mode1;
                break;

            case 2:
                sensorMode = MMALSensorMode.Mode2;
                break;

            case 3:
                sensorMode = MMALSensorMode.Mode3;
                break;

            case 4:
                sensorMode = MMALSensorMode.Mode4;
                break;

            case 5:
                sensorMode = MMALSensorMode.Mode5;
                break;

            case 6:
                sensorMode = MMALSensorMode.Mode6;
                break;

            case 7:
                sensorMode = MMALSensorMode.Mode7;
                break;
            }
            MMALCameraConfig.SensorMode      = sensorMode;
            MMALCameraConfig.ExposureMode    = MMAL_PARAM_EXPOSUREMODE_T.MMAL_PARAM_EXPOSUREMODE_BACKLIGHT;
            MMALCameraConfig.VideoResolution = new Resolution(capWidth, capHeight);
            MMALCameraConfig.VideoFramerate  = new MMAL_RATIONAL_T(60, 1);

            using var vidCaptureHandler = new EmguInMemoryCaptureHandler();
            using var splitter          = new MMALSplitterComponent();
            using var renderer          = new MMALNullSinkComponent();
            cam.ConfigureCameraSettings();
            LogUtil.Write("Cam mode is " + MMALCameraConfig.SensorMode);
            // Register to the event.
            vidCaptureHandler.MyEmguEvent += OnEmguEventCallback;

            // We are instructing the splitter to do a format conversion to BGR24.
            var splitterPortConfig = new MMALPortConfig(MMALEncoding.BGR24, MMALEncoding.BGR24, capWidth, capHeight, null);

            // By default in MMALSharp, the Video port outputs using proprietary communication (Opaque) with a YUV420 pixel format.
            // Changes to this are done via MMALCameraConfig.VideoEncoding and MMALCameraConfig.VideoSub format.
            splitter.ConfigureInputPort(new MMALPortConfig(MMALEncoding.OPAQUE, MMALEncoding.I420, capWidth, capHeight, null), cam.Camera.VideoPort, null);

            // We then use the splitter config object we constructed earlier. We then tell this output port to use our capture handler to record data.
            splitter.ConfigureOutputPort <SplitterVideoPort>(0, splitterPortConfig, vidCaptureHandler);

            cam.Camera.PreviewPort.ConnectTo(renderer);
            cam.Camera.VideoPort.ConnectTo(splitter);

            // Camera warm up time
            LogUtil.Write("Camera is warming up...");
            await Task.Delay(2000).ConfigureAwait(false);

            LogUtil.WriteInc("Camera initialized.");
            await cam.ProcessAsync(cam.Camera.VideoPort, ct).ConfigureAwait(false);

            LogUtil.WriteDec("Camera closed.");
        }
Ejemplo n.º 4
0
        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());
                                                }
        }
Ejemplo n.º 5
0
        public async Task UserProvidedPortName()
        {
            TestHelper.BeginTest("UserProvidedPortName");
            TestHelper.SetConfigurationDefaults();
            TestHelper.CleanDirectory("/home/pi/images/tests");

            using (var imgCaptureHandler = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                using (var imgCaptureHandler2 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                    using (var imgCaptureHandler3 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                        using (var imgCaptureHandler4 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                            using (var imgEncoder = new MMALImageEncoder())
                                using (var imgEncoder2 = new MMALImageEncoder())
                                    using (var imgEncoder3 = new MMALImageEncoder())
                                        using (var imgEncoder4 = new MMALImageEncoder())
                                            using (var splitter = new MMALSplitterComponent())
                                                using (var isp1 = new MMALIspComponent())
                                                    using (var isp2 = new MMALIspComponent())
                                                        using (var isp3 = new MMALIspComponent())
                                                            using (var isp4 = new MMALIspComponent())
                                                                using (var nullSink = new MMALNullSinkComponent())
                                                                {
                                                                    Fixture.MMALCamera.ConfigureCameraSettings();

                                                                    var portConfig  = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90, userPortName: "Image encoder 1");
                                                                    var portConfig2 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90, userPortName: "Image encoder 2");
                                                                    var portConfig3 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90, userPortName: "Image encoder 3");
                                                                    var portConfig4 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90, userPortName: "Image encoder 4");

                                                                    var splitterConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420);

                                                                    var resizeConfig  = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 1280, height: 720);
                                                                    var resizeConfig2 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 1024, height: 720);
                                                                    var resizeConfig3 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 640, height: 480);
                                                                    var resizeConfig4 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 620, height: 310);

                                                                    // Create our component pipeline.
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(0, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(1, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(2, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(3, splitterConfig, null);

                                                                    isp1.ConfigureOutputPort(resizeConfig, null);
                                                                    isp2.ConfigureOutputPort(resizeConfig2, null);
                                                                    isp3.ConfigureOutputPort(resizeConfig3, null);
                                                                    isp4.ConfigureOutputPort(resizeConfig4, null);

                                                                    imgEncoder.ConfigureOutputPort(portConfig, imgCaptureHandler);
                                                                    imgEncoder2.ConfigureOutputPort(portConfig2, imgCaptureHandler2);
                                                                    imgEncoder3.ConfigureOutputPort(portConfig3, imgCaptureHandler3);
                                                                    imgEncoder4.ConfigureOutputPort(portConfig4, imgCaptureHandler4);

                                                                    Fixture.MMALCamera.Camera.StillPort.ConnectTo(splitter);
                                                                    Fixture.MMALCamera.Camera.PreviewPort.ConnectTo(nullSink);

                                                                    splitter.Outputs[0].ConnectTo(isp1);
                                                                    splitter.Outputs[1].ConnectTo(isp2);
                                                                    splitter.Outputs[2].ConnectTo(isp3);
                                                                    splitter.Outputs[3].ConnectTo(isp4);

                                                                    isp1.Outputs[0].ConnectTo(imgEncoder);
                                                                    isp2.Outputs[0].ConnectTo(imgEncoder2);
                                                                    isp3.Outputs[0].ConnectTo(imgEncoder3);
                                                                    isp4.Outputs[0].ConnectTo(imgEncoder4);

                                                                    // Camera warm up time
                                                                    await Task.Delay(2000);

                                                                    await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.StillPort);

                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler2.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler3.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler4.GetFilepath());
                                                                }
        }
Ejemplo n.º 6
0
        public async Task TakeMultiplePicturesFromSplitterComponent()
        {
            // This test relies on an ISP component being connected between a splitter component output port
            // and an image encoder input port. If the ISP component is not used as a go-between, the splitter
            // component appears to only accept 1 of its output ports being connected to an image encoder. I believe
            // this may be a firmware restriction.
            TestHelper.BeginTest("TakeMultiplePicturesFromSplitterComponent");
            TestHelper.SetConfigurationDefaults();
            TestHelper.CleanDirectory("/home/pi/images/tests");

            using (var imgCaptureHandler = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                using (var imgCaptureHandler2 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                    using (var imgCaptureHandler3 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                        using (var imgCaptureHandler4 = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                            using (var imgEncoder = new MMALImageEncoder())
                                using (var imgEncoder2 = new MMALImageEncoder())
                                    using (var imgEncoder3 = new MMALImageEncoder())
                                        using (var imgEncoder4 = new MMALImageEncoder())
                                            using (var splitter = new MMALSplitterComponent())
                                                using (var isp1 = new MMALIspComponent())
                                                    using (var isp2 = new MMALIspComponent())
                                                        using (var isp3 = new MMALIspComponent())
                                                            using (var isp4 = new MMALIspComponent())
                                                                using (var nullSink = new MMALNullSinkComponent())
                                                                {
                                                                    Fixture.MMALCamera.ConfigureCameraSettings();

                                                                    var portConfig  = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90);
                                                                    var portConfig2 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90);
                                                                    var portConfig3 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90);
                                                                    var portConfig4 = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.I420, quality: 90);

                                                                    var splitterConfig = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420);

                                                                    var resizeConfig  = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 1280, height: 720);
                                                                    var resizeConfig2 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 1024, height: 720);
                                                                    var resizeConfig3 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 640, height: 480);
                                                                    var resizeConfig4 = new MMALPortConfig(MMALEncoding.I420, MMALEncoding.I420, width: 620, height: 310);

                                                                    // Create our component pipeline.
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(0, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(1, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(2, splitterConfig, null);
                                                                    splitter.ConfigureOutputPort <SplitterStillPort>(3, splitterConfig, null);

                                                                    isp1.ConfigureOutputPort(resizeConfig, null);
                                                                    isp2.ConfigureOutputPort(resizeConfig2, null);
                                                                    isp3.ConfigureOutputPort(resizeConfig3, null);
                                                                    isp4.ConfigureOutputPort(resizeConfig4, null);

                                                                    imgEncoder.ConfigureOutputPort(portConfig, imgCaptureHandler);
                                                                    imgEncoder2.ConfigureOutputPort(portConfig2, imgCaptureHandler2);
                                                                    imgEncoder3.ConfigureOutputPort(portConfig3, imgCaptureHandler3);
                                                                    imgEncoder4.ConfigureOutputPort(portConfig4, imgCaptureHandler4);

                                                                    Fixture.MMALCamera.Camera.StillPort.ConnectTo(splitter);
                                                                    Fixture.MMALCamera.Camera.PreviewPort.ConnectTo(nullSink);

                                                                    splitter.Outputs[0].ConnectTo(isp1);
                                                                    splitter.Outputs[1].ConnectTo(isp2);
                                                                    splitter.Outputs[2].ConnectTo(isp3);
                                                                    splitter.Outputs[3].ConnectTo(isp4);

                                                                    isp1.Outputs[0].ConnectTo(imgEncoder);
                                                                    isp2.Outputs[0].ConnectTo(imgEncoder2);
                                                                    isp3.Outputs[0].ConnectTo(imgEncoder3);
                                                                    isp4.Outputs[0].ConnectTo(imgEncoder4);

                                                                    // Camera warm up time
                                                                    await Task.Delay(2000);

                                                                    await Fixture.MMALCamera.ProcessAsync(Fixture.MMALCamera.Camera.StillPort);

                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler2.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler3.GetFilepath());
                                                                    Fixture.CheckAndAssertFilepath(imgCaptureHandler4.GetFilepath());
                                                                }
        }
Ejemplo n.º 7
0
        public void VideoSplitterComponent()
        {
            TestHelper.BeginTest("VideoSplitterComponent");
            TestHelper.SetConfigurationDefaults();

            AsyncContext.Run(async() =>
            {
                TestHelper.CleanDirectory("/home/pi/videos/tests");

                using (var handler = new VideoStreamCaptureHandler("/home/pi/videos/tests", "avi"))
                    using (var handler2 = new VideoStreamCaptureHandler("/home/pi/video/tests", "avi"))
                        using (var handler3 = new VideoStreamCaptureHandler("/home/pi/video/tests", "avi"))
                            using (var handler4 = new VideoStreamCaptureHandler("/home/pi/video/tests", "avi"))
                                using (var splitter = new MMALSplitterComponent(null))
                                    using (var vidEncoder = new MMALVideoEncoder(handler, DateTime.Now.AddSeconds(10)))
                                        using (var vidEncoder2 = new MMALVideoEncoder(handler2, DateTime.Now.AddSeconds(15)))
                                            using (var vidEncoder3 = new MMALVideoEncoder(handler3, DateTime.Now.AddSeconds(10)))
                                                using (var vidEncoder4 = new MMALVideoEncoder(handler4, DateTime.Now.AddSeconds(10)))
                                                    using (var renderer = new MMALVideoRenderer())
                                                    {
                                                        _fixture.MMALCamera.ConfigureCameraSettings();

                                                        // Create our component pipeline.
                                                        splitter.ConfigureInputPort(MMALEncoding.I420, MMALEncoding.I420, _fixture.MMALCamera.Camera.VideoPort);
                                                        splitter.ConfigureOutputPort(0, MMALEncoding.OPAQUE, MMALEncoding.I420, 0);
                                                        splitter.ConfigureOutputPort(1, MMALEncoding.OPAQUE, MMALEncoding.I420, 0);
                                                        splitter.ConfigureOutputPort(2, MMALEncoding.OPAQUE, MMALEncoding.I420, 0);
                                                        splitter.ConfigureOutputPort(3, MMALEncoding.OPAQUE, MMALEncoding.I420, 0);

                                                        vidEncoder.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[0]);
                                                        vidEncoder.ConfigureOutputPort(0, MMALEncoding.H264, MMALEncoding.I420, 10, 25000000);

                                                        vidEncoder2.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[1]);
                                                        vidEncoder2.ConfigureOutputPort(0, MMALEncoding.H264, MMALEncoding.I420, 20, 25000000);
                                                        vidEncoder3.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[2]);
                                                        vidEncoder3.ConfigureOutputPort(0, MMALEncoding.H264, MMALEncoding.I420, 30, 25000000);

                                                        vidEncoder4.ConfigureInputPort(MMALEncoding.OPAQUE, MMALEncoding.I420, splitter.Outputs[3]);
                                                        vidEncoder4.ConfigureOutputPort(0, MMALEncoding.H264, MMALEncoding.I420, 40, 25000000);

                                                        _fixture.MMALCamera.Camera.VideoPort.ConnectTo(splitter);

                                                        splitter.Outputs[0].ConnectTo(vidEncoder);
                                                        splitter.Outputs[1].ConnectTo(vidEncoder2);
                                                        splitter.Outputs[2].ConnectTo(vidEncoder3);
                                                        splitter.Outputs[3].ConnectTo(vidEncoder4);

                                                        _fixture.MMALCamera.Camera.PreviewPort.ConnectTo(renderer);

                                                        // Camera warm up time
                                                        await Task.Delay(2000);

                                                        await _fixture.MMALCamera.ProcessAsync(_fixture.MMALCamera.Camera.VideoPort);

                                                        _fixture.CheckAndAssertFilepath(handler.GetFilepath());
                                                        _fixture.CheckAndAssertFilepath(handler2.GetFilepath());
                                                        _fixture.CheckAndAssertFilepath(handler3.GetFilepath());
                                                        _fixture.CheckAndAssertFilepath(handler4.GetFilepath());
                                                    }
            });
        }