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)); } }
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]; }
/// <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); }