public FormConfiguration(CameraSummary summary) { this.summary = summary; InitializeComponent(); tbAlias.AutoSize = false; tbAlias.Height = 20; tbAlias.Text = summary.Alias; lblSystemName.Text = summary.Name; btnIcon.BackgroundImage = summary.Icon; SpecificInfo specific = summary.Specific as SpecificInfo; if (specific == null || specific.Handle == null || !specific.Handle.IsValid) { return; } deviceHandle = specific.Handle; cameraProperties = CameraPropertyManager.Read(specific.Handle, summary.Identifier); if (cameraProperties.Count != specific.CameraProperties.Count) { specificChanged = true; } Populate(); }
private void Open() { if (grabbing) { Stop(); } try { deviceHandle = Pylon.CreateDeviceByIndex(deviceIndex); imageProvider.Open(deviceHandle); } catch (Exception e) { log.Error("Could not open Basler device."); LogError(e, imageProvider.GetLastErrorMessage()); return; } if (!deviceHandle.IsValid) { return; } SpecificInfo specific = summary.Specific as SpecificInfo; if (specific == null) { return; } // Store the handle into the specific info so that we can retrieve device informations from the configuration dialog. specific.Handle = deviceHandle; GenApiEnum currentStreamFormat = PylonHelper.ReadEnumCurrentValue(deviceHandle, "PixelFormat"); if (!string.IsNullOrEmpty(specific.StreamFormat) && specific.StreamFormat != currentStreamFormat.Symbol) { PylonHelper.WriteEnum(deviceHandle, "PixelFormat", specific.StreamFormat); } // The bayer conversion mode will be set during Prepare(). if (firstOpen) { // Restore camera parameters from the XML blurb. // Regular properties, including image size. // First we read the current properties from the API to get fully formed properties. // We merge the values saved in the XML into the properties. // (The restoration from the XML doesn't create fully formed properties, it just contains the values). // Then commit the properties to the camera. Dictionary <string, CameraProperty> cameraProperties = CameraPropertyManager.Read(deviceHandle, summary.Identifier); CameraPropertyManager.MergeProperties(cameraProperties, specific.CameraProperties); specific.CameraProperties = cameraProperties; CameraPropertyManager.WriteCriticalProperties(deviceHandle, specific.CameraProperties); } else { CameraPropertyManager.WriteCriticalProperties(deviceHandle, specific.CameraProperties); } }
private void cpvCameraControl_ValueChanged(object sender, EventArgs e) { AbstractCameraPropertyView control = sender as AbstractCameraPropertyView; if (control == null) { return; } string key = control.Tag as string; if (string.IsNullOrEmpty(key) || !cameraProperties.ContainsKey(key)) { return; } CameraPropertyManager.Write(deviceHandle, cameraProperties[key]); UpdateResultingFramerate(); specificChanged = true; }
private void BtnReconnect_Click(object sender, EventArgs e) { if (SelectedStreamFormat == null) { // This happens when we load the config window and the camera isn't connected. return; } SpecificInfo info = summary.Specific as SpecificInfo; if (info == null) { return; } info.StreamFormat = this.SelectedStreamFormat.Symbol; info.Bayer8Conversion = this.Bayer8Conversion; info.CameraProperties = this.CameraProperties; summary.UpdateDisplayRectangle(Rectangle.Empty); CameraTypeManager.UpdatedCameraSummary(summary); disconnect(); connect(); SpecificInfo specific = summary.Specific as SpecificInfo; if (specific == null || specific.Handle == null || !specific.Handle.IsValid) { return; } deviceHandle = specific.Handle; cameraProperties = CameraPropertyManager.Read(specific.Handle, summary.Identifier); RemoveCameraControls(); PopulateCameraControls(); UpdateResultingFramerate(); }
public FormConfiguration(CameraSummary summary, Action disconnect, Action connect) { this.summary = summary; this.disconnect = disconnect; this.connect = connect; InitializeComponent(); tbAlias.AutoSize = false; tbAlias.Height = 20; tbAlias.Text = summary.Alias; lblSystemName.Text = summary.Name; btnIcon.BackgroundImage = summary.Icon; btnReconnect.Text = CameraLang.FormConfiguration_Reconnect; SpecificInfo specific = summary.Specific as SpecificInfo; if (specific == null || specific.Handle == null || !specific.Handle.IsValid) { return; } deviceHandle = specific.Handle; cameraProperties = CameraPropertyManager.Read(specific.Handle, summary.Identifier); if (cameraProperties.Count != specific.CameraProperties.Count) { specificChanged = true; } bayer8Conversion = specific.Bayer8Conversion; Populate(); this.Text = CameraLang.FormConfiguration_Title; btnApply.Text = CameraLang.Generic_Apply; UpdateResultingFramerate(); }
private void Open() { // Unlike in the DirectShow module, we do not backup and restore camera configuration. // If the user configured the camera outside of Kinovea we respect the new settings. // Two reasons: // 1. In DirectShow we must do the backup/restore to work around drivers that inadvertently reset the camera properties. // 2. Industrial cameras have many properties that won't be configurable in Kinovea // so the user is more likely to configure the camera from the outside. if (grabbing) { Stop(); } try { deviceHandle = Pylon.CreateDeviceByIndex(deviceIndex); imageProvider.Open(deviceHandle); } catch (Exception e) { log.Error("Could not open Basler device."); LogError(e, imageProvider.GetLastErrorMessage()); return; } if (!deviceHandle.IsValid) { return; } SpecificInfo specific = summary.Specific as SpecificInfo; if (specific == null) { return; } // Store the handle into the specific info so that we can retrieve device informations from the configuration dialog. specific.Handle = deviceHandle; GenApiEnum currentStreamFormat = PylonHelper.ReadEnumCurrentValue(deviceHandle, "PixelFormat"); // Some properties can only be changed when the camera is opened but not streaming. // We store them in the summary when coming back from FormConfiguration, and we write them to the camera here. // Only do this if it's not the first time we open the camera, to respect any change that could have been done outside Kinovea. if (!firstOpen) { if (specific.StreamFormat != currentStreamFormat.Symbol) { PylonHelper.WriteEnum(deviceHandle, "PixelFormat", specific.StreamFormat); } if (specific.CameraProperties != null && specific.CameraProperties.ContainsKey("framerate")) { if (specific.CameraProperties.ContainsKey("enableFramerate") && specific.CameraProperties["enableFramerate"].Supported) { bool enabled = bool.Parse(specific.CameraProperties["enableFramerate"].CurrentValue); if (!enabled && !specific.CameraProperties["enableFramerate"].ReadOnly) { specific.CameraProperties["enableFramerate"].CurrentValue = "true"; CameraPropertyManager.Write(deviceHandle, specific.CameraProperties["enableFramerate"]); } } CameraPropertyManager.Write(deviceHandle, specific.CameraProperties["framerate"]); } if (specific.CameraProperties != null && specific.CameraProperties.ContainsKey("width") && specific.CameraProperties.ContainsKey("height")) { CameraPropertyManager.Write(deviceHandle, specific.CameraProperties["width"]); CameraPropertyManager.Write(deviceHandle, specific.CameraProperties["height"]); } } else { specific.StreamFormat = currentStreamFormat.Symbol; } }