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/common_types.h" 15#include "webrtc/modules/video_capture/video_capture_impl.h" 16 17namespace webrtc 18{ 19class CriticalSectionWrapper; 20class ThreadWrapper; 21namespace videocapturemodule 22{ 23class VideoCaptureModuleV4L2: public VideoCaptureImpl 24{ 25public: 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 34private: 35 enum {kNoOfV4L2Bufffers=4}; 36 37 static bool CaptureThread(void*); 38 bool CaptureProcess(); 39 bool AllocateVideoBuffers(); 40 bool DeAllocateVideoBuffers(); 41 42 ThreadWrapper* _captureThread; 43 CriticalSectionWrapper* _captureCritSect; 44 45 int32_t _deviceId; 46 int32_t _deviceFd; 47 48 int32_t _buffersAllocatedByDevice; 49 int32_t _currentWidth; 50 int32_t _currentHeight; 51 int32_t _currentFrameRate; 52 bool _captureStarted; 53 RawVideoType _captureVideoType; 54 struct Buffer 55 { 56 void *start; 57 size_t length; 58 }; 59 Buffer *_pool; 60}; 61} // namespace videocapturemodule 62} // namespace webrtc 63 64#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_ 65