public unsafe MmalCameraComponent() : base(MmalParameters.MmalComponentDefaultCamera)
        {
            Outputs.Add(new OutputPort((IntPtr)(&(*Ptr->Output[0])), this, Guid.NewGuid()));
            Outputs.Add(new VideoPort((IntPtr)(&(*Ptr->Output[1])), this, Guid.NewGuid()));
            Outputs.Add(new StillPort((IntPtr)(&(*Ptr->Output[2])), this, Guid.NewGuid()));

            CameraInfo = new MmalCameraInfoComponent();

            PreviewPort = Outputs[MmalCameraPreviewPort];
            VideoPort   = Outputs[MmalCameraVideoPort];
            StillPort   = Outputs[MmalCameraStillPort];

            PreviewPort.SetStereoMode(CameraConfig.StereoMode);
            VideoPort.SetStereoMode(CameraConfig.StereoMode);
            StillPort.SetStereoMode(CameraConfig.StereoMode);

            Control.SetParameter(MmalParametersCamera.MmalParameterCameraNum, 0);
        }
        void InitialiseStill()
        {
            var currentWidth  = CameraConfig.Resolution.Width;
            var currentHeight = CameraConfig.Resolution.Height;

            if (currentWidth == 0 || currentWidth > CameraInfo.MaxWidth)
            {
                currentWidth = CameraInfo.MaxWidth;
            }

            if (currentHeight == 0 || currentHeight > CameraInfo.MaxHeight)
            {
                currentHeight = CameraInfo.MaxHeight;
            }

            CameraConfig.Resolution = new Resolution(currentWidth, currentHeight);

            var resolution = CameraConfig.Resolution.Pad();

            var portConfig = new MmalPortConfig(
                CameraConfig.Encoding,
                CameraConfig.EncodingSubFormat,
                width: resolution.Width,
                height: resolution.Height,
                framerate: CameraConfig.Framerate,
                bufferNum: Math.Max(StillPort.BufferNumRecommended, 3),
                bufferSize: Math.Max(StillPort.BufferSizeRecommended, StillPort.BufferSizeMin),
                crop: new Rectangle(0, 0, currentWidth, currentHeight));

            MmalLog.Logger.LogDebug("Commit still");
            StillPort.Configure(portConfig, null, null);

            // Use Raspistill values.
            if (CameraConfig.ShutterSpeed > 6000000)
            {
                StillPort.SetFramerateRange(new MmalRational(5, 1000), new MmalRational(166, 1000));
            }
            else if (CameraConfig.ShutterSpeed > 1000000)
            {
                StillPort.SetFramerateRange(new MmalRational(167, 1000), new MmalRational(999, 1000));
            }
        }