public MMALImageDecoderConverter(TransformStreamCaptureHandler handler) : base(handler) { }
public unsafe MMALImageFileEncoder(TransformStreamCaptureHandler handler) : base(handler) { }
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()); } }