public MMALImageDecoderConverter(TransformStreamCaptureHandler handler) : base(handler)
 {
 }
 public unsafe MMALImageFileEncoder(TransformStreamCaptureHandler handler)
     : base(handler)
 {
 }
Example #3
0
        public async Task EncodeDecodeFromFile()
        {
            TestHelper.BeginTest("Image - EncodeDecodeFromFile");
            TestHelper.SetConfigurationDefaults();
            TestHelper.CleanDirectory("/home/pi/images/tests");

            string imageFilepath   = string.Empty;
            string decodedFilepath = string.Empty;

            // First take a new JPEG picture using RGB24 encoding.
            using (var imgCaptureHandler = new ImageStreamCaptureHandler("/home/pi/images/tests", "jpg"))
                using (var preview = new MMALNullSinkComponent())
                    using (var imgEncoder = new MMALImageEncoder(imgCaptureHandler))
                    {
                        Fixture.MMALCamera.ConfigureCameraSettings();

                        var portConfig = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.RGB24, 90);

                        imgEncoder.ConfigureOutputPort(portConfig);

                        // Create our component pipeline.
                        Fixture.MMALCamera.Camera.StillPort
                        .ConnectTo(imgEncoder);
                        Fixture.MMALCamera.Camera.PreviewPort
                        .ConnectTo(preview);

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

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

                        Fixture.CheckAndAssertFilepath(imgCaptureHandler.GetFilepath());

                        imageFilepath = imgCaptureHandler.GetFilepath();
                    }

            // Next decode the JPEG to raw YUV420.
            using (var stream = File.OpenRead(imageFilepath))
                using (var imgCaptureHandler = new TransformStreamCaptureHandler(stream, "/home/pi/images/", "raw"))
                    using (var imgDecoder = new MMALImageFileDecoder(imgCaptureHandler))
                    {
                        var inputConfig  = new MMALPortConfig(MMALEncoding.JPEG, MMALEncoding.RGB24, 2560, 1920, 0, 0, 0, true, null);
                        var outputConfig = new MMALPortConfig(MMALEncoding.I420, null, 2560, 1920, 0, 0, 0, true, null);

                        // Create our component pipeline.
                        imgDecoder.ConfigureInputPort(inputConfig)
                        .ConfigureOutputPort(outputConfig);

                        await imgDecoder.Convert();

                        Fixture.CheckAndAssertFilepath(imgCaptureHandler.GetFilepath());

                        decodedFilepath = imgCaptureHandler.GetFilepath();
                    }

            // Finally re-encode to BMP using YUV420.
            using (var stream = File.OpenRead(decodedFilepath))
                using (var imgCaptureHandler = new TransformStreamCaptureHandler(stream, "/home/pi/images/", "bmp"))
                    using (var imgEncoder = new MMALImageFileEncoder(imgCaptureHandler))
                    {
                        var inputConfig  = new MMALPortConfig(MMALEncoding.I420, null, 2560, 1920, 0, 0, 0, true, null);
                        var outputConfig = new MMALPortConfig(MMALEncoding.BMP, MMALEncoding.I420, 2560, 1920, 0, 0, 0, true, null);

                        imgEncoder.ConfigureInputPort(inputConfig)
                        .ConfigureOutputPort(outputConfig);

                        await imgEncoder.Convert();

                        Fixture.CheckAndAssertFilepath(imgCaptureHandler.GetFilepath());
                    }
        }