Пример #1
0
        private void PTZScheduler_Load(object sender, EventArgs e)
        {
            chkSchedulePTZ.Checked       = CameraControl.Camobject.ptzschedule.active;
            chkSuspendOnMovement.Checked = CameraControl.Camobject.ptzschedule.suspend;
            ShowPTZSchedule();
            dtpSchedulePTZ.Value = new DateTime(2012, 1, 1, 0, 0, 0, 0);

            if (CameraControl.Camobject.ptz > -1)
            {
                PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz);
                CameraControl.PTZ.PTZSettings = ptz;
                if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null)
                {
                    foreach (var extcmd in ptz.ExtendedCommands.Command)
                    {
                        ddlScheduleCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value));
                    }
                }
            }
            if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4)
            {
                throw new NotSupportedException("PELCO no longer supported");
            }

            if (CameraControl.Camobject.ptz == -5)
            {
                throw new NotSupportedException("ONVIF no longer supported");
            }

            if (ddlScheduleCommand.Items.Count > 0)
            {
                ddlScheduleCommand.SelectedIndex = 0;
            }
        }
Пример #2
0
        private void PTZTracking_Load(object sender, EventArgs e)
        {
            chkReverseTracking.Checked = CameraControl.Camobject.settings.ptzautotrackreverse;
            chkTrack.Checked           = CameraControl.Camobject.settings.ptzautotrack;
            chkAutoHome.Checked        = CameraControl.Camobject.settings.ptzautohome;
            //chkCRF.Checked = CameraControl.Camobject.recorder.crf;
            numTTH.Value     = CameraControl.Camobject.settings.ptztimetohome;
            pnlTrack.Enabled = chkTrack.Checked;

            rdoAny.Checked         = CameraControl.Camobject.settings.ptzautotrackmode == 0;
            rdoVert.Checked        = CameraControl.Camobject.settings.ptzautotrackmode == 1;
            rdoHor.Checked         = CameraControl.Camobject.settings.ptzautotrackmode == 2;
            numAutoHomeDelay.Value = CameraControl.Camobject.settings.ptzautohomedelay;

            ddlHomeCommand.Items.Add(new MainForm.ListItem("Center", "Center"));

            if (CameraControl.Camobject.ptz > -1)
            {
                PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz);
                CameraControl.PTZ.PTZSettings = ptz;
                if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null)
                {
                    foreach (var extcmd in ptz.ExtendedCommands.Command)
                    {
                        ddlHomeCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value));
                        if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value)
                        {
                            ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1;
                        }
                    }
                }
            }
            if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4)
            {
                throw new NotSupportedException("PELCO no longer supported");
            }

            if (CameraControl.Camobject.ptz == -5)
            {
                throw new NotSupportedException("ONVIF no longer supported");
            }

            if (ddlHomeCommand.SelectedIndex == -1 && ddlHomeCommand.Items.Count > 0)
            {
                ddlHomeCommand.SelectedIndex = 0;
            }
            tableLayoutPanel1.Enabled = chkAutoHome.Checked;
        }
Пример #3
0
        private void pnlPTZ_MouseUp(object sender, MouseEventArgs e)
        {
            _mousedown = false;
            tmrRepeater.Stop();
            if (CameraControl == null)
            {
                return;
            }

            PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(p => p.id == CameraControl.Camobject.ptz);

            if (ptz != null && !String.IsNullOrEmpty(ptz.Commands.Stop))
            {
                SendPtzCommand(ptz.Commands.Stop, true);
            }
        }
Пример #4
0
        private void pnlPTZ_MouseUp(object sender, MouseEventArgs e)
        {
            _mousedown = false;
            tmrRepeater.Stop();
            if (CameraControl == null)
            {
                return;
            }

            PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(p => p.id == CameraControl.Camobject.ptz);

            if (!string.IsNullOrEmpty(ptz?.Commands.Stop))
            {
                CameraControl.PTZ.SendPTZCommand(ptz.Commands.Stop);
            }

            if (CameraControl.PTZ.IsContinuous)
            {
                CameraControl.PTZ.SendPTZCommand(Enums.PtzCommand.Stop);
            }
        }
Пример #5
0
        private void PTZScheduler_Load(object sender, EventArgs e)
        {
            chkSchedulePTZ.Checked       = CameraControl.Camobject.ptzschedule.active;
            chkSuspendOnMovement.Checked = CameraControl.Camobject.ptzschedule.suspend;
            ShowPTZSchedule();
            dtpSchedulePTZ.Value = new DateTime(2012, 1, 1, 0, 0, 0, 0);

            if (CameraControl.Camobject.ptz > -1)
            {
                PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz);
                CameraControl.PTZ.PTZSettings = ptz;
                if (ptz.ExtendedCommands?.Command != null)
                {
                    foreach (var extcmd in ptz.ExtendedCommands.Command)
                    {
                        ddlScheduleCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value));
                    }
                }
            }
            if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4)
            {
                foreach (string cmd in PTZController.PelcoCommands)
                {
                    ddlScheduleCommand.Items.Add(new MainForm.ListItem(cmd, cmd));
                }
            }

            if (CameraControl.Camobject.ptz == -5)
            {
                foreach (var preset in CameraControl.PTZ.ONVIFPresets)
                {
                    ddlScheduleCommand.Items.Add(new MainForm.ListItem(preset.Name, preset.Name));
                }
            }
            if (ddlScheduleCommand.Items.Count > 0)
            {
                ddlScheduleCommand.SelectedIndex = 0;
            }
        }
Пример #6
0
        public void SendPTZDirection(double angle)
        {
            if (_cameraControl.Camobject.settings.ptzrotate90)
            {
                angle -= (Math.PI / 2);
                if (angle < -Math.PI)
                {
                    angle += (2 * Math.PI);
                }
            }

            if (_cameraControl.Camobject.settings.ptzflipx)
            {
                if (angle <= 0)
                {
                    angle = -Math.PI - angle;
                }
                else
                {
                    angle = Math.PI - angle;
                }
            }
            if (_cameraControl.Camobject.settings.ptzflipy)
            {
                angle = angle * -1;
            }

            PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz);

            if (ptz == null)
            {
                return;
            }

            string command = ptz.Commands.Center;
            string diag    = "";

            if (angle < Arc && angle > -Arc)
            {
                command = ptz.Commands.Left;
            }
            if (angle >= Arc && angle < 3 * Arc)
            {
                command = ptz.Commands.LeftUp;
                diag    = "leftup";
            }
            if (angle >= 3 * Arc && angle < 5 * Arc)
            {
                command = ptz.Commands.Up;
            }
            if (angle >= 5 * Arc && angle < 7 * Arc)
            {
                command = ptz.Commands.RightUp;
                diag    = "rightup";
            }
            if (angle >= 7 * Arc || angle < -7 * Arc)
            {
                command = ptz.Commands.Right;
            }
            if (angle <= -5 * Arc && angle > -7 * Arc)
            {
                command = ptz.Commands.RightDown;
                diag    = "rightdown";
            }
            if (angle <= -3 * Arc && angle > -5 * Arc)
            {
                command = ptz.Commands.Down;
            }
            if (angle <= -Arc && angle > -3 * Arc)
            {
                command = ptz.Commands.LeftDown;
                diag    = "leftdown";
            }

            if (String.IsNullOrEmpty(command)) //some PTZ cameras dont have diagonal controls, this fixes that
            {
                switch (diag)
                {
                case "leftup":
                    _nextcommand = ptz.Commands.Up;
                    SendPTZCommand(ptz.Commands.Left);
                    break;

                case "rightup":
                    _nextcommand = ptz.Commands.Up;
                    SendPTZCommand(ptz.Commands.Right);
                    break;

                case "rightdown":
                    _nextcommand = ptz.Commands.Down;
                    SendPTZCommand(ptz.Commands.Right);
                    break;

                case "leftdown":
                    _nextcommand = ptz.Commands.Down;
                    SendPTZCommand(ptz.Commands.Left);
                    break;
                }
            }
            else
            {
                SendPTZCommand(command);
            }
        }
Пример #7
0
        public void SendPTZCommand(string cmd, bool wait)
        {
            if (String.IsNullOrEmpty(cmd))
            {
                return;
            }
            if (_request != null)
            {
                if (!wait)
                {
                    return;
                }
                _request.Abort();
            }
            PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz);

            if (ptz == null)
            {
                return;
            }
            Uri    uri;
            bool   absURL = false;
            string url    = _cameraControl.Camobject.settings.videosourcestring;

            if (_cameraControl.Camobject.settings.ptzurlbase.Contains("://"))
            {
                url    = _cameraControl.Camobject.settings.ptzurlbase;
                absURL = true;
            }

            if (cmd.Contains("://"))
            {
                url    = cmd;
                absURL = true;
            }

            try
            {
                uri = new Uri(url);
            }
            catch (Exception e)
            {
                Log.Error("", e);//MainForm.LogExceptionToFile(e);
                return;
            }
            if (!absURL)
            {
                url = uri.AbsoluteUri.Replace(uri.PathAndQuery, "/");

                const string s = "http";
                //if (!String.IsNullOrEmpty(ptz.Prefix))
                //    s = ptz.Prefix;
                const int p = 80;
                //if (ptz.Port > 0)
                //    p = ptz.Port;

                if (!uri.Scheme.ToLower().StartsWith("http")) //rtsp/mrl replace
                {
                    url = url.Replace(":" + uri.Port + "/", ":" + p + "/");
                }

                url = url.Replace(uri.Scheme + "://", s + "://");

                url = url.Trim('/');

                if (!cmd.StartsWith("/"))
                {
                    url += _cameraControl.Camobject.settings.ptzurlbase;

                    if (cmd != "")
                    {
                        if (!url.EndsWith("/"))
                        {
                            string ext = "?";
                            if (url.IndexOf("?", StringComparison.Ordinal) != -1)
                            {
                                ext = "&";
                            }
                            url += ext + cmd;
                        }
                        else
                        {
                            url += cmd;
                        }
                    }
                }
                else
                {
                    url += cmd;
                }
            }
            else
            {
                if (!String.IsNullOrEmpty(cmd))
                {
                    if (!cmd.Contains("://"))
                    {
                        if (!url.EndsWith("/"))
                        {
                            string ext = "?";
                            if (url.IndexOf("?", StringComparison.Ordinal) != -1)
                            {
                                ext = "&";
                            }
                            url += ext + cmd;
                        }
                        else
                        {
                            url += cmd;
                        }
                    }
                    else
                    {
                        url = cmd;
                    }
                }
            }


            string un  = _cameraControl.Camobject.settings.login;
            string pwd = _cameraControl.Camobject.settings.password;

            if (!String.IsNullOrEmpty(_cameraControl.Camobject.settings.ptzusername))
            {
                un  = _cameraControl.Camobject.settings.ptzusername;
                pwd = _cameraControl.Camobject.settings.ptzpassword;
            }
            else
            {
                if (_cameraControl.Camobject.settings.login == string.Empty)
                {
                    //get from url
                    if (!String.IsNullOrEmpty(uri.UserInfo))
                    {
                        string[] creds = uri.UserInfo.Split(':');
                        if (creds.Length >= 2)
                        {
                            un  = creds[0];
                            pwd = creds[1];
                        }
                    }
                }
            }

            url = url.Replace("[USERNAME]", un);
            url = url.Replace("[PASSWORD]", pwd);
            url = url.Replace("[CHANNEL]", _cameraControl.Camobject.settings.ptzchannel);

            _request                           = (HttpWebRequest)WebRequest.Create(url);
            _request.Timeout                   = 5000;
            _request.AllowAutoRedirect         = true;
            _request.KeepAlive                 = true;
            _request.SendChunked               = false;
            _request.AllowWriteStreamBuffering = true;
            _request.UserAgent                 = _cameraControl.Camobject.settings.useragent;
            //

            //get credentials

            // set login and password

            string authInfo = "";

            if (!String.IsNullOrEmpty(un))
            {
                authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(un + ":" + pwd));
                _request.Headers["Authorization"] = "Basic " + authInfo;
            }

            string ckies = _cameraControl.Camobject.settings.cookies ?? "";

            if (!String.IsNullOrEmpty(ckies))
            {
                ckies = ckies.Replace("[USERNAME]", _cameraControl.Camobject.settings.login);
                ckies = ckies.Replace("[PASSWORD]", _cameraControl.Camobject.settings.password);
                ckies = ckies.Replace("[CHANNEL]", _cameraControl.Camobject.settings.ptzchannel);
                ckies = ckies.Replace("[AUTH]", authInfo);
                var      myContainer = new CookieContainer();
                string[] coll        = ckies.Split(';');
                foreach (var ckie in coll)
                {
                    if (!String.IsNullOrEmpty(ckie))
                    {
                        string[] nv = ckie.Split('=');
                        if (nv.Length == 2)
                        {
                            var cookie = new Cookie(nv[0].Trim(), nv[1].Trim());
                            myContainer.Add(new Uri(_request.RequestUri.ToString()), cookie);
                        }
                    }
                }
                _request.CookieContainer = myContainer;
            }

            if (ptz.POST)
            {
                var i = url.IndexOf("?", StringComparison.Ordinal);
                if (i > -1 && i < url.Length)
                {
                    var    encoding = new ASCIIEncoding();
                    string postData = url.Substring(i + 1);
                    byte[] data     = encoding.GetBytes(postData);

                    _request.Method        = "POST";
                    _request.ContentType   = "application/x-www-form-urlencoded";
                    _request.ContentLength = data.Length;

                    using (Stream stream = _request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }
            }


            var myRequestState = new RequestState {
                Request = _request
            };

            _request.BeginGetResponse(FinishPTZRequest, myRequestState);
        }
Пример #8
0
        public void SendPTZCommand(Enums.PtzCommand command, bool wait)
        {
            if (_cameraControl.Camera == null)
            {
                return;
            }
            PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == _cameraControl.Camobject.ptz);
            bool d = (ptz == null || ptz.Commands == null);

            if (!d)
            {
                if (command == Enums.PtzCommand.ZoomIn)
                {
                    if (String.IsNullOrEmpty(ptz.Commands.ZoomIn))
                    {
                        d = true;
                    }
                }
                if (command == Enums.PtzCommand.ZoomOut)
                {
                    if (String.IsNullOrEmpty(ptz.Commands.ZoomOut))
                    {
                        d = true;
                    }
                }
            }

            if (!d)
            {
                _cameraControl.CalibrateCount = 0;
                _cameraControl.Calibrating    = true;

                switch (command)
                {
                case Enums.PtzCommand.Left:
                    SendPTZDirection(0);
                    break;

                case Enums.PtzCommand.Upleft:
                    SendPTZDirection(Math.PI / 4);
                    break;

                case Enums.PtzCommand.Up:
                    SendPTZDirection(Math.PI / 2);
                    break;

                case Enums.PtzCommand.UpRight:
                    SendPTZDirection(3 * Math.PI / 4);
                    break;

                case Enums.PtzCommand.Right:
                    SendPTZDirection(Math.PI);
                    break;

                case Enums.PtzCommand.DownRight:
                    SendPTZDirection(-3 * Math.PI / 4);
                    break;

                case Enums.PtzCommand.Down:
                    SendPTZDirection(-Math.PI / 2);
                    break;

                case Enums.PtzCommand.DownLeft:
                    SendPTZDirection(-Math.PI / 4);
                    break;

                case Enums.PtzCommand.ZoomIn:
                    SendPTZCommand(ptz.Commands.ZoomIn, wait);
                    break;

                case Enums.PtzCommand.ZoomOut:
                    SendPTZCommand(ptz.Commands.ZoomOut, wait);
                    break;

                case Enums.PtzCommand.Center:
                    SendPTZCommand(ptz.Commands.Center, wait);
                    break;

                case Enums.PtzCommand.Stop:
                    SendPTZCommand(ptz.Commands.Stop, wait);
                    break;
                }
            }
            else
            {
                Rectangle r = _cameraControl.Camera.ViewRectangle;
                if (r != Rectangle.Empty)
                {
                    if (command == Enums.PtzCommand.ZoomOut || command == Enums.PtzCommand.ZoomIn)
                    {
                        _cameraControl.Camera.ZPoint = new Point(r.Left + r.Width / 2, r.Top + r.Height / 2);
                    }
                    double angle   = 0;
                    bool   isangle = true;
                    switch (command)
                    {
                    case Enums.PtzCommand.Left:
                        angle = 0;
                        break;

                    case Enums.PtzCommand.Upleft:
                        angle = Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Up:
                        angle = Math.PI / 2;
                        break;

                    case Enums.PtzCommand.UpRight:
                        angle = 3 * Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Right:
                        angle = Math.PI;
                        break;

                    case Enums.PtzCommand.DownRight:
                        angle = -3 * Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Down:
                        angle = -Math.PI / 2;
                        break;

                    case Enums.PtzCommand.DownLeft:
                        angle = -Math.PI / 4;
                        break;

                    case Enums.PtzCommand.ZoomIn:
                        isangle = false;
                        _cameraControl.Camera.ZFactor += 0.2f;
                        break;

                    case Enums.PtzCommand.ZoomOut:
                        isangle = false;
                        _cameraControl.Camera.ZFactor -= 0.2f;
                        if (_cameraControl.Camera.ZFactor < 1)
                        {
                            _cameraControl.Camera.ZFactor = 1;
                        }
                        break;

                    case Enums.PtzCommand.Center:
                        isangle = false;
                        _cameraControl.Camera.ZFactor = 1;
                        break;
                    }
                    if (isangle)
                    {
                        _cameraControl.Camera.ZPoint.X -= Convert.ToInt32(15 * Math.Cos(angle));
                        _cameraControl.Camera.ZPoint.Y -= Convert.ToInt32(15 * Math.Sin(angle));
                    }
                }
            }
        }
Пример #9
0
        private void ProcessPtzInput(Point p)
        {
            if (CameraControl.Camera == null)
            {
                return;
            }
            bool d = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz) == null;

            Enums.PtzCommand comm = Enums.PtzCommand.Center;
            if (p.X < 60 && p.Y > 60 && p.Y < 106)
            {
                comm = Enums.PtzCommand.Left;
            }
            if (p.X < 60 && p.Y < 60)
            {
                comm = Enums.PtzCommand.Upleft;
            }
            if (p.X > 60 && p.X < 104 && p.Y < 60)
            {
                comm = Enums.PtzCommand.Up;
            }
            if (p.X > 104 && p.X < 164 && p.Y < 60)
            {
                comm = Enums.PtzCommand.UpRight;
            }
            if (p.X > 104 && p.X < 170 && p.Y > 60 && p.Y < 104)
            {
                comm = Enums.PtzCommand.Right;
            }
            if (p.X > 104 && p.X < 170 && p.Y > 104)
            {
                comm = Enums.PtzCommand.DownRight;
            }
            if (p.X > 60 && p.X < 104 && p.Y > 104)
            {
                comm = Enums.PtzCommand.Down;
            }
            if (p.X < 60 && p.Y > 104)
            {
                comm = Enums.PtzCommand.DownLeft;
            }
            if (p.X > 170 && p.Y < 45)
            {
                comm = Enums.PtzCommand.ZoomIn;
                if (!d)
                {
                    PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz);
                    if (ptz == null || String.IsNullOrEmpty(ptz.Commands.ZoomIn))
                    {
                        d = true;
                    }
                }
            }
            if (p.X > 170 && p.Y > 45 && p.Y < 90)
            {
                comm = Enums.PtzCommand.ZoomOut;
                if (!d)
                {
                    PTZSettings2Camera ptz = MainForm.PTZs.SingleOrDefault(q => q.id == CameraControl.Camobject.ptz);
                    if (ptz == null || String.IsNullOrEmpty(ptz.Commands.ZoomIn)) //use zoomin just in case zoomout is defined and zoomin isn't
                    {
                        d = true;
                    }
                }
            }

            if (d)
            {
                Rectangle r = CameraControl.Camera.ViewRectangle;
                if (r != Rectangle.Empty)
                {
                    if (comm == Enums.PtzCommand.ZoomOut || comm == Enums.PtzCommand.ZoomIn)
                    {
                        CameraControl.Camera.ZPoint = new Point(r.Left + r.Width / 2, r.Top + r.Height / 2);
                    }
                    double angle   = 0;
                    bool   isangle = true;
                    switch (comm)
                    {
                    case Enums.PtzCommand.Left:
                        angle = 0;
                        break;

                    case Enums.PtzCommand.Upleft:
                        angle = Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Up:
                        angle = Math.PI / 2;
                        break;

                    case Enums.PtzCommand.UpRight:
                        angle = 3 * Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Right:
                        angle = Math.PI;
                        break;

                    case Enums.PtzCommand.DownRight:
                        angle = -3 * Math.PI / 4;
                        break;

                    case Enums.PtzCommand.Down:
                        angle = -Math.PI / 2;
                        break;

                    case Enums.PtzCommand.DownLeft:
                        angle = -Math.PI / 4;
                        break;

                    case Enums.PtzCommand.ZoomIn:
                        isangle = false;
                        CameraControl.Camera.ZFactor += 0.2f;
                        break;

                    case Enums.PtzCommand.ZoomOut:
                        isangle = false;
                        CameraControl.Camera.ZFactor -= 0.2f;
                        if (CameraControl.Camera.ZFactor < 1)
                        {
                            CameraControl.Camera.ZFactor = 1;
                        }
                        break;

                    case Enums.PtzCommand.Center:
                        isangle = false;
                        CameraControl.Camera.ZFactor = 1;
                        break;
                    }
                    if (isangle)
                    {
                        CameraControl.Camera.ZPoint.X -= Convert.ToInt32(15 * Math.Cos(angle));
                        CameraControl.Camera.ZPoint.Y -= Convert.ToInt32(15 * Math.Sin(angle));
                    }
                }
            }
            else
            {
                CameraControl.PTZ.SendPTZCommand(comm, false);
            }
        }
Пример #10
0
 public void ResetONVIF()
 {
     _ptzProfile = null;
     _ptzSettings = null;
 }
Пример #11
0
        private void PTZTracking_Load(object sender, EventArgs e)
        {
            chkReverseTracking.Checked = CameraControl.Camobject.settings.ptzautotrackreverse;
            chkTrack.Checked           = CameraControl.Camobject.settings.ptzautotrack;
            chkAutoHome.Checked        = CameraControl.Camobject.settings.ptzautohome;
            //chkCRF.Checked = CameraControl.Camobject.recorder.crf;
            numTTH.Value     = CameraControl.Camobject.settings.ptztimetohome;
            pnlTrack.Enabled = chkTrack.Checked;

            rdoAny.Checked         = CameraControl.Camobject.settings.ptzautotrackmode == 0;
            rdoVert.Checked        = CameraControl.Camobject.settings.ptzautotrackmode == 1;
            rdoHor.Checked         = CameraControl.Camobject.settings.ptzautotrackmode == 2;
            numAutoHomeDelay.Value = CameraControl.Camobject.settings.ptzautohomedelay;

            ddlHomeCommand.Items.Add(new MainForm.ListItem("Center", "Center"));

            if (CameraControl.Camobject.ptz > -1)
            {
                PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz);
                CameraControl.PTZ.PTZSettings = ptz;
                if (ptz.ExtendedCommands?.Command != null)
                {
                    foreach (var extcmd in ptz.ExtendedCommands.Command)
                    {
                        ddlHomeCommand.Items.Add(new MainForm.ListItem(extcmd.Name, extcmd.Value));
                        if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value)
                        {
                            ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1;
                        }
                    }
                }
            }
            if (CameraControl.Camobject.ptz == -3 || CameraControl.Camobject.ptz == -4)
            {
                foreach (string cmd in PTZController.PelcoCommands)
                {
                    ddlHomeCommand.Items.Add(new MainForm.ListItem(cmd, cmd));
                    if (CameraControl.Camobject.settings.ptzautohomecommand == cmd)
                    {
                        ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1;
                    }
                }
            }

            if (CameraControl.Camobject.ptz == -5)
            {
                ddlHomeCommand.Items.Clear();
                foreach (var cmd in CameraControl.PTZ.ONVIFPresets)
                {
                    ddlHomeCommand.Items.Add(new MainForm.ListItem(cmd.Name, cmd.token));
                    if (CameraControl.Camobject.settings.ptzautohomecommand == cmd.token)
                    {
                        ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1;
                    }
                }
            }

            if (ddlHomeCommand.SelectedIndex == -1 && ddlHomeCommand.Items.Count > 0)
            {
                ddlHomeCommand.SelectedIndex = 0;
            }
            tableLayoutPanel1.Enabled = chkAutoHome.Checked;
        }