private void PopulateCameraControl() { int top = lblAuto.Bottom; if (cameraProperties.ContainsKey("exposure_logitech")) { AddCameraProperty("exposure_logitech", CameraLang.FormConfiguration_Properties_Exposure, VendorHelper.GetValueMapper(identifier, "exposure_logitech"), top); } else if (cameraProperties.ContainsKey("exposure")) { AddCameraProperty("exposure", CameraLang.FormConfiguration_Properties_Exposure, VendorHelper.GetValueMapper(identifier, "exposure"), top); } AddCameraProperty("gain", CameraLang.FormConfiguration_Properties_Gain, VendorHelper.GetValueMapper(identifier, "gain"), top + 30); AddCameraProperty("focus", CameraLang.FormConfiguration_Properties_Focus, VendorHelper.GetValueMapper(identifier, "focus"), top + 60); }
public override List <CameraSummary> DiscoverCameras(IEnumerable <CameraBlurb> blurbs) { // DirectShow has active discovery. We just ask for the list of cameras connected to the PC. List <CameraSummary> summaries = new List <CameraSummary>(); List <CameraSummary> found = new List <CameraSummary>(); FilterInfoCollection cameras = new FilterInfoCollection(FilterCategory.VideoInputDevice); foreach (FilterInfo camera in cameras) { if (bypass.Contains(camera.Name)) { continue; } // For now consider that the moniker string is like a serial number. // Cameras that don't have a serial number will appear to be new when changing USB port. string identifier = camera.MonikerString; bool cached = cache.ContainsKey(identifier); string alias = camera.Name; Bitmap icon = null; SpecificInfo specific = null; Rectangle displayRectangle = Rectangle.Empty; CaptureAspectRatio aspectRatio = CaptureAspectRatio.Auto; if (blurbs != null) { foreach (CameraBlurb blurb in blurbs) { if (blurb.CameraType != this.CameraType || blurb.Identifier != identifier) { continue; } alias = blurb.Alias; icon = blurb.Icon ?? SelectDefaultIcon(identifier); displayRectangle = blurb.DisplayRectangle; if (!string.IsNullOrEmpty(blurb.AspectRatio)) { aspectRatio = (CaptureAspectRatio)Enum.Parse(typeof(CaptureAspectRatio), blurb.AspectRatio); } specific = SpecificInfoDeserialize(blurb.Specific); VendorHelper.IdentifyModel(identifier); break; } } if (icon == null) { icon = SelectDefaultIcon(identifier); } CameraSummary summary = new CameraSummary(alias, camera.Name, identifier, icon, displayRectangle, aspectRatio, specific, this); summaries.Add(summary); if (cached) { found.Add(cache[identifier]); } if (!cached) { cache.Add(identifier, summary); found.Add(summary); log.DebugFormat("DirectShow device enumeration: {0} (moniker:{1}).", summary.Alias, identifier); } } // TODO: do we need to do all this. Just replace the cache with the current list. List <CameraSummary> lost = new List <CameraSummary>(); foreach (CameraSummary summary in cache.Values) { if (!found.Contains(summary)) { lost.Add(summary); } } foreach (CameraSummary summary in lost) { cache.Remove(summary.Identifier); } return(summaries); }
private void PopulateCameraControl() { int top = lblAuto.Bottom; bool added = false; if (cameraProperties.ContainsKey("exposure_logitech")) { added = AddCameraProperty("exposure_logitech", CameraLang.FormConfiguration_Properties_Exposure, VendorHelper.GetValueMapper(identifier, "exposure_logitech"), top); } else if (cameraProperties.ContainsKey("exposure")) { added = AddCameraProperty("exposure", CameraLang.FormConfiguration_Properties_Exposure, VendorHelper.GetValueMapper(identifier, "exposure"), top); } top += (added ? 30 : 0); added = AddCameraProperty("gain", CameraLang.FormConfiguration_Properties_Gain, null, top); top += (added ? 30 : 0); AddCameraProperty("focus", CameraLang.FormConfiguration_Properties_Focus, null, top); }