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 DSDEVICEDESCRIPTOR_H_
00026 #define DSDEVICEDESCRIPTOR_H_
00027
00028 #include <iostream>
00029 #include <string>
00030 #include <DShow.h>
00031
00032 #include "DeviceDescriptor.h"
00033 #include "avcap-export.h"
00034
00035 class IBaseFilter;
00036
00037 namespace avcap
00038 {
00039 class CaptureDevice;
00040 class DS_Device;
00041
00043
00044 class AVCAP_Export DS_DeviceDescriptor : public DeviceDescriptor
00045 {
00046 public:
00047
00048
00049 unsigned long mRegister;
00050
00051 private:
00052 std::string mName;
00053 std::string mCard;
00054 std::string mInfo;
00055
00056 int mCapabilities;
00057 DEV_HANDLE_T mHandle;
00058 bool mValid;
00059 bool mIsOpen;
00060 DS_Device* mDevice;
00061
00062 public:
00063 DS_DeviceDescriptor(const std::string &card);
00064
00065 virtual ~DS_DeviceDescriptor();
00066
00067 virtual CaptureDevice* getDevice();
00068
00069 int open();
00070
00071 int close();
00072
00073 virtual inline const std::string& getName() const
00074 { return mName; }
00075
00076
00077 inline const DEV_HANDLE_T getHandle() const
00078 { return mHandle; }
00079
00080
00081 inline DEV_HANDLE_T getHandle()
00082 { return mHandle; }
00083
00084 bool isAVDev() const;
00085
00086 bool isVideoCaptureDev() const;
00087
00088 bool isVBIDev() const;
00089
00090 bool isTuner() const;
00091
00092 bool isAudioDev() const;
00093
00094 bool isRadioDev() const;
00095
00096 bool isOverlayDev() const;
00097
00099
00100 bool isVfWDevice() const;
00101
00102 private:
00103 bool queryCapabilities();
00104
00105 void findDevice(std::string &UniqueDeviceID, IBaseFilter **CaptureFilter,
00106 std::string &DeviceName, std::string &DeviceInfo,
00107 bool *IsVideoDevice=NULL, bool *IsAudioDevice=NULL);
00108
00109 bool createCaptureFilterGraph(std::string &UniqueDeviceID,
00110 IBaseFilter *CaptureFilter);
00111
00112 bool getInfosFromDevice(IBaseFilter *CaptureFilter, int *Capabilities,
00113 std::string &Card, std::string &Info);
00114
00115 bool findOverlaySupport(IBaseFilter *CaptureFilter, int *Capabilities);
00116
00117 bool findVBISupport(IBaseFilter *CaptureFilter, int *Capabilities);
00118
00119 bool findTunerRadioSupport(IBaseFilter *CaptureFilter, int *Capabilities);
00120
00121 bool isAudioOrVideoDevice(IBaseFilter *CaptureFilter, int *Capabilities);
00122
00123 HRESULT addToRot(IUnknown *pUnkGraph, DWORD *pdwRegister);
00124
00125 void removeFromRot(DWORD pdwRegister);
00126
00127 friend class DS_Device;
00128 };
00129 }
00130
00131 #endif // DSEVICEDESCRIPTOR_H_