// Collect supported video and snapshot sizes private void EnumeratedSupportedFrameSizes( VideoCaptureDevice videoDevice ) { this.Cursor = Cursors.WaitCursor; videoResolutionsCombo.Items.Clear( ); snapshotResolutionsCombo.Items.Clear( ); videoInputsCombo.Items.Clear( ); videoCapabilitiesDictionary.Clear( ); snapshotCapabilitiesDictionary.Clear( ); try { // collect video capabilities VideoCapabilities[] videoCapabilities = videoDevice.VideoCapabilities; int videoResolutionIndex = 0; foreach ( VideoCapabilities capabilty in videoCapabilities ) { string item = string.Format( "{0} x {1}", capabilty.FrameSize.Width, capabilty.FrameSize.Height ); if ( !videoResolutionsCombo.Items.Contains( item ) ) { if ( captureSize == capabilty.FrameSize ) { videoResolutionIndex = videoResolutionsCombo.Items.Count; } videoResolutionsCombo.Items.Add( item ); } if ( !videoCapabilitiesDictionary.ContainsKey( item ) ) { videoCapabilitiesDictionary.Add( item, capabilty ); } } if ( videoCapabilities.Length == 0 ) { videoResolutionsCombo.Items.Add( "Не поддерживается" ); } videoResolutionsCombo.SelectedIndex = videoResolutionIndex; if ( configureSnapshots ) { // collect snapshot capabilities VideoCapabilities[] snapshotCapabilities = videoDevice.SnapshotCapabilities; int snapshotResolutionIndex = 0; foreach ( VideoCapabilities capabilty in snapshotCapabilities ) { string item = string.Format( "{0} x {1}", capabilty.FrameSize.Width, capabilty.FrameSize.Height ); if ( !snapshotResolutionsCombo.Items.Contains( item ) ) { if ( snapshotSize == capabilty.FrameSize ) { snapshotResolutionIndex = snapshotResolutionsCombo.Items.Count; } snapshotResolutionsCombo.Items.Add( item ); snapshotCapabilitiesDictionary.Add( item, capabilty ); } } if ( snapshotCapabilities.Length == 0 ) { snapshotResolutionsCombo.Items.Add( "Не поддерживается" ); } snapshotResolutionsCombo.SelectedIndex = snapshotResolutionIndex; } // get video inputs availableVideoInputs = videoDevice.AvailableCrossbarVideoInputs; int videoInputIndex = 0; foreach ( VideoInput input in availableVideoInputs ) { string item = string.Format( "{0}: {1}", input.Index, input.Type ); if ( ( input.Index == videoInput.Index ) && ( input.Type == videoInput.Type ) ) { videoInputIndex = videoInputsCombo.Items.Count; } videoInputsCombo.Items.Add( item ); } if ( availableVideoInputs.Length == 0 ) { videoInputsCombo.Items.Add( "Не поддерживается" ); } videoInputsCombo.SelectedIndex = videoInputIndex; } finally { this.Cursor = Cursors.Default; } }
// Constructor public Grabber( VideoCaptureDevice parent, bool snapshotMode ) { this.parent = parent; this.snapshotMode = snapshotMode; }
// New video device is selected private void devicesCombo_SelectedIndexChanged( object sender, EventArgs e ) { if ( videoDevices.Count != 0 ) { videoDevice = new VideoCaptureDevice( videoDevices[devicesCombo.SelectedIndex].MonikerString ); EnumeratedSupportedFrameSizes( videoDevice ); } }