Home | History | Annotate | Download | only in linux
      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 
     17 namespace webrtc
     18 {
     19 class CriticalSectionWrapper;
     20 class ThreadWrapper;
     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     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