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_VIDEO_CAPTURE_H_ 12 #define WEBRTC_MODULES_VIDEO_CAPTURE_VIDEO_CAPTURE_H_ 13 14 #include "webrtc/common_video/rotation.h" 15 #include "webrtc/modules/include/module.h" 16 #include "webrtc/modules/video_capture/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_VIDEO_CAPTURE_H_ 161