Note: We no longer publish the latest version of our code here. We primarily use a kumc-bmi github organization. The heron ETL repository, in particular, is not public. Peers in the informatics community should see MultiSiteDev for details on requesting access.

source: webrtc/webrtc/modules/video_capture/video_capture_impl.h @ 0:4bda6873e34c

pub_scrub_3792 tip
Last change on this file since 0:4bda6873e34c was 0:4bda6873e34c, checked in by Michael Prittie <mprittie@…>, 6 years ago

Scrubbed password for publication.

File size: 5.8 KB
Line 
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_VIDEO_CAPTURE_IMPL_H_
12#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_VIDEO_CAPTURE_IMPL_H_
13
14/*
15 * video_capture_impl.h
16 */
17
18#include "webrtc/common_video/interface/i420_video_frame.h"
19#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
20#include "webrtc/modules/video_capture/include/video_capture.h"
21#include "webrtc/modules/video_capture/video_capture_config.h"
22#include "webrtc/system_wrappers/interface/tick_util.h"
23
24namespace webrtc
25{
26class CriticalSectionWrapper;
27
28namespace videocapturemodule {
29// Class definitions
30class VideoCaptureImpl: public VideoCaptureModule, public VideoCaptureExternal
31{
32public:
33
34    /*
35     *   Create a video capture module object
36     *
37     *   id              - unique identifier of this video capture module object
38     *   deviceUniqueIdUTF8 -  name of the device. Available names can be found by using GetDeviceName
39     */
40    static VideoCaptureModule* Create(const int32_t id,
41                                      const char* deviceUniqueIdUTF8);
42
43    /*
44     *   Create a video capture module object used for external capture.
45     *
46     *   id              - unique identifier of this video capture module object
47     *   externalCapture - [out] interface to call when a new frame is captured.
48     */
49    static VideoCaptureModule* Create(const int32_t id,
50                                      VideoCaptureExternal*& externalCapture);
51
52    static DeviceInfo* CreateDeviceInfo(const int32_t id);
53
54    // Helpers for converting between (integral) degrees and
55    // VideoCaptureRotation values.  Return 0 on success.
56    static int32_t RotationFromDegrees(int degrees,
57                                       VideoCaptureRotation* rotation);
58    static int32_t RotationInDegrees(VideoCaptureRotation rotation,
59                                     int* degrees);
60
61    // Implements Module declared functions.
62    virtual int32_t ChangeUniqueId(const int32_t id);
63
64    //Call backs
65    virtual int32_t RegisterCaptureDataCallback(VideoCaptureDataCallback& dataCallback);
66    virtual int32_t DeRegisterCaptureDataCallback();
67    virtual int32_t RegisterCaptureCallback(VideoCaptureFeedBack& callBack);
68    virtual int32_t DeRegisterCaptureCallback();
69
70    virtual int32_t SetCaptureDelay(int32_t delayMS);
71    virtual int32_t CaptureDelay();
72    virtual int32_t SetCaptureRotation(VideoCaptureRotation rotation);
73
74    virtual int32_t EnableFrameRateCallback(const bool enable);
75    virtual int32_t EnableNoPictureAlarm(const bool enable);
76
77    virtual const char* CurrentDeviceName() const;
78
79    // Module handling
80    virtual int32_t TimeUntilNextProcess();
81    virtual int32_t Process();
82
83    // Implement VideoCaptureExternal
84    // |capture_time| must be specified in the NTP time format in milliseconds.
85    virtual int32_t IncomingFrame(uint8_t* videoFrame,
86                                  int32_t videoFrameLength,
87                                  const VideoCaptureCapability& frameInfo,
88                                  int64_t captureTime = 0);
89
90    virtual int32_t IncomingI420VideoFrame(I420VideoFrame* video_frame,
91                                           int64_t captureTime = 0);
92
93    // Platform dependent
94    virtual int32_t StartCapture(const VideoCaptureCapability& capability)
95    {
96        _requestedCapability = capability;
97        return -1;
98    }
99    virtual int32_t StopCapture()   { return -1; }
100    virtual bool CaptureStarted() {return false; }
101    virtual int32_t CaptureSettings(VideoCaptureCapability& /*settings*/)
102    { return -1; }
103    VideoCaptureEncodeInterface* GetEncodeInterface(const VideoCodec& /*codec*/)
104    { return NULL; }
105
106protected:
107    VideoCaptureImpl(const int32_t id);
108    virtual ~VideoCaptureImpl();
109    int32_t DeliverCapturedFrame(I420VideoFrame& captureFrame,
110                                 int64_t capture_time);
111
112    int32_t _id; // Module ID
113    char* _deviceUniqueId; // current Device unique name;
114    CriticalSectionWrapper& _apiCs;
115    int32_t _captureDelay; // Current capture delay. May be changed of platform dependent parts.
116    VideoCaptureCapability _requestedCapability; // Should be set by platform dependent code in StartCapture.
117private:
118    void UpdateFrameCount();
119    uint32_t CalculateFrameRate(const TickTime& now);
120
121    CriticalSectionWrapper& _callBackCs;
122
123    TickTime _lastProcessTime; // last time the module process function was called.
124    TickTime _lastFrameRateCallbackTime; // last time the frame rate callback function was called.
125    bool _frameRateCallBack; // true if EnableFrameRateCallback
126    bool _noPictureAlarmCallBack; //true if EnableNoPictureAlarm
127    VideoCaptureAlarm _captureAlarm; // current value of the noPictureAlarm
128
129    int32_t _setCaptureDelay; // The currently used capture delay
130    VideoCaptureDataCallback* _dataCallBack;
131    VideoCaptureFeedBack* _captureCallBack;
132
133    TickTime _lastProcessFrameCount;
134    TickTime _incomingFrameTimes[kFrameRateCountHistorySize];// timestamp for local captured frames
135    VideoRotationMode _rotateFrame; //Set if the frame should be rotated by the capture module.
136
137    I420VideoFrame _captureFrame;
138    VideoFrame _capture_encoded_frame;
139
140    // Used to make sure incoming timestamp is increasing for every frame.
141    int64_t last_capture_time_;
142
143    // Delta used for translating between NTP and internal timestamps.
144    const int64_t delta_ntp_internal_ms_;
145};
146}  // namespace videocapturemodule
147}  // namespace webrtc
148#endif  // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_VIDEO_CAPTURE_IMPL_H_
Note: See TracBrowser for help on using the repository browser.