/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ // This sub-API supports the following functionalities: // // - Allocating capture devices. // - Connect a capture device with one or more channels. // - Start and stop capture devices. // - Getting capture device capabilities. #ifndef WEBRTC_VIDEO_ENGINE_MAIN_INTERFACE_VIE_CAPTURE_H_ #define WEBRTC_VIDEO_ENGINE_MAIN_INTERFACE_VIE_CAPTURE_H_ #include "common_types.h" namespace webrtc { class VideoEngine; class VideoCaptureModule; // This structure describes one set of the supported capabilities for a capture // device. struct CaptureCapability { unsigned int width; unsigned int height; unsigned int maxFPS; RawVideoType rawType; VideoCodecType codecType; unsigned int expectedCaptureDelay; bool interlaced; CaptureCapability() { width = 0; height = 0; maxFPS = 0; rawType = kVideoI420; codecType = kVideoCodecUnknown; expectedCaptureDelay = 0; interlaced = false; } }; // This enumerator tells the current brightness alarm mode. enum Brightness { Normal = 0, Bright = 1, Dark = 2 }; // This enumerator describes the capture alarm mode. enum CaptureAlarm { AlarmRaised = 0, AlarmCleared = 1 }; enum RotateCapturedFrame { RotateCapturedFrame_0 = 0, RotateCapturedFrame_90 = 90, RotateCapturedFrame_180 = 180, RotateCapturedFrame_270 = 270 }; // This class declares an abstract interface to be used when using an external // capture device. The user implemented derived class is registered using // AllocateExternalCaptureDevice and is released using ReleaseCaptureDevice. class WEBRTC_DLLEXPORT ViEExternalCapture { public: ViEExternalCapture() {} virtual ~ViEExternalCapture() {} // This method is called by the user to deliver a new captured frame to // VideoEngine. virtual int IncomingFrame(unsigned char* videoFrame, unsigned int videoFrameLength, unsigned short width, unsigned short height, RawVideoType videoType, unsigned long long captureTime = 0) = 0; }; // ---------------------------------------------------------------------------- // ViECaptureObserver // ---------------------------------------------------------------------------- // This class declares an abstract interface for a user defined observer. It is // up to the VideoEngine user to implement a derived class which implements the // observer class. The observer is registered using RegisterObserver() and // deregistered using DeregisterObserver(). class WEBRTC_DLLEXPORT ViECaptureObserver { public: // This method is called if a bright or dark captured image is detected. virtual void BrightnessAlarm(const int captureId, const Brightness brightness) = 0; // This method is called periodically telling the capture device frame rate. virtual void CapturedFrameRate(const int captureId, const unsigned char frameRate) = 0; // This method is called if the capture device stops delivering images to // VideoEngine. virtual void NoPictureAlarm(const int captureId, const CaptureAlarm alarm) = 0; protected: virtual ~ViECaptureObserver() { } }; // ---------------------------------------------------------------------------- // ViECapture // ---------------------------------------------------------------------------- class WEBRTC_DLLEXPORT ViECapture { public: // Factory for the ViECapture subā€API and increases an internal reference // counter if successful. Returns NULL if the API is not supported or if // construction fails. static ViECapture* GetInterface(VideoEngine* videoEngine); // Releases the ViECapture sub-API and decreases an internal reference // counter. // Returns the new reference count. This value should be zero // for all sub-API:s before the VideoEngine object can be safely deleted. virtual int Release() = 0; // Gets the number of available capture devices. virtual int NumberOfCaptureDevices() = 0; // Gets the name and unique id of a capture device. virtual int GetCaptureDevice(unsigned int listNumber, char* deviceNameUTF8, const unsigned int deviceNameUTF8Length, char* uniqueIdUTF8, const unsigned int uniqueIdUTF8Length) = 0; // Allocates a capture device to be used in VideoEngine. virtual int AllocateCaptureDevice(const char* uniqueIdUTF8, const unsigned int uniqueIdUTF8Length, int& captureId) = 0; // Registers an external capture device to be used in VideoEngine virtual int AllocateExternalCaptureDevice( int& captureId, ViEExternalCapture *&externalCapture) = 0; // Use capture device using external capture module. virtual int AllocateCaptureDevice(VideoCaptureModule& captureModule, int& captureId) = 0; // Releases a capture device and makes it available for other applications. virtual int ReleaseCaptureDevice(const int captureId) = 0; // This function connects a capture device with a channel. Multiple channels // can be connected to the same capture device. virtual int ConnectCaptureDevice(const int captureId, const int videoChannel) = 0; // Disconnects a capture device as input for a specified channel. virtual int DisconnectCaptureDevice(const int videoChannel) = 0; // Makes a capture device start capturing video frames. virtual int StartCapture(const int captureId, const CaptureCapability captureCapability = CaptureCapability()) = 0; // Stops a started capture device from capturing video frames. virtual int StopCapture(const int captureId) = 0; // Rotates captured frames before encoding and sending. // Used on mobile devices with rotates cameras. virtual int SetRotateCapturedFrames(const int captureId, const RotateCapturedFrame rotation) = 0; // This function sets the expected delay from when a video frame is captured // to when that frame is delivered to VideoEngine. virtual int SetCaptureDelay(const int captureId, const unsigned int captureDelayMs) = 0; // Returns the number of sets of capture capabilities the capture device // supports. virtual int NumberOfCapabilities(const char* uniqueIdUTF8, const unsigned int uniqueIdUTF8Length) = 0; // Gets a set of capture capabilities for a specified capture device. virtual int GetCaptureCapability(const char* uniqueIdUTF8, const unsigned int uniqueIdUTF8Length, const unsigned int capabilityNumber, CaptureCapability& capability) = 0; // Displays the capture device property dialog box for the specified capture // device. Windows only. virtual int ShowCaptureSettingsDialogBox( const char* uniqueIdUTF8, const unsigned int uniqueIdUTF8Length, const char* dialogTitle, void* parentWindow = NULL, const unsigned int x = 200, const unsigned int y = 200) = 0; // Gets the clockwise angle the frames from the camera must be rotated in // order to display the frames correctly if the display is rotated in its // natural orientation. virtual int GetOrientation(const char* uniqueIdUTF8, RotateCapturedFrame &orientation) = 0; // Enables brightness alarm detection and the brightness alarm callback. virtual int EnableBrightnessAlarm(const int captureId, const bool enable) = 0; // Registers an instance of a user implementation of the ViECaptureObserver. virtual int RegisterObserver(const int captureId, ViECaptureObserver& observer) = 0; // Removes an already registered instance of ViECaptureObserver. virtual int DeregisterObserver(const int captureId) = 0; protected: ViECapture() {}; virtual ~ViECapture() {}; }; } // namespace webrtc #endif // WEBRTC_VIDEO_ENGINE_MAIN_INTERFACE_VIE_CAPTURE_H_