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; private SWebcamConfig _Config;
Lib.Draw.STexture _WebcamTexture = new Lib.Draw.STexture(-1); Lib.Draw.STexture _WebcamTexture = new Lib.Draw.STexture(-1);
private int _DeviceNr;
private int _CapabilityNr;
public CScreenOptionsVideo() public CScreenOptionsVideo()
{ {
@@ -54,23 +56,6 @@ namespace Vocaluxe.Screens
SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues<EOffOn>((int)CConfig.VideoPreview); SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues<EOffOn>((int)CConfig.VideoPreview);
SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues<EOffOn>((int)CConfig.VideosInSongs); SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues<EOffOn>((int)CConfig.VideosInSongs);
SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].SetValues<EOffOn>((int)CConfig.VideosToBackground); 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) public override bool HandleInput(KeyEvent KeyEvent)
@@ -165,16 +150,47 @@ namespace Vocaluxe.Screens
public override void OnClose() public override void OnClose()
{ {
CWebcam.Close();
base.OnClose(); base.OnClose();
CWebcam.Close();
} }
public override void OnShow() public override void OnShow()
{ {
CWebcam.Close();
CWebcam.Select(_Config);
CWebcam.Start();
base.OnShow(); 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() private void SaveConfig()
@@ -192,37 +208,70 @@ namespace Vocaluxe.Screens
private void OnDeviceEvent() private void OnDeviceEvent()
{ {
int deviceNr = SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection; if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection != _DeviceNr)
SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear();
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()); 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() private void OnCapabilitiesEvent()
{ {
SWebcamDevice[] d = CWebcam.GetDevices(); if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection != _CapabilityNr)
_Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString; {
_Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width; _CapabilityNr = SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection;
_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(); SWebcamDevice[] d = CWebcam.GetDevices();
CWebcam.Select(_Config); _Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString;
CWebcam.Start(); _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;
}
}
}
}
} }
} }
} }