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