public bool Start(int DeviceNo) { try { FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); MonikerString = videoDevices[DeviceNo].MonikerString; _videoSource = new VideoCaptureDevice(MonikerString); VideoSource = new MyAsyncVideoSource(_videoSource, true); //SetMaxResolution(); VideoSource.NewFrame += NewFrame; VideoSource.Start(); FrameNumber = 0; // measure range int min, max, step, def; CameraControlFlags ccflags; VideoProcAmpFlags vpflags; _videoSource.GetCameraPropertyRange(CameraControlProperty.Exposure, out min, out max, out step, out def, out ccflags); ExposureRange = String.Format("{0} to {1})", min, max, step); _videoSource.GetVideoPropertyRange(VideoProcAmpProperty.Brightness, out min, out max, out step, out def, out vpflags); BrightnessRange = String.Format("{0} to {1})", min, max, step); timer.Elapsed += delegate { FPSReceived = VideoSource.FramesReceived; FPSProcessed = VideoSource.FramesProcessed; }; timer.Start(); return(VideoSource.IsRunning); } catch { return(false); } }
private static CameraProperty ReadProperty(VideoCaptureDevice device, VideoProcAmpProperty property) { CameraProperty p = new CameraProperty(); p.Identifier = property.ToString(); p.Specific = "VideoProcAmp"; p.ReadOnly = false; p.Type = CameraPropertyType.Integer; p.Representation = CameraPropertyRepresentation.LinearSlider; p.CanBeAutomatic = true; try { int min; int max; int step; int defaultValue; VideoProcAmpFlags flags; bool success = device.GetVideoPropertyRange(property, out min, out max, out step, out defaultValue, out flags); if (!success) { p.Supported = false; } else { p.Supported = true; p.Minimum = min.ToString(CultureInfo.InvariantCulture); p.Maximum = max.ToString(CultureInfo.InvariantCulture); int currentValue; success = device.GetVideoProperty(property, out currentValue, out flags); if (!success) { p.Supported = false; } else { p.CurrentValue = currentValue.ToString(CultureInfo.InvariantCulture); p.Automatic = flags == VideoProcAmpFlags.Auto; } } } catch { p.Supported = false; } return(p); }