1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1487c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/common_types.h" 1587c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/video_capture_impl.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ThreadWrapper; 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace videocapturemodule 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoCaptureModuleV4L2: public VideoCaptureImpl 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 26f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org VideoCaptureModuleV4L2(int32_t id); 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~VideoCaptureModuleV4L2(); 28f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t Init(const char* deviceUniqueId); 29f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t StartCapture(const VideoCaptureCapability& capability); 30f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t StopCapture(); 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool CaptureStarted(); 32f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org virtual int32_t CaptureSettings(VideoCaptureCapability& settings); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum {kNoOfV4L2Bufffers=4}; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool CaptureThread(void*); 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool CaptureProcess(); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool AllocateVideoBuffers(); 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool DeAllocateVideoBuffers(); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ThreadWrapper* _captureThread; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper* _captureCritSect; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 45f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _deviceId; 46f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _deviceFd; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _buffersAllocatedByDevice; 49f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _currentWidth; 50f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _currentHeight; 51f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _currentFrameRate; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _captureStarted; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RawVideoType _captureVideoType; 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct Buffer 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void *start; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t length; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Buffer *_pool; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 613b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace videocapturemodule 623b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_LINUX_VIDEO_CAPTURE_LINUX_H_ 65