Exemplo n.º 1
0
            public DeviceWrapper(IDevice dev)
            {
                this.dev = dev;
                Hash     = dev.UID.GetMD5Hash();

                vdev = dev as IVideoDevice;
                if (vdev != null)
                {
                    vdev.OnFrame += frame =>
                    {
                        frame.Freeze();
                        LastFrame = frame;
                    };
                    dev.OnError += error => LastError = error;
                }
                mdev  = dev as IDeviceWithModes;
                sdev  = dev as IDeviceWithSliderModes;
                ptdev = dev as IDeviceWithPanTilt;
            }
Exemplo n.º 2
0
        private void Window_SourceInitialized(object sender, EventArgs e)
        {
            Handle = new WindowInteropHelper(this).Handle;

            btnChangeMode.ContextMenu.Closed += (_, __) =>
            {
                isBlockingClose = false;
            };

            dev.OnError += msg =>
            {
                Video.Dispatcher.Invoke(DispatcherPriority.Input, (ThreadStart)(() =>
                {
                    alerting = true;
                    txtAlert.Text = "Error: " + msg;
                    gAlert.Visibility = Visibility.Visible;
                }));
            };

            var authdev = dev as IDeviceWithAuthentication;

            if (authdev != null)
            {
                authdev.OnCredentialsRequired += user =>
                {
                    DavuxLib2.Controls.CredentialsDialog cd = new DavuxLib2.Controls.CredentialsDialog(dev.Name);
                    cd.Caption  = "Connect to " + dev.Name;
                    cd.Message  = dev.Name + " requires a password.";
                    cd.Name     = user;
                    cd.Password = "";
                    Dispatcher.Invoke(DispatcherPriority.Input, (ThreadStart)(() =>
                    {
                        if (IsEnabled && cd.Show((System.Windows.Forms.IWin32Window) new Win(Handle)) == System.Windows.Forms.DialogResult.Cancel)
                        {
                            IsEnabled = false;
                            Close();
                        }
                    }));
                    return(new KeyValuePair <string, string>(cd.Name, cd.Password));
                };
            }

            // Note: make sure to call this before IVideo.OnStart
            mdev = dev as IDeviceWithModes;
            if (mdev != null)
            {
                PopulateModes();
                btnChangeMode.Visibility = Visibility.Visible;
            }

            ptzdev = dev as IDeviceWithPanTilt;

            if (ptzdev != null && ptzdev.PTSupported)
            {
                PTZ.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                PTZ.Visibility = System.Windows.Visibility.Hidden;
            }

            var smdev = dev as IDeviceWithSliderModes;

            if (smdev != null)
            {
                var sliders = smdev.GetSliderModes();

                foreach (var slider in sliders)
                {
                    var sp = new DockPanel();
                    sp.LastChildFill = true;

                    TextBlock tb = new TextBlock();
                    tb.Padding = new Thickness(4);
                    tb.Text    = slider.Key.Text;
                    DockPanel.SetDock(tb, Dock.Left);
                    sp.Children.Add(tb);

                    Slider sl = new Slider();
                    sl.Tag             = slider.Key;
                    sl.Value           = slider.Value;
                    sl.PreviewMouseUp += (send, _) =>
                    {
                        var s = (send as Slider).Tag as ISlider;
                        (dev as IDeviceWithSliderModes).SetSliderMode(s, (int)(send as Slider).Value);
                    };
                    (dev as IDeviceWithSliderModes).SliderValueChanged += (isli, value) =>
                    {
                        Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() =>
                        {
                            foreach (var ch in sp.Children)
                            {
                                // also TextBlock controls
                                var sdr = ch as Slider;
                                if (sdr != null)
                                {
                                    var isdr = sdr.Tag as ISlider;
                                    if (isdr == isli)
                                    {
                                        sdr.Value = value;
                                    }
                                }
                            }
                        }));
                    };
                    sl.Maximum = slider.Key.Max;
                    sl.Minimum = slider.Key.Min;
                    sp.Children.Add(sl);

                    DockPanel p = new DockPanel();
                    p.LastChildFill = true;
                    DockPanel.SetDock(p, Dock.Bottom);
                    p.Children.Add(sp);
                    quality.Children.Insert(0, p);
                }
            }


            vdev = dev as IVideoDevice;
            if (vdev != null)
            {
                vdev.OnFrame += frame =>
                {
                    frame.Freeze();
                    Video.Dispatcher.Invoke(DispatcherPriority.Input, (ThreadStart)(() =>
                    {
                        try
                        {
                            Video.Source = frame;
                            watchdog = 0;
                            pgrLag.Value = 0;

                            frame_count++;
                            if (tick_count == 0)
                            {
                                tick_count = Environment.TickCount;
                            }
                            if (Environment.TickCount - tick_count > 1000)
                            {
                                // calculate fps
                                //Trace.WriteLine(dev.Name + " " + Math.Round((double)frame_count/(double)10,3) + "fps");
                                FPS.Text = frame_count + " fps";
                                alerting = false;
                                gAlert.Visibility = System.Windows.Visibility.Collapsed;

                                tick_count = Environment.TickCount;
                                frame_count = 0;
                            }
                        }
                        catch (Exception ex)
                        {
                            Trace.WriteLine("frame err " + ex);
                        }
                    }));
                };
                new Thread(() =>
                           vdev.StartVideo()).Start();

                StartWatchDog();

                System.Timers.Timer t = new System.Timers.Timer(100);
                t.Elapsed += (sx, ex) =>
                {
                    if (!lockedBar)
                    {
                        lockedBar = true;
                        Video.Dispatcher.Invoke(DispatcherPriority.Input, (ThreadStart)(() =>
                        {
                            try
                            {
                                if (pgrLag.Value + 1 < pgrLag.Maximum)
                                {
                                    pgrLag.Value += 1;
                                }
                            }
                            catch (Exception ex2)
                            {
                                Trace.WriteLine("pgerr " + ex2);
                            }
                            lockedBar = false;
                        }));
                    }
                };
                t.Start();
            }

            var decd = dev as IDeviceWithConfigurationDialog;

            if (decd != null)
            {
                btnConfigure.Visibility = Visibility.Visible;
                btnConfigure.Tag        = decd;
            }

            /*
             *
             *  qdec = decoder as IQualityControllable;
             *  if (qdec != null)
             *  {
             *      quality.Visibility = Visibility.Visible;
             *      qualitySlider.Value = (double)qdec.Quality;
             *      scaleSlider.Value = (double)qdec.Scale;
             *  }
             */
            Title = dev.Name;
            setButtonText();
        }