Exemplo n.º 1
0
        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);
        }