protected ArrayList findAudioSources(ICaptureGraphBuilder2 graphBuilder, IBaseFilter deviceFilter) { ArrayList sources = new ArrayList(); IAMAudioInputMixer audioInputMixer = deviceFilter as IAMAudioInputMixer; if ( audioInputMixer != null ) { // Get a pin enumerator off the filter IEnumPins pinEnum; int hr = deviceFilter.EnumPins( out pinEnum ); pinEnum.Reset(); if( (hr == 0) && (pinEnum != null) ) { // Loop through each pin IPin[] pins = new IPin[1]; int f; do { // Get the next pin hr = pinEnum.Next( 1, pins, out f ); if( (hr == 0) && (pins[0] != null) ) { // Is this an input pin? PinDirection dir = PinDirection.Output; hr = pins[0].QueryDirection( out dir ); if( (hr == 0) && (dir == (PinDirection.Input)) ) { // Add the input pin to the sources list AudioSource source = new AudioSource( pins[0] ); sources.Add( source ); } pins[0] = null; } } while( hr == 0 ); Marshal.ReleaseComObject( pinEnum ); pinEnum = null; } } // If there is only one source, don't return it // because there is nothing for the user to choose. // (Hopefully that single source is already enabled). if ( sources.Count == 1 ) sources.Clear(); return( sources ); }
protected ArrayList findAudioSources(ICaptureGraphBuilder2 graphBuilder, IBaseFilter deviceFilter) { ArrayList list = new ArrayList(); if (deviceFilter is IAMAudioInputMixer) { IEnumPins pins; int num = deviceFilter.EnumPins(out pins); pins.Reset(); if ((num == 0) && (pins != null)) { IPin[] ppPins = new IPin[1]; do { int num2; num = pins.Next(1, ppPins, out num2); if ((num == 0) && (ppPins[0] != null)) { PinDirection output = PinDirection.Output; num = ppPins[0].QueryDirection(out output); if ((num == 0) && (output == PinDirection.Input)) { AudioSource source = new AudioSource(ppPins[0]); list.Add(source); } ppPins[0] = null; } } while (num == 0); Marshal.ReleaseComObject(pins); pins = null; } } if (list.Count == 1) { list.Clear(); } return list; }