webrtc/modules/video_capture/main/source/Windows/device_info_windows.h

106 lines
3.7 KiB
C++

/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_DEVICE_INFO_WINDOWS_H_
#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_DEVICE_INFO_WINDOWS_H_
#include "../video_capture_impl.h"
#include "../device_info_impl.h"
#include <Dshow.h>
#include "map_wrapper.h"
// forward declarations
namespace webrtc
{
namespace videocapturemodule
{
struct VideoCaptureCapabilityWindows: public VideoCaptureCapability
{
WebRtc_UWord32 directShowCapabilityIndex;
bool supportFrameRateControl;
VideoCaptureCapabilityWindows()
{
directShowCapabilityIndex = 0;
supportFrameRateControl = false;
}
};
class DeviceInfoWindows: public DeviceInfoImpl
{
public:
DeviceInfoWindows(const WebRtc_Word32 id);
virtual ~DeviceInfoWindows();
WebRtc_Word32 Init();
virtual WebRtc_UWord32 NumberOfDevices();
/*
* Returns the available capture devices.
*/
virtual WebRtc_Word32
GetDeviceName(WebRtc_UWord32 deviceNumber,
WebRtc_UWord8* deviceNameUTF8,
WebRtc_UWord32 deviceNameLength,
WebRtc_UWord8* deviceUniqueIdUTF8,
WebRtc_UWord32 deviceUniqueIdUTF8Length,
WebRtc_UWord8* productUniqueIdUTF8,
WebRtc_UWord32 productUniqueIdUTF8Length);
/*
* Display OS /capture device specific settings dialog
*/
virtual WebRtc_Word32
DisplayCaptureSettingsDialogBox(
const WebRtc_UWord8* deviceUniqueIdUTF8,
const WebRtc_UWord8* dialogTitleUTF8,
void* parentWindow,
WebRtc_UWord32 positionX,
WebRtc_UWord32 positionY);
// Windows specific
/* Gets a capture device filter
The user of this API is responsible for releasing the filter when it not needed.
*/
IBaseFilter * GetDeviceFilter(const WebRtc_UWord8* deviceUniqueIdUTF8,
WebRtc_UWord8* productUniqueIdUTF8 = NULL,
WebRtc_UWord32 productUniqueIdUTF8Length = 0);
WebRtc_Word32
GetWindowsCapability(const WebRtc_Word32 capabilityIndex,
VideoCaptureCapabilityWindows& windowsCapability);
static void GetProductId(const WebRtc_UWord8* devicePath,
WebRtc_UWord8* productUniqueIdUTF8,
WebRtc_UWord32 productUniqueIdUTF8Length);
protected:
WebRtc_Word32 GetDeviceInfo(WebRtc_UWord32 deviceNumber,
WebRtc_UWord8* deviceNameUTF8,
WebRtc_UWord32 deviceNameLength,
WebRtc_UWord8* deviceUniqueIdUTF8,
WebRtc_UWord32 deviceUniqueIdUTF8Length,
WebRtc_UWord8* productUniqueIdUTF8,
WebRtc_UWord32 productUniqueIdUTF8Length);
virtual WebRtc_Word32
CreateCapabilityMap(const WebRtc_UWord8* deviceUniqueIdUTF8);
private:
ICreateDevEnum* _dsDevEnum;
IEnumMoniker* _dsMonikerDevEnum;
bool _CoUninitializeIsRequired;
};
} // namespace videocapturemodule
} // namespace webrtc
#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_DEVICE_INFO_WINDOWS_H_