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)); } }