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 InitialisePreview()
        {
            var portConfig = new MmalPortConfig(
                CameraConfig.Encoding,
                CameraConfig.EncodingSubFormat,
                width: CameraConfig.Resolution.Width,
                height: CameraConfig.Resolution.Height,
                framerate: CameraConfig.Framerate);

            MmalLog.Logger.LogDebug("Commit preview");

            PreviewPort.Configure(portConfig, null, null);

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