[chronojump] DB 1.61. webcam with resolution and framerate
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] DB 1.61. webcam with resolution and framerate
- Date: Fri, 5 Apr 2019 13:16:37 +0000 (UTC)
commit 2400c6191125c040e6a89f9ebfc0257668a7075b
Author: Xavier de Blas <xaviblas gmail com>
Date: Fri Apr 5 15:15:49 2019 +0200
DB 1.61. webcam with resolution and framerate
glade/preferences_win.glade | 88 +++++++++++++++++++++++++++++++++++++++++++++
src/gui/event.cs | 2 +-
src/gui/person.cs | 4 +--
src/gui/preferences.cs | 52 +++++++++++++++++++++++++--
src/gui/webcam.cs | 8 ++---
src/preferences.cs | 2 ++
src/sqlite/main.cs | 11 +++++-
src/sqlite/preferences.cs | 6 ++++
src/webcam.cs | 16 +++++----
src/webcamFfmpeg.cs | 15 ++++++--
10 files changed, 183 insertions(+), 21 deletions(-)
---
diff --git a/glade/preferences_win.glade b/glade/preferences_win.glade
index f1e0fc0d..1de8414a 100644
--- a/glade/preferences_win.glade
+++ b/glade/preferences_win.glade
@@ -3420,6 +3420,94 @@ Other</property>
<property name="position">3</property>
</packing>
</child>
+ <child>
+ <widget class="GtkHBox" id="hbox_camera_resolution_framerate">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkHBox" id="hbox25">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label62">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Resolution</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_combo_camera_resolution">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox31">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label76">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Framerate</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_combo_camera_framerate">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
diff --git a/src/gui/event.cs b/src/gui/event.cs
index db805318..39eae924 100644
--- a/src/gui/event.cs
+++ b/src/gui/event.cs
@@ -323,7 +323,7 @@ public class EditEventWindow
*/
//using ffmpeg
- Webcam webcam = new WebcamFfmpeg (Webcam.Action.PLAYFILE, UtilAll.GetOSEnum(), "");
+ Webcam webcam = new WebcamFfmpeg (Webcam.Action.PLAYFILE, UtilAll.GetOSEnum(), "",
"", "");
Webcam.Result result = webcam.PlayFile (videoFileName);
}
}
diff --git a/src/gui/person.cs b/src/gui/person.cs
index b5232c6a..2480492d 100644
--- a/src/gui/person.cs
+++ b/src/gui/person.cs
@@ -1079,7 +1079,7 @@ public class PersonAddModifyWindow
//webcam = new WebcamMplayer (videoDevice);
//Webcam.Result result = webcam.CapturePrepare (Webcam.CaptureTypes.PHOTO);
//constructor for playpreview
- webcam = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(), videoDevice);
+ webcam = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(), videoDevice, "",
"");
//Webcam.Result result = webcam.PlayPreviewNoBackground ();
Webcam.Result result = webcam.PlayPreview ();
@@ -1093,7 +1093,7 @@ public class PersonAddModifyWindow
void on_button_take_photo_do_clicked (object o, EventArgs args)
{
if(webcam == null)
- webcam = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(),
videoDevice);
+ webcam = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(),
videoDevice, "", "");
else if(webcam != null && webcam.Running)
{
webcam.ExitCamera();
diff --git a/src/gui/preferences.cs b/src/gui/preferences.cs
index a658edff..d34ea11a 100644
--- a/src/gui/preferences.cs
+++ b/src/gui/preferences.cs
@@ -145,6 +145,10 @@ public class PreferencesWindow
[Widget] Gtk.Label label_test_sound_result;
[Widget] Gtk.Box hbox_combo_camera;
[Widget] Gtk.ComboBox combo_camera;
+ [Widget] Gtk.Box hbox_combo_camera_resolution;
+ [Widget] Gtk.ComboBox combo_camera_resolution;
+ [Widget] Gtk.Box hbox_combo_camera_framerate;
+ [Widget] Gtk.ComboBox combo_camera_framerate;
[Widget] Gtk.Label label_no_cameras;
[Widget] Gtk.Label label_webcam_windows;
@@ -290,7 +294,9 @@ public class PreferencesWindow
PreferencesWindowBox.radio_sound_systemsounds.Active = true;
PreferencesWindowBox.label_test_sound_result.Text = "";
- PreferencesWindowBox.createComboCamera(UtilMultimedia.GetVideoDevices(),
preferences.videoDevice);
+ PreferencesWindowBox.createComboCamera(UtilMultimedia.GetVideoDevices(),
preferences.videoDevice,
+ preferences.videoDeviceResolution, preferences.videoDeviceFramerate);
+
string [] decs = {"1", "2", "3"};
@@ -583,8 +589,10 @@ public class PreferencesWindow
* end of triggers stuff
*/
- private void createComboCamera(WebcamDeviceList wd_list, string current)
+ private void createComboCamera(WebcamDeviceList wd_list, string current, string resolution, string
framerate)
{
+ //videoDevice
+
combo_camera = ComboBox.NewText ();
if(wd_list.Count() == 0) {
@@ -604,6 +612,31 @@ public class PreferencesWindow
// current = 0;
combo_camera.Active = UtilGtk.ComboMakeActive(combo_camera, current);
+
+ //resolution
+
+ combo_camera_resolution = ComboBox.NewText ();
+ //string [] resolutions = { "320x240", "640x480", "1280x720" };
+ List<string> resolutions = new List<string>();
+ resolutions.Add("320x240");
+ resolutions.Add("640x480");
+ resolutions.Add("1280x720");
+ UtilGtk.ComboUpdate(combo_camera_resolution, resolutions);
+ hbox_combo_camera_resolution.PackStart(combo_camera_resolution, true, true, 0);
+ hbox_combo_camera_resolution.ShowAll();
+ combo_camera_resolution.Active = UtilGtk.ComboMakeActive(combo_camera_resolution, resolution);
+
+ //framerate
+
+ combo_camera_framerate = ComboBox.NewText ();
+ //string [] framerates = { "30", "60" };
+ List<string> framerates = new List<string>();
+ framerates.Add("30");
+ framerates.Add("60");
+ UtilGtk.ComboUpdate(combo_camera_framerate, framerates);
+ hbox_combo_camera_framerate.PackStart(combo_camera_framerate, true, true, 0);
+ hbox_combo_camera_framerate.ShowAll();
+ combo_camera_framerate.Active = UtilGtk.ComboMakeActive(combo_camera_framerate, framerate);
}
private void on_check_appearance_maximized_toggled (object obj, EventArgs args)
@@ -1459,11 +1492,24 @@ public class PreferencesWindow
preferences.gstreamer = Preferences.GstreamerTypes.SYSTEMSOUNDS;
}
+ //camera stuff
+
if( preferences.videoDevice != UtilGtk.ComboGetActive(combo_camera) ) {
SqlitePreferences.Update("videoDevice", UtilGtk.ComboGetActive(combo_camera), true);
preferences.videoDevice = UtilGtk.ComboGetActive(combo_camera);
}
-
+
+ if( preferences.videoDeviceResolution != UtilGtk.ComboGetActive(combo_camera_resolution) ) {
+ SqlitePreferences.Update("videoDeviceResolution",
UtilGtk.ComboGetActive(combo_camera_resolution), true);
+ preferences.videoDeviceResolution = UtilGtk.ComboGetActive(combo_camera_resolution);
+ }
+
+ if( preferences.videoDeviceFramerate != UtilGtk.ComboGetActive(combo_camera_framerate) ) {
+ SqlitePreferences.Update("videoDeviceFramerate",
UtilGtk.ComboGetActive(combo_camera_framerate), true);
+ preferences.videoDeviceFramerate = UtilGtk.ComboGetActive(combo_camera_framerate);
+ }
+
+ //end of camera stuff
if(PreferencesWindowBox.radio_export_latin.Active) {
SqlitePreferences.Update("CSVExportDecimalSeparator","COMMA", true);
diff --git a/src/gui/webcam.cs b/src/gui/webcam.cs
index ab4e964b..0cd7611c 100644
--- a/src/gui/webcam.cs
+++ b/src/gui/webcam.cs
@@ -104,13 +104,13 @@ public partial class ChronoJumpWindow
button_video_preview_visibile (guiContactsEncoder, false);
string errorMessage = "";
- if(ncams == 1 && webcamManage.RecordPrepare(preferences.videoDevice).success)
+ if(ncams == 1 && webcamManage.RecordPrepare(preferences.videoDevice,
preferences.videoDeviceResolution, preferences.videoDeviceFramerate).success)
{
webcamManage.RecordStart(1);
//label_video_feedback.Text = "Preparing camera";
label_video_feedback_text (guiContactsEncoder, "Preparing camera");
}
- else if(ncams == 2 && webcamManage.RecordPrepare(preferences.videoDevice,
"/dev/video1").success)
+ else if(ncams == 2 && webcamManage.RecordPrepare(preferences.videoDevice, "/dev/video1",
preferences.videoDeviceResolution, preferences.videoDeviceFramerate).success)
{
webcamManage.RecordStart(2);
//label_video_feedback.Text = "Preparing camera";
@@ -433,7 +433,7 @@ public partial class ChronoJumpWindow
private void playPreview ()
{
//constructor for playpreview
- webcamPlay = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(),
preferences.videoDevice);
+ webcamPlay = new WebcamFfmpeg (Webcam.Action.PLAYPREVIEW, UtilAll.GetOSEnum(),
preferences.videoDevice, preferences.videoDeviceResolution, preferences.videoDeviceFramerate);
Webcam.Result result = webcamPlay.PlayPreviewNoBackground ();
}
@@ -452,7 +452,7 @@ public partial class ChronoJumpWindow
private void playVideo (string fileName)
{
//constructor for playpreview
- webcamPlay = new WebcamFfmpeg (Webcam.Action.PLAYFILE, UtilAll.GetOSEnum(), "");
+ webcamPlay = new WebcamFfmpeg (Webcam.Action.PLAYFILE, UtilAll.GetOSEnum(), "", "", "");
Webcam.Result result = webcamPlay.PlayFile (fileName);
/*
diff --git a/src/preferences.cs b/src/preferences.cs
index c49a4b9b..ef23da76 100644
--- a/src/preferences.cs
+++ b/src/preferences.cs
@@ -75,6 +75,8 @@ public class Preferences
public Constants.Encoder1RMMethod encoder1RMMethod;
public string videoDevice;
+ public string videoDeviceResolution;
+ public string videoDeviceFramerate;
public string CSVExportDecimalSeparator;
public string language;
public string crashLogLanguage;
diff --git a/src/sqlite/main.cs b/src/sqlite/main.cs
index 6d38e6f7..872b8ac5 100644
--- a/src/sqlite/main.cs
+++ b/src/sqlite/main.cs
@@ -125,7 +125,7 @@ class Sqlite
/*
* Important, change this if there's any update to database
*/
- static string lastChronojumpDatabaseVersion = "1.60";
+ static string lastChronojumpDatabaseVersion = "1.61";
public Sqlite() {
}
@@ -2370,6 +2370,15 @@ class Sqlite
currentVersion = updateVersion("1.60");
}
+ if(currentVersion == "1.60")
+ {
+ LogB.SQL("Added to preferences: videoDeviceResolution, videoDeviceFramerate");
+
+ SqlitePreferences.Insert ("videoDeviceResolution", "");
+ SqlitePreferences.Insert ("videoDeviceFramerate", "");
+
+ currentVersion = updateVersion("1.61");
+ }
diff --git a/src/sqlite/preferences.cs b/src/sqlite/preferences.cs
index 15d6e8e3..5d530882 100644
--- a/src/sqlite/preferences.cs
+++ b/src/sqlite/preferences.cs
@@ -171,6 +171,8 @@ class SqlitePreferences : Sqlite
Insert ("videoDevice", "", dbcmdTr); //first
+ Insert ("videoDeviceResolution", "", dbcmdTr);
+ Insert ("videoDeviceFramerate", "", dbcmdTr);
Insert ("inertialmomentum", "0.01", dbcmdTr);
Insert ("CSVExportDecimalSeparator", Util.GetDecimalSeparatorFromLocale(),
dbcmdTr);
Insert ("RGraphsTranslate", "True", dbcmdTr);
@@ -369,6 +371,10 @@ class SqlitePreferences : Sqlite
//video... other
else if(reader[0].ToString() == "videoDevice")
preferences.videoDevice = reader[1].ToString();
+ else if(reader[0].ToString() == "videoDeviceResolution")
+ preferences.videoDeviceResolution = reader[1].ToString();
+ else if(reader[0].ToString() == "videoDeviceFramerate")
+ preferences.videoDeviceFramerate = reader[1].ToString();
else if(reader[0].ToString() == "CSVExportDecimalSeparator")
preferences.CSVExportDecimalSeparator = reader[1].ToString();
else if(reader[0].ToString() == "language")
diff --git a/src/webcam.cs b/src/webcam.cs
index a74103ca..d97d74b5 100644
--- a/src/webcam.cs
+++ b/src/webcam.cs
@@ -111,6 +111,8 @@ public abstract class Webcam
protected Process process;
protected string videoDevice;
+ protected string videoDeviceResolution;
+ protected string videoDeviceFramerate;
protected StreamWriter streamWriter;
protected string executable = "";
@@ -186,15 +188,15 @@ public class WebcamManage
}
// 1 camera
- public Webcam.Result RecordPrepare (string videoDevice)
+ public Webcam.Result RecordPrepare (string videoDevice, string videoDeviceResolution, string
videoDeviceFramerate)
{
- return recordPrepareDo (ref webcam, videoDevice);
+ return recordPrepareDo (ref webcam, videoDevice, videoDeviceResolution, videoDeviceFramerate);
}
// 2 cameras
- public Webcam.Result RecordPrepare (string videoDevice, string videoDevice2)
+ public Webcam.Result RecordPrepare (string videoDevice, string videoDevice2, string
videoDeviceResolution, string videoDeviceFramerate)
{
- Webcam.Result result1 = recordPrepareDo (ref webcam, videoDevice);
- Webcam.Result result2 = recordPrepareDo (ref webcam2, videoDevice2);
+ Webcam.Result result1 = recordPrepareDo (ref webcam, videoDevice, videoDeviceResolution,
videoDeviceFramerate);
+ Webcam.Result result2 = recordPrepareDo (ref webcam2, videoDevice2, videoDeviceResolution,
videoDeviceFramerate);
return new Webcam.Result (
result1.success && result2.success,
@@ -202,7 +204,7 @@ public class WebcamManage
result1.error + result2.error
);
}
- private Webcam.Result recordPrepareDo (ref Webcam w, string videoDevice)
+ private Webcam.Result recordPrepareDo (ref Webcam w, string videoDevice, string
videoDeviceResolution, string videoDeviceFramerate)
{
if(videoDevice == "" || videoDevice == "0")
{
@@ -214,7 +216,7 @@ public class WebcamManage
LogB.Information("wRS at gui chronojump.cs 0, videoDevice: " + videoDevice);
//w = new WebcamMplayer (videoDevice);
- w = new WebcamFfmpeg (Webcam.Action.CAPTURE, os, videoDevice);
+ w = new WebcamFfmpeg (Webcam.Action.CAPTURE, os, videoDevice, videoDeviceResolution,
videoDeviceFramerate);
Webcam.Result result = w.CapturePrepare (Webcam.CaptureTypes.VIDEO);
LogB.Information("wRS at gui chronojump.cs 1, videoDevice: " + videoDevice);
diff --git a/src/webcamFfmpeg.cs b/src/webcamFfmpeg.cs
index c14e86ca..d43ec8d0 100644
--- a/src/webcamFfmpeg.cs
+++ b/src/webcamFfmpeg.cs
@@ -34,11 +34,13 @@ public class WebcamFfmpeg : Webcam
// constructor ----------------------------------
- public WebcamFfmpeg (Webcam.Action action, UtilAll.OperatingSystems os, string videoDevice)
+ public WebcamFfmpeg (Webcam.Action action, UtilAll.OperatingSystems os, string videoDevice, string
videoDeviceResolution, string videoDeviceFramerate)
{
this.action = action;
this.os = os;
this.videoDevice = videoDevice;
+ this.videoDeviceResolution = videoDeviceResolution;
+ this.videoDeviceFramerate = videoDeviceFramerate;
if(action == Webcam.Action.CAPTURE)
{
@@ -235,9 +237,16 @@ public class WebcamFfmpeg : Webcam
parameters.Insert (i ++, "dshow");
parameters.Insert (i ++, "-framerate");
- parameters.Insert (i ++, "30");
+ if(videoDeviceFramerate != "" && Util.IsNumber(videoDeviceFramerate, false))
+ parameters.Insert (i ++, videoDeviceFramerate);
+ else
+ parameters.Insert (i ++, "30");
+
parameters.Insert (i ++, "-video_size");
- parameters.Insert (i ++, "640x480");
+ if(videoDeviceResolution != "")
+ parameters.Insert (i ++, videoDeviceResolution);
+ else
+ parameters.Insert (i ++, "640x480");
if(os == UtilAll.OperatingSystems.LINUX) {
parameters.Insert (i ++, "-input_format");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]