Find all our projects in development below.
All source code is GNU General Public License (GPL)
Browsing javaCamViewer/MainForm.cs (63.62 KB)
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using VideoSource;
using Tiger.Video.VFW;
namespace javaCamViewer
{
/// <summary>
/// Summary description for MainForm
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
// statistics
private const int statLength = 15;
private int statIndex = 0, statReady = 0;
private int[] statCount = new int[statLength];
private const int saveStartIntervals = 5; // frames
private const int maxSaveFrames = 2999; // frames
private const int saveExtended = 5; // seconds
private IMotionDetector detector = new javaCamDetector( );
private Bitmap[] preSaveBuffer;
private int intervalsToSave = 0;
private int intervalsToSaveStart = 0;
private AVIWriter writer = null;
private StreamWriter debugWriter;
private ControlForm ctrlForm;
private bool saveOnMotion = false;
private bool snapshotOnMotion = false;
private bool saveFeed = false;
private bool allowClose = false;
private String sourceUrl;
private String sourceType;
private String savePath = "c:\\";
private String snapshotPath = "c:\\";
private String debugPath = "c:\\";
private String savePrefix = "JavaCam";
private String saveFormat = "{0}_{1}.avi";
private String snapshotFormat = "{0}_{1}.jpg";
private String debugFormat = "{0}_{1}.txt";
private String dateFormat = "{0}-{1}-{2} {3}-{4}-{5}";
private String timestampFormat = "ddd mm/dd/yyyy HH:mm:ss";
private String AVIWriterCodec = "wmv3";
private String detectionAlertURL = "";
public bool ptzFlip = false;
public bool ptzMirror = false;
public bool ptzOverride = false;
private String xmlSettingsFile = "config.xml";
private const String XML_SETTINGS_PATH = "/javaCamViewer";
private const String CONFIG_CMDLINEARG = "/config";
private const String FILE_CMDLINEARG = "/file";
private const String JPEGURL_CMDLINEARG = "/jpeg-url";
private const String MJPEGURL_CMDLINEARG = "/mjpeg-url";
private const String USEPRESET_CMDLINEARG = "/usepreset";
private string[] appArgs;
private MenuItem fileItem;
private MenuItem openFileItem;
private MenuItem menuItem1;
private MenuItem exitFileItem;
private OpenFileDialog ofd;
private MainMenu mainMenu;
private System.Timers.Timer timerStats;
private StatusBar statusBar;
private StatusBarPanel fpsPanel;
private StatusBarPanel infoPanel;
private Panel panel;
private javaCamViewer.CameraWindow cameraWindow;
private MenuItem motionItem;
private MenuItem openMJEPGFileItem;
private MenuItem detectorSaveItem;
private MenuItem detectorSaveSnapshot;
private MenuItem menuTools;
private MenuItem menuSaveFeed;
private MenuItem menuWriteDebugInfo;
private MenuItem motionAlarmItem;
private MenuItem openURLFileItem;
private NotifyIcon trayIcon;
private ContextMenuStrip trayMenu;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripSeparator toolStripSeparator1;
private ToolStripMenuItem exitToolStripMenuItem;
public MenuItem menuCameraController;
private MenuItem menuSaveSource;
private MenuItem menuView;
private MenuItem menuOpenSaveFolder;
private MenuItem menuSnapshotFolder;
private MenuItem menuDebugFolder;
private MenuItem menuDrawTimestamp;
private System.Timers.Timer timerDisplay;
private MenuItem menuDetection;
private MenuItem menuEnableFaceDetection;
private MenuItem menuAlertOnDetection;
private IContainer components;
public MainForm(string[] args)
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
appArgs = args;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose( );
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent( )
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.mainMenu = new System.Windows.Forms.MainMenu(this.components);
this.fileItem = new System.Windows.Forms.MenuItem();
this.openFileItem = new System.Windows.Forms.MenuItem();
this.openURLFileItem = new System.Windows.Forms.MenuItem();
this.openMJEPGFileItem = new System.Windows.Forms.MenuItem();
this.menuSaveSource = new System.Windows.Forms.MenuItem();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.exitFileItem = new System.Windows.Forms.MenuItem();
this.motionItem = new System.Windows.Forms.MenuItem();
this.motionAlarmItem = new System.Windows.Forms.MenuItem();
this.detectorSaveItem = new System.Windows.Forms.MenuItem();
this.detectorSaveSnapshot = new System.Windows.Forms.MenuItem();
this.menuTools = new System.Windows.Forms.MenuItem();
this.menuCameraController = new System.Windows.Forms.MenuItem();
this.menuSaveFeed = new System.Windows.Forms.MenuItem();
this.menuDrawTimestamp = new System.Windows.Forms.MenuItem();
this.menuWriteDebugInfo = new System.Windows.Forms.MenuItem();
this.menuView = new System.Windows.Forms.MenuItem();
this.menuOpenSaveFolder = new System.Windows.Forms.MenuItem();
this.menuSnapshotFolder = new System.Windows.Forms.MenuItem();
this.menuDebugFolder = new System.Windows.Forms.MenuItem();
this.ofd = new System.Windows.Forms.OpenFileDialog();
this.timerStats = new System.Timers.Timer();
this.statusBar = new System.Windows.Forms.StatusBar();
this.fpsPanel = new System.Windows.Forms.StatusBarPanel();
this.infoPanel = new System.Windows.Forms.StatusBarPanel();
this.panel = new System.Windows.Forms.Panel();
this.cameraWindow = new javaCamViewer.CameraWindow();
this.trayIcon = new System.Windows.Forms.NotifyIcon(this.components);
this.trayMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.timerDisplay = new System.Timers.Timer();
this.menuDetection = new System.Windows.Forms.MenuItem();
this.menuEnableFaceDetection = new System.Windows.Forms.MenuItem();
this.menuAlertOnDetection = new System.Windows.Forms.MenuItem();
((System.ComponentModel.ISupportInitialize)(this.timerStats)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.fpsPanel)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.infoPanel)).BeginInit();
this.panel.SuspendLayout();
this.trayMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.timerDisplay)).BeginInit();
this.SuspendLayout();
//
// mainMenu
//
this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.fileItem,
this.motionItem,
this.menuDetection,
this.menuTools,
this.menuView});
//
// fileItem
//
this.fileItem.Index = 0;
this.fileItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.openFileItem,
this.openURLFileItem,
this.openMJEPGFileItem,
this.menuSaveSource,
this.menuItem1,
this.exitFileItem});
this.fileItem.Text = "&File";
//
// openFileItem
//
this.openFileItem.Index = 0;
this.openFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
this.openFileItem.Text = "&Open File";
this.openFileItem.Click += new System.EventHandler(this.openFileItem_Click);
//
// openURLFileItem
//
this.openURLFileItem.Index = 1;
this.openURLFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlJ;
this.openURLFileItem.Text = "Open &JPEG URL";
this.openURLFileItem.Click += new System.EventHandler(this.openURLFileItem_Click);
//
// openMJEPGFileItem
//
this.openMJEPGFileItem.Index = 2;
this.openMJEPGFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlM;
this.openMJEPGFileItem.Text = "Open &MJPEG URL";
this.openMJEPGFileItem.Click += new System.EventHandler(this.openMJEPGFileItem_Click);
//
// menuSaveSource
//
this.menuSaveSource.Index = 3;
this.menuSaveSource.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
this.menuSaveSource.Text = "&Save Source URL";
this.menuSaveSource.Click += new System.EventHandler(this.menuSaveSource_Click);
//
// menuItem1
//
this.menuItem1.Index = 4;
this.menuItem1.Text = "-";
//
// exitFileItem
//
this.exitFileItem.Index = 5;
this.exitFileItem.Text = "E&xit";
this.exitFileItem.Click += new System.EventHandler(this.exitFileItem_Click);
//
// motionItem
//
this.motionItem.Index = 1;
this.motionItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.motionAlarmItem,
this.detectorSaveItem,
this.detectorSaveSnapshot});
this.motionItem.Text = "&Motion";
//
// motionAlarmItem
//
this.motionAlarmItem.Checked = true;
this.motionAlarmItem.Index = 0;
this.motionAlarmItem.Text = "&Enable motion alarm";
this.motionAlarmItem.Click += new System.EventHandler(this.motionAlarmItem_Click);
//
// detectorSaveItem
//
this.detectorSaveItem.Index = 1;
this.detectorSaveItem.Text = "&Save on motion";
this.detectorSaveItem.Click += new System.EventHandler(this.detectorSaveItem_Click);
//
// detectorSaveSnapshot
//
this.detectorSaveSnapshot.Index = 2;
this.detectorSaveSnapshot.Text = "S&napshot on motion";
this.detectorSaveSnapshot.Click += new System.EventHandler(this.detectorSaveSnapshot_Click);
//
// menuTools
//
this.menuTools.Index = 3;
this.menuTools.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuCameraController,
this.menuSaveFeed,
this.menuDrawTimestamp,
this.menuWriteDebugInfo});
this.menuTools.Text = "&Tools";
//
// menuCameraController
//
this.menuCameraController.Index = 0;
this.menuCameraController.Shortcut = System.Windows.Forms.Shortcut.F9;
this.menuCameraController.Text = "&Camera controller";
this.menuCameraController.Click += new System.EventHandler(this.menuCameraController_Click);
//
// menuSaveFeed
//
this.menuSaveFeed.Index = 1;
this.menuSaveFeed.Shortcut = System.Windows.Forms.Shortcut.F10;
this.menuSaveFeed.Text = "&Save feed to file";
this.menuSaveFeed.Click += new System.EventHandler(this.menuSaveFeed_Click);
//
// menuDrawTimestamp
//
this.menuDrawTimestamp.Index = 2;
this.menuDrawTimestamp.Shortcut = System.Windows.Forms.Shortcut.F11;
this.menuDrawTimestamp.Text = "&Draw timestamp";
this.menuDrawTimestamp.Click += new System.EventHandler(this.menuDrawTimestamp_Click);
//
// menuWriteDebugInfo
//
this.menuWriteDebugInfo.Index = 3;
this.menuWriteDebugInfo.Shortcut = System.Windows.Forms.Shortcut.F12;
this.menuWriteDebugInfo.Text = "&Write debug info";
this.menuWriteDebugInfo.Click += new System.EventHandler(this.menuWriteDebugInfo_Click);
//
// menuView
//
this.menuView.Index = 4;
this.menuView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuOpenSaveFolder,
this.menuSnapshotFolder,
this.menuDebugFolder});
this.menuView.Text = "&View";
//
// menuOpenSaveFolder
//
this.menuOpenSaveFolder.Index = 0;
this.menuOpenSaveFolder.Text = "Open &Save Folder";
this.menuOpenSaveFolder.Click += new System.EventHandler(this.menuOpenSaveFolder_Click);
//
// menuSnapshotFolder
//
this.menuSnapshotFolder.Index = 1;
this.menuSnapshotFolder.Text = "Open S&napshot Folder";
this.menuSnapshotFolder.Click += new System.EventHandler(this.menuSnapshotFolder_Click);
//
// menuDebugFolder
//
this.menuDebugFolder.Index = 2;
this.menuDebugFolder.Text = "Open &Debug Folder";
this.menuDebugFolder.Click += new System.EventHandler(this.menuDebugFolder_Click);
//
// ofd
//
this.ofd.Filter = "AVI files (*.avi)|*.avi";
this.ofd.Title = "Open movie";
//
// timerStats
//
this.timerStats.Interval = 1000;
this.timerStats.SynchronizingObject = this;
this.timerStats.Elapsed += new System.Timers.ElapsedEventHandler(this.timerStats_Elapsed);
//
// statusBar
//
this.statusBar.Location = new System.Drawing.Point(0, 506);
this.statusBar.Name = "statusBar";
this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
this.fpsPanel,
this.infoPanel});
this.statusBar.ShowPanels = true;
this.statusBar.Size = new System.Drawing.Size(666, 22);
this.statusBar.SizingGrip = false;
this.statusBar.TabIndex = 1;
//
// fpsPanel
//
this.fpsPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
this.fpsPanel.Name = "fpsPanel";
this.fpsPanel.Width = 333;
//
// infoPanel
//
this.infoPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
this.infoPanel.Name = "infoPanel";
this.infoPanel.Width = 333;
//
// panel
//
this.panel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.panel.Controls.Add(this.cameraWindow);
this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel.Location = new System.Drawing.Point(0, 0);
this.panel.Name = "panel";
this.panel.Size = new System.Drawing.Size(666, 506);
this.panel.TabIndex = 2;
//
// cameraWindow
//
this.cameraWindow.BackColor = System.Drawing.SystemColors.AppWorkspace;
this.cameraWindow.Camera = null;
this.cameraWindow.Location = new System.Drawing.Point(10, 10);
this.cameraWindow.Name = "cameraWindow";
this.cameraWindow.Size = new System.Drawing.Size(642, 482);
this.cameraWindow.TabIndex = 1;
//
// trayIcon
//
this.trayIcon.ContextMenuStrip = this.trayMenu;
this.trayIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("trayIcon.Icon")));
this.trayIcon.Text = "javaCam Viewer";
this.trayIcon.Visible = true;
this.trayIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.trayIcon_MouseDoubleClick);
//
// trayMenu
//
this.trayMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openToolStripMenuItem,
this.toolStripSeparator1,
this.exitToolStripMenuItem});
this.trayMenu.Name = "trayMenu";
this.trayMenu.Size = new System.Drawing.Size(112, 54);
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
this.openToolStripMenuItem.Text = "&Open";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(108, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
// timerDisplay
//
this.timerDisplay.SynchronizingObject = this;
this.timerDisplay.Elapsed += new System.Timers.ElapsedEventHandler(this.timerDisplay_Elapsed);
//
// menuDetection
//
this.menuDetection.Index = 2;
this.menuDetection.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuEnableFaceDetection,
this.menuAlertOnDetection});
this.menuDetection.Text = "&Detection";
//
// menuEnableFaceDetection
//
this.menuEnableFaceDetection.Index = 0;
this.menuEnableFaceDetection.Text = "&Enable face detection";
this.menuEnableFaceDetection.Click += new System.EventHandler(this.menuEnableFaceDetection_Click);
//
// menuAlertOnDetection
//
this.menuAlertOnDetection.Index = 1;
this.menuAlertOnDetection.Text = "&Alert on detection";
this.menuAlertOnDetection.Click += new System.EventHandler(this.menuAlertOnDetection_Click);
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(666, 528);
this.Controls.Add(this.panel);
this.Controls.Add(this.statusBar);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Menu = this.mainMenu;
this.Name = "MainForm";
this.Text = "javaCam Viewer";
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Resize += new System.EventHandler(this.MainForm_Resize);
((System.ComponentModel.ISupportInitialize)(this.timerStats)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.fpsPanel)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.infoPanel)).EndInit();
this.panel.ResumeLayout(false);
this.trayMenu.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.timerDisplay)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.Run( new MainForm(args) );
}
private bool loadXmlSettings(String xmlFile)
{
try
{
XmlDocument objXMLdoc = new XmlDocument();
XmlNode thisNode = null;
if (!File.Exists(xmlFile)) return false;
objXMLdoc.Load(xmlFile);
thisNode = objXMLdoc.SelectSingleNode(XML_SETTINGS_PATH);
if (thisNode.SelectSingleNode("source_url") != null &&
sourceUrl == null && sourceType == null)
{
String _sourceUrl = thisNode.SelectSingleNode("source_url").InnerText;
if (_sourceUrl != "" && thisNode.SelectSingleNode("source_type") != null)
{
String _sourceType = thisNode.SelectSingleNode("source_type").InnerText;
if (_sourceType == "jpg" || _sourceType == "jpeg")
{
// create video source
JPEGStream jpegSource = new JPEGStream();
jpegSource.VideoSource = _sourceUrl;
// open it
OpenVideoSource(jpegSource);
}
else if (_sourceType == "mjpg" || _sourceType == "mjpeg")
{
// create video source
MJPEGStream mjpegSource = new MJPEGStream();
mjpegSource.VideoSource = _sourceUrl;
// open it
OpenVideoSource(mjpegSource);
}
}
if (thisNode.SelectSingleNode("source_name") != null)
{
String _sourceName = thisNode.SelectSingleNode("source_name").InnerText;
if (_sourceName != "")
{
this.Text += " :: " + _sourceName;
trayIcon.Text = this.Text;
}
}
}
if (thisNode.SelectSingleNode("save_path") != null &&
thisNode.SelectSingleNode("save_path").InnerText != "")
{
savePath = thisNode.SelectSingleNode("save_path").InnerText;
if (!savePath.EndsWith("\\")) savePath += "\\";
}
if (thisNode.SelectSingleNode("snapshot_path") != null &&
thisNode.SelectSingleNode("snapshot_path").InnerText != "")
{
snapshotPath = thisNode.SelectSingleNode("snapshot_path").InnerText;
if (!snapshotPath.EndsWith("\\")) snapshotPath += "\\";
}
if (thisNode.SelectSingleNode("debug_path") != null &&
thisNode.SelectSingleNode("debug_path").InnerText != "")
{
debugPath = thisNode.SelectSingleNode("debug_path").InnerText;
if (!debugPath.EndsWith("\\")) debugPath += "\\";
}
if (thisNode.SelectSingleNode("save_prefix") != null &&
thisNode.SelectSingleNode("save_prefix").InnerText != "")
{
savePrefix = thisNode.SelectSingleNode("save_prefix").InnerText;
}
if (thisNode.SelectSingleNode("motion_alarm") != null &&
thisNode.SelectSingleNode("motion_alarm").InnerText != "")
{
bool motionAlarm = bool.Parse(thisNode.SelectSingleNode("motion_alarm").InnerText);
if (!motionAlarm)
{
motionAlarmItem.Checked = false;
if ( detector != null )
detector.MotionLevelCalculation = false;
}
}
if (thisNode.SelectSingleNode("save_on_motion") != null &&
thisNode.SelectSingleNode("save_on_motion").InnerText != "")
{
saveOnMotion = bool.Parse(thisNode.SelectSingleNode("save_on_motion").InnerText);
if (saveOnMotion) detectorSaveItem.Checked = true;
}
if (thisNode.SelectSingleNode("snapshot_on_motion") != null &&
thisNode.SelectSingleNode("snapshot_on_motion").InnerText != "")
{
snapshotOnMotion = bool.Parse(thisNode.SelectSingleNode("snapshot_on_motion").InnerText);
if (snapshotOnMotion) detectorSaveSnapshot.Checked = true;
}
if (thisNode.SelectSingleNode("save_prefix") != null &&
thisNode.SelectSingleNode("save_prefix").InnerText != "")
{
savePrefix = thisNode.SelectSingleNode("save_prefix").InnerText;
}
if (thisNode.SelectSingleNode("save_format") != null &&
thisNode.SelectSingleNode("save_format").InnerText != "")
{
saveFormat = thisNode.SelectSingleNode("save_format").InnerText;
}
if (thisNode.SelectSingleNode("snapshot_format") != null &&
thisNode.SelectSingleNode("snapshot_format").InnerText != "")
{
snapshotFormat = thisNode.SelectSingleNode("snapshot_format").InnerText;
}
if (thisNode.SelectSingleNode("date_format") != null &&
thisNode.SelectSingleNode("date_format").InnerText != "")
{
dateFormat = thisNode.SelectSingleNode("date_format").InnerText;
}
if (thisNode.SelectSingleNode("debug_format") != null &&
thisNode.SelectSingleNode("debug_format").InnerText != "")
{
debugFormat = thisNode.SelectSingleNode("debug_format").InnerText;
}
if (thisNode.SelectSingleNode("draw_timestamp") != null &&
thisNode.SelectSingleNode("draw_timestamp").InnerText != "")
{
menuDrawTimestamp.Checked = bool.Parse(thisNode.SelectSingleNode("draw_timestamp").InnerText);
Camera camera = cameraWindow.Camera;
if (camera != null)
{
camera.DrawTimestamp = menuDrawTimestamp.Checked;
}
}
if (thisNode.SelectSingleNode("timestamp_format") != null &&
thisNode.SelectSingleNode("timestamp_format").InnerText != "")
{
timestampFormat = thisNode.SelectSingleNode("timestamp_format").InnerText;
Camera camera = cameraWindow.Camera;
if (camera != null)
{
camera.TimestampFormat = timestampFormat;
}
}
if (thisNode.SelectSingleNode("aviwriter_codec") != null &&
thisNode.SelectSingleNode("aviwriter_codec").InnerText != "")
{
AVIWriterCodec = thisNode.SelectSingleNode("aviwriter_codec").InnerText;
}
if (thisNode.SelectSingleNode("ptz_flip") != null &&
thisNode.SelectSingleNode("ptz_flip").InnerText != "")
{
ptzFlip = bool.Parse(thisNode.SelectSingleNode("ptz_flip").InnerText);
}
if (thisNode.SelectSingleNode("ptz_mirror") != null &&
thisNode.SelectSingleNode("ptz_mirror").InnerText != "")
{
ptzMirror = bool.Parse(thisNode.SelectSingleNode("ptz_mirror").InnerText);
}
if (thisNode.SelectSingleNode("ptz_override") != null &&
thisNode.SelectSingleNode("ptz_override").InnerText != "")
{
ptzOverride = bool.Parse(thisNode.SelectSingleNode("ptz_override").InnerText);
}
if (thisNode.SelectSingleNode("detection_enable") != null &&
thisNode.SelectSingleNode("detection_enable").InnerText != "")
{
bool detectionEnable = bool.Parse(thisNode.SelectSingleNode("detection_enable").InnerText);
if (detectionEnable)
{
menuEnableFaceDetection.Checked = true;
if (detector != null)
detector.EnableFaceDetection = true;
}
}
if (thisNode.SelectSingleNode("detection_alert_enable") != null &&
thisNode.SelectSingleNode("detection_alert_enable").InnerText != "")
{
bool detectionAlert = bool.Parse(thisNode.SelectSingleNode("detection_alert_enable").InnerText);
if (detectionAlert)
{
this.menuAlertOnDetection.Checked = true;
}
}
if (thisNode.SelectSingleNode("detection_alert_url") != null &&
thisNode.SelectSingleNode("detection_alert_url").InnerText != "")
{
detectionAlertURL = thisNode.SelectSingleNode("detection_alert_url").InnerText;
}
thisNode = null;
objXMLdoc = null;
return true;
}
catch
{
return false;
}
}
private bool saveXmlSettings(String xmlFile, bool includeSource)
{
try
{
XmlDocument objXMLdoc = new XmlDocument();
XmlNode thisNode = null;
if (!File.Exists(xmlFile))
File.WriteAllText(xmlFile, MainMod.getResourceString("config_default"));
objXMLdoc.Load(xmlFile);
thisNode = objXMLdoc.SelectSingleNode(XML_SETTINGS_PATH);
if (includeSource && sourceUrl != null && sourceType != null)
{
if (thisNode.SelectSingleNode("source_url") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("source_url");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("source_url").InnerText = sourceUrl;
if (thisNode.SelectSingleNode("source_type") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("source_type");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("source_type").InnerText = sourceType;
}
if (thisNode.SelectSingleNode("save_path") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("save_path");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("save_path").InnerText = savePath;
if (thisNode.SelectSingleNode("snapshot_path") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("snapshot_path");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("snapshot_path").InnerText = snapshotPath;
if (thisNode.SelectSingleNode("debug_path") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("debug_path");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("debug_path").InnerText = debugPath;
if (thisNode.SelectSingleNode("save_prefix") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("save_prefix");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("save_prefix").InnerText = savePrefix;
if (thisNode.SelectSingleNode("motion_alarm") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("motion_alarm");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("motion_alarm").InnerText = motionAlarmItem.Checked.ToString();
if (thisNode.SelectSingleNode("save_on_motion") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("save_on_motion");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("save_on_motion").InnerText = saveOnMotion.ToString();
if (thisNode.SelectSingleNode("snapshot_on_motion") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("snapshot_on_motion");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("snapshot_on_motion").InnerText = snapshotOnMotion.ToString();
if (thisNode.SelectSingleNode("save_format") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("save_format");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("save_format").InnerText = saveFormat;
if (thisNode.SelectSingleNode("snapshot_format") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("snapshot_format");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("snapshot_format").InnerText = snapshotFormat;
if (thisNode.SelectSingleNode("date_format") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("date_format");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("date_format").InnerText = dateFormat;
if (thisNode.SelectSingleNode("debug_format") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("debug_format");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("debug_format").InnerText = debugFormat;
if (thisNode.SelectSingleNode("draw_timestamp") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("draw_timestamp");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("draw_timestamp").InnerText = menuDrawTimestamp.Checked.ToString();
if (thisNode.SelectSingleNode("timestamp_format") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("timestamp_format");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("timestamp_format").InnerText = timestampFormat;
if (thisNode.SelectSingleNode("aviwriter_codec") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("aviwriter_codec");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("aviwriter_codec").InnerText = AVIWriterCodec;
if (thisNode.SelectSingleNode("ptz_flip") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("ptz_flip");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("ptz_flip").InnerText = ptzFlip.ToString();
if (thisNode.SelectSingleNode("ptz_mirror") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("ptz_mirror");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("ptz_mirror").InnerText = ptzMirror.ToString();
if (thisNode.SelectSingleNode("ptz_override") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("ptz_override");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("ptz_override").InnerText = ptzOverride.ToString();
if (thisNode.SelectSingleNode("detection_enable") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("detection_enable");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("detection_enable").InnerText = menuEnableFaceDetection.Checked.ToString();
if (thisNode.SelectSingleNode("detection_alert_enable") == null)
{
XmlNode childNode = objXMLdoc.CreateElement("detection_alert_enable");
thisNode.AppendChild(childNode);
}
thisNode.SelectSingleNode("detection_alert_enable").InnerText = menuAlertOnDetection.Checked.ToString();
objXMLdoc.Save(xmlFile);
thisNode = null;
objXMLdoc = null;
return true;
}
catch
{
return false;
}
}
private String getDateString()
{
DateTime date = DateTime.Now;
return String.Format(dateFormat,
date.Year.ToString("#00"), date.Month.ToString("#00"), date.Day.ToString("#00"),
date.Hour.ToString("#00"), date.Minute.ToString("#00"), date.Second.ToString("#00"));
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!allowClose && e.CloseReason == CloseReason.UserClosing)
{
// stop the form from closing
e.Cancel = true;
if (ctrlForm != null)
{
ctrlForm.Hide();
}
cameraWindow.Hide();
this.Hide();
}
else
{
saveXmlSettings(xmlSettingsFile, false);
CloseFile();
}
}
private void MainForm_Resize(object sender, EventArgs e)
{
// check for windowstate change
if (this.WindowState == FormWindowState.Minimized)
{
if (ctrlForm != null)
{
ctrlForm.Hide();
}
cameraWindow.Hide();
this.Hide();
}
}
private void MainForm_Shown(object sender, EventArgs e)
{
// check for windowstate change
if (this.WindowState == FormWindowState.Minimized)
{
cameraWindow.Hide();
this.Hide();
}
// check for a cmdline source
for (int i = 0; i < appArgs.Length; i++)
{
if (appArgs[i] == CONFIG_CMDLINEARG && i < appArgs.Length - 1)
{
// use specified config file
xmlSettingsFile = appArgs[i + 1];
}
else if (appArgs[i] == FILE_CMDLINEARG && i < appArgs.Length - 1)
{
// create video source
VideoFileSource fileSource = new VideoFileSource();
fileSource.VideoSource = appArgs[i + 1];
// open it
OpenVideoSource(fileSource);
break;
}
else if (appArgs[i] == JPEGURL_CMDLINEARG && i < appArgs.Length - 1)
{
// create video source
JPEGStream jpegSource = new JPEGStream();
jpegSource.VideoSource = appArgs[i + 1];
// open it
OpenVideoSource(jpegSource);
break;
}
else if (appArgs[i] == MJPEGURL_CMDLINEARG && i < appArgs.Length - 1)
{
// create video source
MJPEGStream mjpegSource = new MJPEGStream();
mjpegSource.VideoSource = appArgs[i + 1];
// open it
OpenVideoSource(mjpegSource);
break;
}
}
// check for any cmdline flags
for (int i = 0; i < appArgs.Length; i++)
{
if (appArgs[i] == USEPRESET_CMDLINEARG && i < appArgs.Length - 1)
{
int preset = 0;
if (int.TryParse(appArgs[i + 1], out preset) && preset > 0)
{
// call the specified preset
camera_useCameraPreset(preset, null);
}
}
}
// load settings from xml
loadXmlSettings(xmlSettingsFile);
}
// Close the main form
private void exitFileItem_Click( object sender, System.EventArgs e )
{
allowClose = true;
this.Close();
}
// Open file
private void openFileItem_Click(object sender, System.EventArgs e)
{
if (ofd.ShowDialog() == DialogResult.OK)
{
// create video source
VideoFileSource fileSource = new VideoFileSource();
fileSource.VideoSource = ofd.FileName;
// open it
OpenVideoSource(fileSource);
}
}
// Open URL
private void openURLFileItem_Click( object sender, System.EventArgs e )
{
URLForm form = new URLForm( );
form.Description = "Enter URL of an updating JPEG from a web camera:";
form.URLs = new string[]
{
"http://127.0.0.1/snapshot.cgi?user=admin&pwd=&resolution=32"
};
if ( form.ShowDialog( this ) == DialogResult.OK )
{
// create video source
JPEGStream jpegSource = new JPEGStream( );
jpegSource.VideoSource = form.URL;
// open it
OpenVideoSource( jpegSource );
}
}
// Open MJPEG URL
private void openMJEPGFileItem_Click( object sender, System.EventArgs e )
{
URLForm form = new URLForm( );
form.Description = "Enter URL of an MJPEG video stream:";
form.URLs = new string[]
{
"http://127.0.0.1/videostream.cgi?user=admin&pwd=&resolution=32"
};
if ( form.ShowDialog( this ) == DialogResult.OK )
{
// create video source
MJPEGStream mjpegSource = new MJPEGStream( );
mjpegSource.VideoSource = form.URL;
// open it
OpenVideoSource( mjpegSource );
}
}
// Open video source
private void OpenVideoSource( IVideoSource source )
{
// set busy cursor
this.Cursor = Cursors.WaitCursor;
// close previous file
CloseFile( );
// enable/disable motion alarm
if ( detector != null )
{
detector.MotionLevelCalculation = motionAlarmItem.Checked;
detector.DebugWriter = debugWriter;
detector.AlertFaceDetected += new EventHandler(camera_alertFaceDetected);
}
// create camera
Camera camera = new Camera( source, detector );
// config camera
camera.DrawTimestamp = menuDrawTimestamp.Checked;
camera.TimestampFormat = timestampFormat;
// start camera
camera.Start( );
// attach camera to camera window
cameraWindow.Camera = camera;
// reset statistics
statIndex = statReady = 0;
// set event handlers
camera.NewFrame += new EventHandler( camera_NewFrame );
camera.Alarm += new EventHandler( camera_Alarm );
// start timer
timerStats.Start( );
// store the source url
if (source.GetType() == typeof(JPEGStream))
{
sourceUrl = source.VideoSource;
sourceType = "jpeg";
}
else if (source.GetType() == typeof(MJPEGStream))
{
sourceUrl = source.VideoSource;
sourceType = "mjpeg";
}
this.Cursor = Cursors.Default;
}
private void menuSaveSource_Click(object sender, EventArgs e)
{
if (sourceUrl != null && sourceType != null)
{
if (saveXmlSettings(xmlSettingsFile, true))
{
MessageBox.Show("Source URL saved to config file.", Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Problem saving config file.", Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("No source URL to save.", Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
// Close current file
private void CloseFile( )
{
try
{
Camera camera = cameraWindow.Camera;
if (camera != null)
{
// detach camera from camera window
cameraWindow.Camera = null;
// signal camera to stop
camera.SignalToStop();
// wait for the camera
camera.WaitForStop();
camera = null;
if (detector != null)
{
detector.DebugWriter = null;
detector.Reset();
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("=============: " + ex.Message);
}
if (writer != null)
{
CloseWriter();
if (menuSaveFeed.Checked)
menuSaveFeed.Checked = false;
}
if (menuCameraController.Checked && ctrlForm != null && !ctrlForm.IsDisposed)
{
ctrlForm.Close();
ctrlForm = null;
menuCameraController.Checked = false;
}
intervalsToSave = 0;
intervalsToSaveStart = 0;
}
private void CloseWriter()
{
try
{
lock (writer)
{
writer.Dispose();
writer = null;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("=============: " + ex.Message);
}
}
// On timer event - gather statistic
private void timerStats_Elapsed( object sender, System.Timers.ElapsedEventArgs e )
{
Camera camera = cameraWindow.Camera;
if ( camera != null )
{
// get number of frames for the last second
statCount[statIndex] = camera.FramesReceived;
// increment indexes
if ( ++statIndex >= statLength )
statIndex = 0;
if ( statReady < statLength )
statReady++;
float fps = 0;
// calculate average value
for ( int i = 0; i < statReady; i++ )
{
fps += statCount[i];
}
fps /= statReady;
statCount[statIndex] = 0;
fpsPanel.Text = fps.ToString("F2") + " fps";
infoPanel.Text = MainMod.formatBytes(camera.BytesReceived) + "ps";
if (writer != null)
{
lock (writer)
{
infoPanel.Text += " / " + writer.CurrentPosition.ToString() + " frame(s) saved";
}
}
// descrease save counter
if (intervalsToSave > 0)
{
if (--intervalsToSave == 0 && writer != null)
CloseWriter();
}
// check for max save frames on motion saving
if (!saveFeed && writer != null && writer.CurrentPosition > maxSaveFrames)
CloseWriter();
}
}
// On alarm
private void camera_Alarm( object sender, System.EventArgs e )
{
if (saveOnMotion && !saveFeed)
{
if (intervalsToSave == 0 && intervalsToSaveStart == 0)
{
intervalsToSaveStart = saveStartIntervals;
if (preSaveBuffer != null)
{
for (int i = 0; i < preSaveBuffer.Length; i++)
{
if (preSaveBuffer[i] != null)
{
preSaveBuffer[i].Dispose();
preSaveBuffer[i] = null;
}
}
preSaveBuffer = null;
}
preSaveBuffer = new Bitmap[saveStartIntervals];
}
else if ((intervalsToSave > 0 || intervalsToSaveStart == 1))
{
// save movie for xx seconds after motion stops
intervalsToSave = (int)(saveExtended * (1000 / timerStats.Interval));
}
}
}
// On new frame
private void camera_NewFrame( object sender, System.EventArgs e )
{
if (saveFeed || (intervalsToSaveStart == 0 && intervalsToSave > 0 && saveOnMotion))
{
try
{
String timeStamp = null;
if (writer == null)
{
String fileName;
timeStamp = getDateString();
if (Directory.Exists(savePath))
{
fileName = savePath + String.Format(saveFormat, savePrefix, timeStamp);
}
else
{
throw new Exception("Save path not found.");
}
try
{
// create AVI writer
writer = new AVIWriter(AVIWriterCodec);
// open AVI file
writer.Open(fileName, cameraWindow.Camera.Width, cameraWindow.Camera.Height);
}
catch
{
if (writer != null) CloseWriter();
}
}
lock (writer)
{
Camera camera = cameraWindow.Camera;
camera.Lock();
// check for prebuffered frames
if (!saveFeed && preSaveBuffer != null && preSaveBuffer.Length > 0)
{
if (snapshotOnMotion)
{
String fileName;
if (timeStamp == null) timeStamp = getDateString();
if (Directory.Exists(snapshotPath))
{
fileName = snapshotPath + String.Format(snapshotFormat, savePrefix, timeStamp);
}
else
{
throw new Exception("Snapshot path not found.");
}
// save the first motion image as snapshot
preSaveBuffer[preSaveBuffer.Length - 1].Save(fileName,
System.Drawing.Imaging.ImageFormat.Jpeg);
}
for (int i = preSaveBuffer.Length - 1; i >= 0; i--)
{
// save the frame
writer.AddFrame(preSaveBuffer[i]);
preSaveBuffer[i].Dispose();
preSaveBuffer[i] = null;
}
preSaveBuffer = null;
}
// save the frame
writer.AddFrame(camera.LastFrame);
camera.Unlock();
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("=============: " + ex.Message);
}
}
else if (intervalsToSaveStart > 0)
{
intervalsToSaveStart--;
try
{
Camera camera = cameraWindow.Camera;
camera.Lock();
preSaveBuffer[intervalsToSaveStart] = (Bitmap)camera.LastFrame.Clone();
camera.Unlock();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("=============: " + ex.Message);
}
}
}
private void camera_alertFaceDetected(object sender, EventArgs e)
{
if (detectionAlertURL != null)
{
int cnt = (int)sender;
MainMod.hitUrl(detectionAlertURL + "?cnt=" + cnt.ToString());
}
}
private void camera_useCameraPreset(object sender, EventArgs e)
{
if (sourceUrl != null)
{
int pos = (int)sender;
pos = (30 + pos + (pos - 1));
Uri sourceUri = new Uri(sourceUrl);
MainMod.cameraDecoderControl(pos, sourceUri.Host, sourceUri.Query);
}
}
// Switch saving mode
private void detectorSaveItem_Click( object sender, System.EventArgs e )
{
// change saving mode
saveOnMotion = !saveOnMotion;
// update menu
detectorSaveItem.Checked = saveOnMotion;
}
// Enable/disable motion alaram
private void motionAlarmItem_Click( object sender, System.EventArgs e )
{
motionAlarmItem.Checked = !motionAlarmItem.Checked;
// enable/disable motion alarm
if (detector != null)
{
detector.MotionLevelCalculation = motionAlarmItem.Checked;
if (!motionAlarmItem.Checked) cameraWindow.ResetAlarm();
}
}
private void trayIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
if ((e.Button == MouseButtons.Left && !SystemInformation.MouseButtonsSwapped) ||
(e.Button == MouseButtons.Right && SystemInformation.MouseButtonsSwapped))
{
openToolStripMenuItem.PerformClick();
}
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
// display the main form
this.Show();
this.WindowState = FormWindowState.Normal;
timerDisplay.Start();
if (ctrlForm != null)
{
try
{
ctrlForm.Show(this);
}
catch
{
}
this.Focus();
}
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
allowClose = true;
this.Close();
}
private void detectorSaveSnapshot_Click(object sender, EventArgs e)
{
// change strict save mode
snapshotOnMotion = !snapshotOnMotion;
// update menu
detectorSaveSnapshot.Checked = snapshotOnMotion;
}
private void menuSaveFeed_Click(object sender, EventArgs e)
{
// change save mode
saveFeed = !saveFeed;
// update menu
menuSaveFeed.Checked = saveFeed;
if (writer != null) CloseWriter();
if (saveFeed && cameraWindow.Camera != null)
{
intervalsToSave = 0;
intervalsToSaveStart = 0;
if (preSaveBuffer != null)
{
for (int i = 0; i < preSaveBuffer.Length; i++)
{
if (preSaveBuffer[i] != null)
{
preSaveBuffer[i].Dispose();
preSaveBuffer[i] = null;
}
}
preSaveBuffer = null;
}
}
}
private void menuWriteDebugInfo_Click(object sender, EventArgs e)
{
menuWriteDebugInfo.Checked = !menuWriteDebugInfo.Checked;
try
{
if (debugWriter != null)
{
if (detector != null) detector.DebugWriter = null;
debugWriter.Close();
debugWriter = null;
}
if (menuWriteDebugInfo.Checked && detector != null)
{
String fileName;
if (Directory.Exists(debugPath))
{
fileName = debugPath + String.Format(debugFormat, savePrefix, getDateString());
}
else
{
throw new Exception("Debug path not found.");
}
debugWriter = new StreamWriter(fileName, true);
detector.DebugWriter = debugWriter;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("=============: " + ex.Message);
}
}
private void menuCameraController_Click(object sender, EventArgs e)
{
if (!menuCameraController.Checked)
{
menuCameraController.Checked = true;
if (ctrlForm == null || (ctrlForm != null && ctrlForm.IsDisposed))
{
ctrlForm = new ControlForm(sourceUrl);
}
ctrlForm.Show(this);
}
else
{
menuCameraController.Checked = false;
ctrlForm.Hide();
}
}
private void menuDrawTimestamp_Click(object sender, EventArgs e)
{
menuDrawTimestamp.Checked = !menuDrawTimestamp.Checked;
Camera camera = cameraWindow.Camera;
if (camera != null)
{
camera.DrawTimestamp = menuDrawTimestamp.Checked;
}
}
private void menuOpenSaveFolder_Click(object sender, EventArgs e)
{
(new AppLauncher(savePath, "", AppLauncher.SHOWWINDOW_STYLES.SW_SHOWNORMAL)).runApp();
}
private void menuSnapshotFolder_Click(object sender, EventArgs e)
{
(new AppLauncher(snapshotPath, "", AppLauncher.SHOWWINDOW_STYLES.SW_SHOWNORMAL)).runApp();
}
private void menuDebugFolder_Click(object sender, EventArgs e)
{
(new AppLauncher(debugPath, "", AppLauncher.SHOWWINDOW_STYLES.SW_SHOWNORMAL)).runApp();
}
private void timerDisplay_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timerDisplay.Stop();
cameraWindow.Show();
}
private void menuEnableFaceDetection_Click(object sender, EventArgs e)
{
menuEnableFaceDetection.Checked = !menuEnableFaceDetection.Checked;
// enable/disable face detection
if (detector != null)
{
detector.EnableFaceDetection = menuEnableFaceDetection.Checked;
}
}
private void menuAlertOnDetection_Click(object sender, EventArgs e)
{
menuAlertOnDetection.Checked = !menuAlertOnDetection.Checked;
}
}
}
Download javaCamViewer/MainForm.cs