00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef CROSSBAR_H_
00026 #define CROSSBAR_H_
00027
00028 #include <DShow.h>
00029
00030 #include "avcap-export.h"
00031
00032 namespace avcap
00033 {
00034 struct AVCAP_Export STConnector
00035 {
00036 std::string NameOfConnector;
00037 LONG PhysicalType;
00038 bool IsAudioConnector;
00039 bool IsVideoConnector;
00040 bool IsRouted;
00041
00042 IAMCrossbar *Crossbar;
00043 long PinIndexOfCrossbar;
00044 int AudioSet;
00045
00046
00047
00048
00049
00050
00051
00052 int PinIndex;
00053 };
00054
00055 struct AVCAP_Export STRouting
00056 {
00057 long OutputPinIndex;
00058 IPin *OutputPin;
00059 long RelatedInPinIndex;
00060 IPin *RelatedInputPin;
00061 IAMCrossbar *Crossbar;
00062 int CrossbarIndex;
00063 bool HasConnector;
00064 };
00065
00067
00085 class AVCAP_Export CCrossbar
00086 {
00087 public:
00088 CCrossbar(ICaptureGraphBuilder2 *CaptureGraphBuilder);
00089 ~CCrossbar(void);
00090
00095 int FindAllCrossbarsAndConnectors(IBaseFilter *StartFilter);
00096 std::list<STConnector*>& GetInputConnectorList();
00097
00100 bool GetCurrentVideoInput(STConnector *Connector);
00101
00104 bool GetCurrentAudioInput(STConnector *Connector);
00105
00108 bool SetInput(int PinIndex);
00109
00110 private:
00111 QzCComPtr<ICaptureGraphBuilder2> m_CaptureBuilder;
00112 std::list<IAMCrossbar*> m_CrossbarList;
00113 std::list<STRouting*> m_RoutingList;
00114 std::list<STConnector*> m_InputConnectorList;
00115
00116 HRESULT GetCrossbarIPinAtIndex(IAMCrossbar *pXbar, LONG PinIndex,
00117 BOOL IsInputPin, IPin ** ppPin);
00118 void StringFromPinType(std::string &PinName, long lType);
00119 void DeleteAllLists();
00120 };
00121 }
00122
00123 #endif // CROSSBAR_H_