29     case PhysConn_Video_Tuner:            
return "Video Tuner";
 
   30     case PhysConn_Video_Composite:        
return "Video Composite";
 
   31     case PhysConn_Video_SVideo:           
return "S-Video";
 
   32     case PhysConn_Video_RGB:              
return "Video RGB";
 
   33     case PhysConn_Video_YRYBY:            
return "Video YRYBY";
 
   34     case PhysConn_Video_SerialDigital:    
return "Video Serial Digital";
 
   35     case PhysConn_Video_ParallelDigital:  
return "Video Parallel Digital";
 
   36     case PhysConn_Video_SCSI:             
return "Video SCSI";
 
   37     case PhysConn_Video_AUX:              
return "Video AUX";
 
   38     case PhysConn_Video_1394:             
return "Video 1394";
 
   39     case PhysConn_Video_USB:              
return "Video USB";
 
   40     case PhysConn_Video_VideoDecoder:     
return "Video Decoder";
 
   41     case PhysConn_Video_VideoEncoder:     
return "Video Encoder";
 
   43     case PhysConn_Audio_Tuner:            
return "Audio Tuner";
 
   44     case PhysConn_Audio_Line:             
return "Audio Line";
 
   45     case PhysConn_Audio_Mic:              
return "Audio Microphone";
 
   46     case PhysConn_Audio_AESDigital:       
return "Audio AES/EBU Digital";
 
   47     case PhysConn_Audio_SPDIFDigital:     
return "Audio S/PDIF";
 
   48     case PhysConn_Audio_SCSI:             
return "Audio SCSI";
 
   49     case PhysConn_Audio_AUX:              
return "Audio AUX";
 
   50     case PhysConn_Audio_1394:             
return "Audio 1394";
 
   51     case PhysConn_Audio_USB:              
return "Audio USB";
 
   52     case PhysConn_Audio_AudioDecoder:     
return "Audio Decoder";
 
   53     default:                              
return "Unknown Crossbar Pin Type—Please report!";
 
   61     long count_output_pins, count_input_pins;
 
   69     av_log(avctx, log_level, 
"Crossbar Switching Information for %s:\n", device_name);
 
   70     hr = IAMCrossbar_get_PinCounts(cross_bar, &count_output_pins, &count_input_pins);
 
   76     for (i = 0; i < count_output_pins; i++)
 
   79         long related_pin, pin_type, route_to_pin;
 
   80         hr = IAMCrossbar_get_CrossbarPinInfo(cross_bar, 
FALSE, i, &related_pin, &pin_type);
 
   81         if (pin_type == PhysConn_Video_VideoDecoder) {
 
   83             if (video_input_pin != -1) {
 
   84                 av_log(avctx, log_level, 
"Routing video input from pin %d\n", video_input_pin);
 
   85                 hr = IAMCrossbar_Route(cross_bar, i, video_input_pin);
 
   87                     av_log(avctx, 
AV_LOG_ERROR, 
"Unable to route video input from pin %d\n", video_input_pin);
 
   91         } 
else if (pin_type == PhysConn_Audio_AudioDecoder) {
 
   92             if (audio_input_pin != -1) {
 
   93                 av_log(avctx, log_level, 
"Routing audio input from pin %d\n", audio_input_pin);
 
   94                 hr = IAMCrossbar_Route(cross_bar, i, audio_input_pin);
 
   96                     av_log(avctx, 
AV_LOG_ERROR, 
"Unable to route audio input from pin %d\n", audio_input_pin);
 
  104         hr = IAMCrossbar_get_IsRoutedTo(cross_bar, i, &route_to_pin);
 
  109         av_log(avctx, log_level, 
"  Crossbar Output pin %d: \"%s\" related output pin: %ld ", i, 
GetPhysicalPinName(pin_type), related_pin);
 
  110         av_log(avctx, log_level, 
"current input pin: %ld ", route_to_pin);
 
  111         av_log(avctx, log_level, 
"compatible input pins: ");
 
  113         for (j = 0; j < count_input_pins; j++)
 
  115             hr = IAMCrossbar_CanRoute(cross_bar, i, j);
 
  117                 av_log(avctx, log_level ,
"%d ", j);
 
  119         av_log(avctx, log_level, 
"\n");
 
  122     for (i = 0; i < count_input_pins; i++)
 
  124         long related_pin, pin_type;
 
  125         hr = IAMCrossbar_get_CrossbarPinInfo(cross_bar, 
TRUE, i, &related_pin, &pin_type);
 
  127             av_log(avctx, 
AV_LOG_ERROR, 
"unable to get crossbar info audio input from pin %d\n", i);
 
  131         av_log(avctx, log_level, 
"related input pin: %ld\n", related_pin);
 
  144     IAMCrossbar *cross_bar = 
NULL;
 
  145     IBaseFilter *cross_bar_base_filter = 
NULL;
 
  146     IAMTVTuner *tv_tuner_filter = 
NULL;
 
  147     IBaseFilter *tv_tuner_base_filter = 
NULL;
 
  148     IAMAudioInputMixer *tv_audio_filter = 
NULL;
 
  149     IBaseFilter *tv_audio_base_filter = 
NULL;
 
  152     hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, (
const GUID *) 
NULL,
 
  153             device_filter, &IID_IAMCrossbar, (
void**) &cross_bar);
 
  163         hr = IAMCrossbar_QueryInterface(cross_bar, &IID_IBaseFilter, (
void **) &cross_bar_base_filter);
 
  170         hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, 
NULL,
 
  171              device_filter, &IID_IAMTVTuner, (
void**) &tv_tuner_filter);
 
  173             hr = IAMCrossbar_QueryInterface(tv_tuner_filter, &IID_IBaseFilter, (
void **) &tv_tuner_base_filter);
 
  182         hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, 
NULL,
 
  183              device_filter, &IID_IAMTVAudio, (
void**) &tv_audio_filter);
 
  185             hr = IAMCrossbar_QueryInterface(tv_audio_filter, &IID_IBaseFilter, (
void **) &tv_audio_base_filter);
 
  200         IAMCrossbar_Release(cross_bar);
 
  201     if (cross_bar_base_filter)
 
  202         IBaseFilter_Release(cross_bar_base_filter);
 
  204         IAMTVTuner_Release(tv_tuner_filter);
 
  205     if (tv_tuner_base_filter)
 
  206         IBaseFilter_Release(tv_tuner_base_filter);
 
void dshow_show_filter_properties(IBaseFilter *device_filter, AVFormatContext *avctx)
Pops up a user dialog allowing them to adjust properties for the given filter, if possible...
#define AV_LOG_WARNING
Something somehow does not look correct. 
int show_analog_tv_tuner_audio_dialog
int show_audio_crossbar_connection_dialog
IBaseFilter * device_filter[2]
static av_cold int end(AVCodecContext *avctx)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
HRESULT dshow_try_setup_crossbar_options(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, enum dshowDeviceType devtype, AVFormatContext *avctx)
Given a fully constructed graph, check if there is a cross bar filter, and configure its pins if so...
#define AV_LOG_INFO
Standard information. 
int crossbar_audio_input_pin_number
static HRESULT setup_crossbar_options(IAMCrossbar *cross_bar, enum dshowDeviceType devtype, AVFormatContext *avctx)
int crossbar_video_input_pin_number
void * priv_data
Format private data. 
int show_video_crossbar_connection_dialog
static const char * GetPhysicalPinName(long pin_type)
int show_analog_tv_tuner_dialog