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_LINUX_VIDEO_CAPTURE_LINUX_H_
12 #define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_
13 
14 #include "webrtc/base/platform_thread.h"
15 #include "webrtc/common_types.h"
16 #include "webrtc/modules/video_capture/video_capture_impl.h"
17 
18 namespace webrtc
19 {
20 class CriticalSectionWrapper;
21 namespace videocapturemodule
22 {
23 class VideoCaptureModuleV4L2: public VideoCaptureImpl
24 {
25 public:
26     VideoCaptureModuleV4L2(int32_t id);
27     virtual ~VideoCaptureModuleV4L2();
28     virtual int32_t Init(const char* deviceUniqueId);
29     virtual int32_t StartCapture(const VideoCaptureCapability& capability);
30     virtual int32_t StopCapture();
31     virtual bool CaptureStarted();
32     virtual int32_t CaptureSettings(VideoCaptureCapability& settings);
33 
34 private:
35     enum {kNoOfV4L2Bufffers=4};
36 
37     static bool CaptureThread(void*);
38     bool CaptureProcess();
39     bool AllocateVideoBuffers();
40     bool DeAllocateVideoBuffers();
41 
42     // TODO(pbos): Stop using scoped_ptr and resetting the thread.
43     rtc::scoped_ptr<rtc::PlatformThread> _captureThread;
44     CriticalSectionWrapper* _captureCritSect;
45 
46     int32_t _deviceId;
47     int32_t _deviceFd;
48 
49     int32_t _buffersAllocatedByDevice;
50     int32_t _currentWidth;
51     int32_t _currentHeight;
52     int32_t _currentFrameRate;
53     bool _captureStarted;
54     RawVideoType _captureVideoType;
55     struct Buffer
56     {
57         void *start;
58         size_t length;
59     };
60     Buffer *_pool;
61 };
62 }  // namespace videocapturemodule
63 }  // namespace webrtc
64 
65 #endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_
66