OLD | NEW |
| (Empty) |
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_INCLUDE_VIDEO_CAPTURE_H_ | |
12 #define WEBRTC_MODULES_VIDEO_CAPTURE_INCLUDE_VIDEO_CAPTURE_H_ | |
13 | |
14 #include "webrtc/common_video/rotation.h" | |
15 #include "webrtc/modules/include/module.h" | |
16 #include "webrtc/modules/video_capture/include/video_capture_defines.h" | |
17 | |
18 namespace webrtc { | |
19 | |
20 class VideoCaptureModule: public RefCountedModule { | |
21 public: | |
22 // Interface for receiving information about available camera devices. | |
23 class DeviceInfo { | |
24 public: | |
25 virtual uint32_t NumberOfDevices() = 0; | |
26 | |
27 // Returns the available capture devices. | |
28 // deviceNumber - Index of capture device. | |
29 // deviceNameUTF8 - Friendly name of the capture device. | |
30 // deviceUniqueIdUTF8 - Unique name of the capture device if it exist. | |
31 // Otherwise same as deviceNameUTF8. | |
32 // productUniqueIdUTF8 - Unique product id if it exist. | |
33 // Null terminated otherwise. | |
34 virtual int32_t GetDeviceName( | |
35 uint32_t deviceNumber, | |
36 char* deviceNameUTF8, | |
37 uint32_t deviceNameLength, | |
38 char* deviceUniqueIdUTF8, | |
39 uint32_t deviceUniqueIdUTF8Length, | |
40 char* productUniqueIdUTF8 = 0, | |
41 uint32_t productUniqueIdUTF8Length = 0) = 0; | |
42 | |
43 | |
44 // Returns the number of capabilities this device. | |
45 virtual int32_t NumberOfCapabilities( | |
46 const char* deviceUniqueIdUTF8) = 0; | |
47 | |
48 // Gets the capabilities of the named device. | |
49 virtual int32_t GetCapability( | |
50 const char* deviceUniqueIdUTF8, | |
51 const uint32_t deviceCapabilityNumber, | |
52 VideoCaptureCapability& capability) = 0; | |
53 | |
54 // Gets clockwise angle the captured frames should be rotated in order | |
55 // to be displayed correctly on a normally rotated display. | |
56 virtual int32_t GetOrientation(const char* deviceUniqueIdUTF8, | |
57 VideoRotation& orientation) = 0; | |
58 | |
59 // Gets the capability that best matches the requested width, height and | |
60 // frame rate. | |
61 // Returns the deviceCapabilityNumber on success. | |
62 virtual int32_t GetBestMatchedCapability( | |
63 const char* deviceUniqueIdUTF8, | |
64 const VideoCaptureCapability& requested, | |
65 VideoCaptureCapability& resulting) = 0; | |
66 | |
67 // Display OS /capture device specific settings dialog | |
68 virtual int32_t DisplayCaptureSettingsDialogBox( | |
69 const char* deviceUniqueIdUTF8, | |
70 const char* dialogTitleUTF8, | |
71 void* parentWindow, | |
72 uint32_t positionX, | |
73 uint32_t positionY) = 0; | |
74 | |
75 virtual ~DeviceInfo() {} | |
76 }; | |
77 | |
78 class VideoCaptureEncodeInterface { | |
79 public: | |
80 virtual int32_t ConfigureEncoder(const VideoCodec& codec, | |
81 uint32_t maxPayloadSize) = 0; | |
82 // Inform the encoder about the new target bit rate. | |
83 // - newBitRate : New target bit rate in Kbit/s. | |
84 // - frameRate : The target frame rate. | |
85 virtual int32_t SetRates(int32_t newBitRate, int32_t frameRate) = 0; | |
86 // Inform the encoder about the packet loss and the round-trip time. | |
87 // - packetLoss : Fraction lost | |
88 // (loss rate in percent = 100 * packetLoss / 255). | |
89 // - rtt : Round-trip time in milliseconds. | |
90 virtual int32_t SetChannelParameters(uint32_t packetLoss, int64_t rtt) = 0; | |
91 | |
92 // Encode the next frame as key frame. | |
93 virtual int32_t EncodeFrameType(const FrameType type) = 0; | |
94 protected: | |
95 virtual ~VideoCaptureEncodeInterface() { | |
96 } | |
97 }; | |
98 | |
99 // Register capture data callback | |
100 virtual void RegisterCaptureDataCallback( | |
101 VideoCaptureDataCallback& dataCallback) = 0; | |
102 | |
103 // Remove capture data callback | |
104 virtual void DeRegisterCaptureDataCallback() = 0; | |
105 | |
106 // Register capture callback. | |
107 virtual void RegisterCaptureCallback(VideoCaptureFeedBack& callBack) = 0; | |
108 | |
109 // Remove capture callback. | |
110 virtual void DeRegisterCaptureCallback() = 0; | |
111 | |
112 // Start capture device | |
113 virtual int32_t StartCapture( | |
114 const VideoCaptureCapability& capability) = 0; | |
115 | |
116 virtual int32_t StopCapture() = 0; | |
117 | |
118 // Returns the name of the device used by this module. | |
119 virtual const char* CurrentDeviceName() const = 0; | |
120 | |
121 // Returns true if the capture device is running | |
122 virtual bool CaptureStarted() = 0; | |
123 | |
124 // Gets the current configuration. | |
125 virtual int32_t CaptureSettings(VideoCaptureCapability& settings) = 0; | |
126 | |
127 virtual void SetCaptureDelay(int32_t delayMS) = 0; | |
128 | |
129 // Returns the current CaptureDelay. Only valid when the camera is running. | |
130 virtual int32_t CaptureDelay() = 0; | |
131 | |
132 // Set the rotation of the captured frames. | |
133 // If the rotation is set to the same as returned by | |
134 // DeviceInfo::GetOrientation the captured frames are | |
135 // displayed correctly if rendered. | |
136 virtual int32_t SetCaptureRotation(VideoRotation rotation) = 0; | |
137 | |
138 // Tells the capture module whether to apply the pending rotation. By default, | |
139 // the rotation is applied and the generated frame is up right. When set to | |
140 // false, generated frames will carry the rotation information from | |
141 // SetCaptureRotation. Return value indicates whether this operation succeeds. | |
142 virtual bool SetApplyRotation(bool enable) = 0; | |
143 | |
144 // Return whether the rotation is applied or left pending. | |
145 virtual bool GetApplyRotation() = 0; | |
146 | |
147 // Gets a pointer to an encode interface if the capture device supports the | |
148 // requested type and size. NULL otherwise. | |
149 virtual VideoCaptureEncodeInterface* GetEncodeInterface( | |
150 const VideoCodec& codec) = 0; | |
151 | |
152 virtual void EnableFrameRateCallback(const bool enable) = 0; | |
153 virtual void EnableNoPictureAlarm(const bool enable) = 0; | |
154 | |
155 protected: | |
156 virtual ~VideoCaptureModule() {}; | |
157 }; | |
158 | |
159 } // namespace webrtc | |
160 #endif // WEBRTC_MODULES_VIDEO_CAPTURE_INCLUDE_VIDEO_CAPTURE_H_ | |
OLD | NEW |