1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_DEVICE_INFO_IMPL_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_DEVICE_INFO_IMPL_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1479c884c86807f45d9629b75b75261e9bc239643efischman@webrtc.org#include <vector> 1552c5c708de6f5bcf9c2a58cece45013aa5efacd7pbos@webrtc.org 1687c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/include/video_capture.h" 1787c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/video_capture_delay.h" 1887c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace videocapturemodule 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass DeviceInfoImpl: public VideoCaptureModule::DeviceInfo 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 27f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org DeviceInfoImpl(const int32_t id); 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~DeviceInfoImpl(void); 29f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t NumberOfCapabilities(const char* deviceUniqueIdUTF8); 30f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t GetCapability( 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* deviceUniqueIdUTF8, 32f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const uint32_t deviceCapabilityNumber, 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureCapability& capability); 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t GetBestMatchedCapability( 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* deviceUniqueIdUTF8, 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const VideoCaptureCapability& requested, 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureCapability& resulting); 39f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t GetOrientation( 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* deviceUniqueIdUTF8, 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureRotation& orientation); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Initialize this object*/ 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 46f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t Init()=0; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Fills the member variable _captureCapabilities with capabilities for the given device name. 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 50f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t CreateCapabilityMap(const char* deviceUniqueIdUTF8)=0; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Returns the expected Capture delay*/ 53f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t GetExpectedCaptureDelay(const DelayValues delayValues[], 54f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const uint32_t sizeOfDelayValues, 55f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const char* productId, 56f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const uint32_t width, 57f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const uint32_t height); 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Data members 60f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _id; 6179c884c86807f45d9629b75b75261e9bc239643efischman@webrtc.org typedef std::vector<VideoCaptureCapability> VideoCaptureCapabilities; 6279c884c86807f45d9629b75b75261e9bc239643efischman@webrtc.org VideoCaptureCapabilities _captureCapabilities; 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RWLockWrapper& _apiLock; 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char* _lastUsedDeviceName; 65f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org uint32_t _lastUsedDeviceNameLength; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 673b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace videocapturemodule 683b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_DEVICE_INFO_IMPL_H_ 70