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