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/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