25 #ifndef INCLUDED_DirectShowHDKCameraFactory_h_GUID_383B0AE1_8BD2_4B9D_5176_ABEFEF534DBE 26 #define INCLUDED_DirectShowHDKCameraFactory_h_GUID_383B0AE1_8BD2_4B9D_5176_ABEFEF534DBE 44 inline void setPowerlineFrequencyTo50(IBaseFilter &filter) {
46 filter.QueryInterface(__uuidof(IKsPropertySet), AttachPtr(ksPropSet));
51 auto prop = KSPROPERTY{};
52 prop.Set = GUID{STATICGUIDOF(
53 PROPSETID_VIDCAP_VIDEOPROCAMP)};
55 prop.Id = KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY;
57 auto supportType = DWORD{0};
58 auto hr = ksPropSet->QuerySupported(prop.Set, prop.Id, &supportType);
59 if (SUCCEEDED(hr) && (supportType & KSPROPERTY_SUPPORT_SET)) {
64 static const long POWERLINE_DISABLED = 0;
65 static const long POWERLINE_50HZ = 1;
66 static const long POWERLINE_60HZ = 2;
68 auto propData = KSPROPERTY_VIDEOPROCAMP_S{};
69 propData.Property = prop;
70 propData.Property.Flags = KSPROPERTY_TYPE_SET;
72 propData.Value = POWERLINE_50HZ;
73 propData.Flags = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
75 hr = ksPropSet->Set(prop.Set, prop.Id, &propData,
sizeof(propData),
76 &propData,
sizeof(propData));
80 <<
"Tried but failed to put the camera in high gain mode..." 86 inline std::unique_ptr<directx_camera_server> getDirectShowHDKCamera() {
89 static const auto HDK_CAMERA_PATH_PREFIX =
90 "\\\\?\\usb#vid_0bda&pid_57e8&mi_00";
91 auto ret = std::unique_ptr<directx_camera_server>{
new directx_camera_server(
92 HDK_CAMERA_PATH_PREFIX, &setPowerlineFrequencyTo50)};
94 if (!ret->working()) {
101 #endif // INCLUDED_DirectShowHDKCameraFactory_h_GUID_383B0AE1_8BD2_4B9D_5176_ABEFEF534DBE
boost::intrusive_ptr< T > Ptr
Template alias for our desired COM smart pointer.
Definition: ComPtr.h:40