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_VIDEO_ENGINE_VIE_CAPTURE_IMPL_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_CAPTURE_IMPL_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/typedefs.h"
15281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/include/vie_capture.h"
16281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/vie_defines.h"
17281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/vie_ref_count.h"
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViESharedData;
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViECaptureImpl
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    : public ViECapture,
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      public ViERefCount {
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Implements ViECapture.
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int Release();
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int NumberOfCaptureDevices();
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int GetCaptureDevice(unsigned int list_number, char* device_nameUTF8,
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                               const unsigned int device_nameUTF8Length,
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                               char* unique_idUTF8,
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                               const unsigned int unique_idUTF8Length);
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int AllocateCaptureDevice(const char* unique_idUTF8,
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    const unsigned int unique_idUTF8Length,
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int& capture_id);
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int AllocateCaptureDevice(
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      VideoCaptureModule& capture_module, int& capture_id);  // NOLINT
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int AllocateExternalCaptureDevice(
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      int& capture_id, ViEExternalCapture *&external_capture);
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int ReleaseCaptureDevice(const int capture_id);
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int ConnectCaptureDevice(const int capture_id,
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   const int video_channel);
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int DisconnectCaptureDevice(const int video_channel);
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int StartCapture(
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      const int capture_id,
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      const CaptureCapability& capture_capability = CaptureCapability());
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int StopCapture(const int capture_id);
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int SetRotateCapturedFrames(const int capture_id,
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                      const RotateCapturedFrame rotation);
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int SetCaptureDelay(const int capture_id,
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                              const unsigned int capture_delay_ms);
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int NumberOfCapabilities(const char* unique_idUTF8,
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   const unsigned int unique_idUTF8Length);
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int GetCaptureCapability(const char* unique_idUTF8,
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   const unsigned int unique_idUTF8Length,
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   const unsigned int capability_number,
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   CaptureCapability& capability);
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int ShowCaptureSettingsDialogBox(
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const char* unique_idUTF8, const unsigned int unique_idUTF8Length,
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const char* dialog_title, void* parent_window = NULL,
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const unsigned int x = 200, const unsigned int y = 200);
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int GetOrientation(const char* unique_idUTF8,
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                             RotateCapturedFrame& orientation);
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int EnableBrightnessAlarm(const int capture_id, const bool enable);
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int RegisterObserver(const int capture_id,
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                               ViECaptureObserver& observer);
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int DeregisterObserver(const int capture_id);
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected:
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  explicit ViECaptureImpl(ViESharedData* shared_data);
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual ~ViECaptureImpl();
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private:
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ViESharedData* shared_data_;
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}  // namespace webrtc
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_VIDEO_ENGINE_VIE_CAPTURE_IMPL_H_
82