public Camera GetCameraParameters(string cameraName) { var cameraDeviceInfoPtr = IntPtr.Zero; Camera camera = new Camera() { CameraParameters = new List <CameraParameter>() }; try { var cameraInfoByte = Marshal.SizeOf(typeof(VideoDeviceInfo)); cameraDeviceInfoPtr = Marshal.AllocHGlobal(cameraInfoByte); var result = MeetingAgent.GetCameraInfo(cameraName, cameraDeviceInfoPtr); var pointer = new IntPtr(cameraDeviceInfoPtr.ToInt64()); var cameraInfo = (VideoDeviceInfo)Marshal.PtrToStructure(pointer, typeof(VideoDeviceInfo)); camera.Name = cameraInfo.Name; for (int i = 0; i < cameraInfo.FormatCount; i++) { VideoFormat videoFormat = cameraInfo.Formats[i]; CameraParameter cameraParameter = new CameraParameter() { ColorSpace = videoFormat.ColorSpace.ToString(), Fps = new List <int>(), VideSizes = new List <Size>() }; for (int j = 0; j < videoFormat.sizeCount; j++) { VideoSize videoSize = videoFormat.VideoSizes[j]; cameraParameter.VideSizes.Add(new Size() { Width = videoSize.Width, Height = videoSize.Height }); } for (int k = 0; k < videoFormat.fpsCount; k++) { cameraParameter.Fps.Add(videoFormat.Fps[k]); } camera.CameraParameters.Add(cameraParameter); } } catch (Exception ex) { Log.Error($"GetCameraParameters({cameraName}) exception:{ex}"); } finally { if (cameraDeviceInfoPtr != IntPtr.Zero) { Marshal.FreeHGlobal(cameraDeviceInfoPtr); } } return(camera); }