Camera settings are now loaded from config in video options screen

This commit is contained in:
Stephan Sundermann committed 2012-07-07 18:17:41 +02:00
1 parent ddcf9665cf
commit bf3ae0f355
1 file changed
+94 -45
+94 -45
View File
@@ -28,6 +28,8 @@ namespace Vocaluxe.Screens
private SWebcamConfig _Config;
Lib.Draw.STexture _WebcamTexture = new Lib.Draw.STexture(-1);
private int _DeviceNr;
private int _CapabilityNr;
public CScreenOptionsVideo()
{
@@ -54,23 +56,6 @@ namespace Vocaluxe.Screens
SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues<EOffOn>((int)CConfig.VideoPreview);
SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues<EOffOn>((int)CConfig.VideosInSongs);
SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].SetValues<EOffOn>((int)CConfig.VideosToBackground);
SWebcamDevice[] dev = CWebcam.GetDevices();
foreach(SWebcamDevice d in dev)
{
SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].AddValue(d.Name);
}
int deviceNr = SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection;
for (int i = 0; i < dev[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities.Count; i++)
{
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(dev[deviceNr].Capabilities[i].Width.ToString() + " x " + dev[deviceNr].Capabilities[i].Height.ToString() + " @ " + dev[deviceNr].Capabilities[i].Framerate.ToString() + " FPS");
}
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection = 0;
_Config.MonikerString = dev[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = dev[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = dev[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = dev[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -165,16 +150,47 @@ namespace Vocaluxe.Screens
public override void OnClose()
{
CWebcam.Close();
base.OnClose();
CWebcam.Close();
}
public override void OnShow()
{
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
base.OnShow();
SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Clear();
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear();
_DeviceNr = -1;
_CapabilityNr = -1;
SWebcamDevice[] devices = CWebcam.GetDevices();
if (devices != null)
{
_DeviceNr = 0;
_CapabilityNr = 0;
GetFirstConfiguredWebcamDevice(ref _DeviceNr, ref _CapabilityNr);
foreach (SWebcamDevice d in devices)
{
SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].AddValue(d.Name);
}
SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection = _DeviceNr;
foreach (SCapabilities c in devices[_DeviceNr].Capabilities)
{
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(c.Width.ToString() + " x " + c.Height.ToString() + " @ " + c.Framerate.ToString() + " FPS ");
}
_Config.MonikerString = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
CWebcam.Close();
CWebcam.Select(CConfig.WebcamConfig);
CWebcam.Start();
}
SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Visible = (devices != null);
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Visible = (devices != null);
}
private void SaveConfig()
@@ -192,37 +208,70 @@ namespace Vocaluxe.Screens
private void OnDeviceEvent()
{
int deviceNr = SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection;
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear();
SWebcamDevice[] d = CWebcam.GetDevices();
for (int i = 0; i < d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities.Count; i++)
if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection != _DeviceNr)
{
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(d[deviceNr].Capabilities[i].Width.ToString() + " x " + d[deviceNr].Capabilities[i].Height.ToString() + " @ " + d[deviceNr].Capabilities[i].Framerate.ToString());
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear();
_DeviceNr = SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection;
_CapabilityNr = 0;
SWebcamDevice[] d = CWebcam.GetDevices();
for (int i = 0; i < d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities.Count; i++)
{
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(d[_DeviceNr].Capabilities[i].Width.ToString() + " x " + d[_DeviceNr].Capabilities[i].Height.ToString() + " @ " + d[_DeviceNr].Capabilities[i].Framerate.ToString() + "FPS");
}
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection = 0;
_Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
}
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection = 0;
_Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
}
private void OnCapabilitiesEvent()
{
SWebcamDevice[] d = CWebcam.GetDevices();
_Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection != _CapabilityNr)
{
_CapabilityNr = SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection;
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
SWebcamDevice[] d = CWebcam.GetDevices();
_Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
_Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width;
_Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height;
_Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate;
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
}
}
private void GetFirstConfiguredWebcamDevice(ref int Device, ref int Capabilities)
{
SWebcamDevice[] devices = CWebcam.GetDevices();
if (devices == null)
return;
for (int i = 0; i < devices.Length; i++)
{
if (devices[i].MonikerString == CConfig.WebcamConfig.MonikerString)
{
for (int j = 0; j < devices[i].Capabilities.Count; j++)
{
if (devices[i].Capabilities[j].Framerate == CConfig.WebcamConfig.Framerate && devices[i].Capabilities[j].Width == CConfig.WebcamConfig.Width && devices[i].Capabilities[j].Height == CConfig.WebcamConfig.Height)
{
Device = i;
Capabilities = j;
return;
}
}
}
}
}
}
}