public static bool TryGetPort(this VideoPortsCollection collection, string name, out VideoPort port)
        {
            port = default(VideoPort);
            for (int index = 0; index < collection.Count; index++)
            {
                var item = collection[index];
                if (item.Name == name)
                {
                    port = item;
                    return true;
                }
            }

            return false;
        }
        public unsafe MmalCameraComponent() : base(MmalParameters.MmalComponentDefaultCamera)
        {
            Outputs.Add(new OutputPort((IntPtr)(&(*Ptr->Output[0])), this, Guid.NewGuid()));
            Outputs.Add(new VideoPort((IntPtr)(&(*Ptr->Output[1])), this, Guid.NewGuid()));
            Outputs.Add(new StillPort((IntPtr)(&(*Ptr->Output[2])), this, Guid.NewGuid()));

            CameraInfo = new MmalCameraInfoComponent();

            PreviewPort = Outputs[MmalCameraPreviewPort];
            VideoPort   = Outputs[MmalCameraVideoPort];
            StillPort   = Outputs[MmalCameraStillPort];

            PreviewPort.SetStereoMode(CameraConfig.StereoMode);
            VideoPort.SetStereoMode(CameraConfig.StereoMode);
            StillPort.SetStereoMode(CameraConfig.StereoMode);

            Control.SetParameter(MmalParametersCamera.MmalParameterCameraNum, 0);
        }
        void InitialiseVideo()
        {
            var currentWidth  = CameraConfig.Resolution.Width;
            var currentHeight = CameraConfig.Resolution.Height;

            if (currentWidth == 0 || currentWidth > CameraInfo.MaxWidth)
            {
                currentWidth = CameraInfo.MaxWidth;
            }

            if (currentHeight == 0 || currentHeight > CameraInfo.MaxHeight)
            {
                currentHeight = CameraInfo.MaxHeight;
            }

            var portConfig = new MmalPortConfig(
                CameraConfig.Encoding,
                CameraConfig.EncodingSubFormat,
                width: currentWidth,
                height: currentHeight,
                framerate: CameraConfig.Framerate,
                bufferNum: Math.Max(VideoPort.BufferNumRecommended, 3),
                bufferSize: Math.Max(VideoPort.BufferSizeRecommended, VideoPort.BufferSizeMin),
                crop: new Rectangle(0, 0, currentWidth, currentHeight));

            MmalLog.Logger.LogDebug("Commit video");

            VideoPort.Configure(portConfig, null, null);

            // Use Raspistill values.
            if (CameraConfig.ShutterSpeed > 6000000)
            {
                VideoPort.SetFramerateRange(new MmalRational(5, 1000), new MmalRational(166, 1000));
            }
            else if (CameraConfig.ShutterSpeed > 1000000)
            {
                VideoPort.SetFramerateRange(new MmalRational(167, 1000), new MmalRational(999, 1000));
            }
        }
Esempio n. 4
0
 public void ShutDown()
 {
     if (ControlPort != null)
     {
         ControlPort.Close();
         ControlPort = null;
     }
     if (PhotoPort != null)
     {
         PhotoPort.Close();
         PhotoPort = null;
     }
     if (VideoPort != null)
     {
         VideoPort.Close();
         VideoPort = null;
     }
     if (HeartPort != null)
     {
         HeartPort.Close();
         HeartPort = null;
     }
 }
 public VideoPortsCollection(VideoPort[] videoports)
 {
     _videoports = videoports ?? new VideoPort[0];
 }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public EasySDK(string ip, int port, string username, string password)
        {
            Ports.Clear();
            CHCNet.NET_DVR_Init();
            var deviceInfo = new CHCNet.NET_DVR_DEVICEINFO_V30();
            //登录设备 Login the device
            var uid = CHCNet.NET_DVR_Login_V30(ip, port, username, password, ref deviceInfo);

            if (uid < 0)
            {
                LogForError($"登录失败,输出错误号,NET_DVR_Login_V30 failed, error code= {CHCNet.NET_DVR_GetLastError()}");
                return;
            }
            var m_struIpParaCfgV40 = new CHCNet.NET_DVR_IPPARACFG_V40();
            var ptrIpParaCfgV40    = Marshal.AllocHGlobal((Int32)Marshal.SizeOf(m_struIpParaCfgV40));

            Marshal.StructureToPtr(m_struIpParaCfgV40, ptrIpParaCfgV40, false);
            uint dwReturn = 0;
            int  iGroupNo = 0; //该Demo仅获取第一组64个通道,如果设备IP通道大于64路,需要按组号0~i多次调用NET_DVR_GET_IPPARACFG_V40获取

            if (!CHCNet.NET_DVR_GetDVRConfig(uid, CHCNet.NET_DVR_GET_IPPARACFG_V40, iGroupNo, ptrIpParaCfgV40, (uint)Marshal.SizeOf(m_struIpParaCfgV40), ref dwReturn))
            {
                LogForError($"获取IP资源配置信息失败,输出错误号,NET_DVR_GET_IPPARACFG_V40 failed, error code= {CHCNet.NET_DVR_GetLastError()}");
                Console.WriteLine($"获取IP资源配置信息失败,输出错误号,NET_DVR_GET_IPPARACFG_V40 failed, error code= {CHCNet.NET_DVR_GetLastError()}");
                Marshal.FreeHGlobal(ptrIpParaCfgV40);
                return;
            }
            m_struIpParaCfgV40 = (CHCNet.NET_DVR_IPPARACFG_V40)Marshal.PtrToStructure(ptrIpParaCfgV40, typeof(CHCNet.NET_DVR_IPPARACFG_V40));
            Marshal.FreeHGlobal(ptrIpParaCfgV40);
            //"获取IP资源配置信息成功!".LogForInfomation();

            uint iDChanNum = (uint)deviceInfo.byIPChanNum + 256 * (uint)deviceInfo.byHighDChanNum;

            if (iDChanNum > 64)
            {
                iDChanNum = 64;                 //如果设备IP通道大于64路,按只取64
            }
            for (int i = 0; i < iDChanNum; i++)
            {
                var dwSize    = (uint)Marshal.SizeOf(m_struIpParaCfgV40.struStreamMode[i].uGetStream);
                var videoport = new VideoPort()
                {
                    Channal = (int)(m_struIpParaCfgV40.dwStartDChan + i)
                };
                var isenable = false;
                var databuff = IntPtr.Zero;
                databuff = Marshal.AllocHGlobal((Int32)dwSize);
                Marshal.StructureToPtr(m_struIpParaCfgV40.struStreamMode[i].uGetStream, databuff, false);
                switch (m_struIpParaCfgV40.struStreamMode[i].byGetStreamType)
                {
                //目前NVR仅支持直接从设备取流 NVR supports only the mode: get stream from device directly
                case 0:
                {
                    var info = (CHCNet.NET_DVR_IPCHANINFO)Marshal.PtrToStructure(databuff, typeof(CHCNet.NET_DVR_IPCHANINFO));
                    //videoport.DevID = info.byIPID + info.byIPIDHigh * 256 - iGroupNo * 64 - 1;
                    isenable = info.byEnable == 1;
                    break;
                }

                case 4:
                {
                    var info = (CHCNet.NET_DVR_PU_STREAM_URL)Marshal.PtrToStructure(databuff, typeof(CHCNet.NET_DVR_PU_STREAM_URL));
                    //videoport.DevID = info.wIPID - iGroupNo * 64 - 1;
                    isenable = info.byEnable == 1;
                    break;
                }

                case 6:
                {
                    var info = (CHCNet.NET_DVR_IPCHANINFO_V40)Marshal.PtrToStructure(databuff, typeof(CHCNet.NET_DVR_IPCHANINFO_V40));
                    //videoport.DevID = info.wIPID - iGroupNo * 64 - 1;
                    isenable = info.byEnable == 1;
                    break;
                }

                default:
                    break;
                }
                Marshal.FreeHGlobal(databuff);
                if (!isenable)
                {
                    continue;
                }
                Ports.Add(videoport);
                var run      = true;
                var filename = $"HCNVR{(run ? "_" : "")}{(run ? Process.GetCurrentProcess().Id.ToString() : "")}_{Ports.Count}";
                int portid   = Ports.Count - 1;
                Task.Factory.StartNew(() =>
                {
                    //创建或者打开共享内存 32MB
                    var mmf = MemoryMappedFile.CreateNew(filename, 32 * 1024 * 1024, MemoryMappedFileAccess.ReadWrite);

                    //通过MemoryMappedFile的CreateViewAccssor方法获得共享内存的访问器
                    var viewAccessor = mmf.CreateViewAccessor(0, 32 * 1024 * 1024);
                    //循环写入,使在这个进程中可以向共享内存中写入不同的字符串值
                    viewAccessor.Write(0, 0);
                    viewAccessor.Write(1, 0);
                    videoport.Process           = new Process();
                    videoport.Process.StartInfo = new ProcessStartInfo($"{LibPath}/CHCTCPSender.exe", $"{ip} {port.ToString()} {username} {password} {portid} {filename}")
                    {
                        CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden
                    };

                    if (run)
                    {
                        videoport.Process.Start();
                    }
                    while ((!run) || !videoport.Process.HasExited)
                    {
                        Thread.Sleep(10);
                        var index1 = viewAccessor.ReadByte(0);
                        var index2 = viewAccessor.ReadByte(1);
                        if (index1 == index2)
                        {
                            continue;
                        }
                        var imglen = viewAccessor.ReadUInt32(2);
                        if (imglen == 0)
                        {
                            continue;
                        }
                        var buff = new byte[imglen];
                        viewAccessor.ReadArray <byte>(6, buff, 0, buff.Length);
                        viewAccessor.Write(0, index2);
                        lock (videoport) videoport.Frame = buff;
                    }
                    videoport.Process.Dispose();
                    viewAccessor.Dispose();
                    mmf.Dispose();
                });
                //*/
            }//EndFor
            CHCNet.NET_DVR_Logout(uid);
        }
        public int AddMonitorToDb(MonitorVm bind)
        {
            var speakers         = Mapper.Map <SpeakersVm, Speakers>(bind.Speakers);
            var camera           = Mapper.Map <CameraVm, Camera>(bind.Camera);
            var monitor          = Mapper.Map <MonitorVm, Monitor>(bind);
            var placeholderImage = @"/placeholder.jpg";

            foreach (var port in bind.VideoPorts)
            {
                var type = VideoPortEnum.VGA;
                Enum.TryParse(port.Type, out type);
                var videoPort = new VideoPort()
                {
                    Type = type,
                    Num  = port.Num,
                };
                monitor.VideoPorts.Add(videoPort);
            }

            foreach (var usbPort in bind.USBPorts)
            {
                var type = USBPortEnum.usb_2_0;
                Enum.TryParse(usbPort.Type, out type);
                var USBPort = new USBPort()
                {
                    Type = type,
                    Num  = usbPort.Num,
                };
                monitor.USBPorts.Add(USBPort);
            }

            foreach (var entry in bind.PanelColors)
            {
                monitor.PanelColors.Add(new PanelColor()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.CertificatesStandartsLicenses)
            {
                monitor.CertificatesStandartsLicenses.Add(new CertificateStandartLicense()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.Features)
            {
                monitor.Features.Add(new Feature()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.UnhandledDisplaySpecificationProperties)
            {
                monitor.UnhandledDisplaySpecificationProperties.Add(new UnhandledDIsplaySpecificationProperty()
                {
                    Value = entry
                });
            }

            monitor.Speakers  = speakers;
            monitor.Camera    = camera;
            monitor.Brand     = context.Brands.FirstOrDefault(x => x.Id == bind.BrandId);
            monitor.Thumbnail = placeholderImage;
            context.Monitors.Add(monitor);
            context.SaveChanges();

            return(monitor.Id);
        }
        public int EditMonitor(MonitorVm bind)
        {
            var monitor = context.Monitors.Find(bind.Id);

            if (monitor.Brand.Id != bind.BrandId)
            {
                monitor.Brand = context.Brands.FirstOrDefault(x => x.Id == bind.BrandId);
            }

            monitor = Mapper.Map <MonitorVm, Monitor>(bind, monitor);

            var obsoleteVideoPorts  = context.VideoPorts.Where(x => x.MonitorId == bind.Id).ToList();
            var obsoleteUSBPorts    = context.USBPorts.Where(x => x.MonitorId == bind.Id).ToList();
            var obsoletePanelColors = context.PanelColors.Where(x => x.MonitorId == bind.Id).ToList();
            var obsoleteFeatures    = context.Features.Where(x => x.MonitorId == bind.Id).ToList();
            var obsoleteCsls        = context.CertificatesStandartsLicenses.Where(x => x.MonitorId == bind.Id).ToList();
            var obsoleteUnhandled   = context.UnhandledDisplaySpecificationProperties.Where(x => x.MonitorId == bind.Id).ToList();

            foreach (var port in obsoleteVideoPorts)
            {
                context.VideoPorts.Remove(port);
            }
            foreach (var usbPort in obsoleteUSBPorts)
            {
                context.USBPorts.Remove(usbPort);
            }
            foreach (var panelColor in obsoletePanelColors)
            {
                context.PanelColors.Remove(panelColor);
            }
            foreach (var feature in obsoleteFeatures)
            {
                context.Features.Remove(feature);
            }
            foreach (var csl in obsoleteCsls)
            {
                context.CertificatesStandartsLicenses.Remove(csl);
            }
            foreach (var unhandled in obsoleteUnhandled)
            {
                context.UnhandledDisplaySpecificationProperties.Remove(unhandled);
            }


            foreach (var port in bind.VideoPorts)
            {
                var type = VideoPortEnum.VGA;
                Enum.TryParse(port.Type, out type);
                var videoPort = new VideoPort()
                {
                    Type = type,
                    Num  = port.Num,
                };
                monitor.VideoPorts.Add(videoPort);
            }

            foreach (var USBport in bind.USBPorts)
            {
                var type = USBPortEnum.usb_2_0;
                Enum.TryParse(USBport.Type, out type);
                var USBPort = new USBPort()
                {
                    Type = type,
                    Num  = USBport.Num,
                };
                monitor.USBPorts.Add(USBPort);
            }

            foreach (var entry in bind.PanelColors)
            {
                monitor.PanelColors.Add(new PanelColor()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.CertificatesStandartsLicenses)
            {
                monitor.CertificatesStandartsLicenses.Add(new CertificateStandartLicense()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.Features)
            {
                monitor.Features.Add(new Feature()
                {
                    Value = entry
                });
            }

            foreach (var entry in bind.UnhandledDisplaySpecificationProperties)
            {
                monitor.UnhandledDisplaySpecificationProperties.Add(new UnhandledDIsplaySpecificationProperty()
                {
                    Value = entry
                });
            }

            context.Entry(monitor).State = EntityState.Modified;
            context.SaveChanges();

            return(monitor.Id);
        }