Libargus API
Libargus Camera API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
CameraDevice.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
13  * contributors may be used to endorse or promote products derived
14  * from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /**
30  * @file
31  * <b>Libargus API: Camera Device API</b>
32  *
33  * @b Description: This file defines objects representing a single camera device.
34  */
35 
36 #ifndef _ARGUS_CAMERA_DEVICE_H
37 #define _ARGUS_CAMERA_DEVICE_H
38 
39 namespace Argus
40 {
41 
42 /**
43  * Object representing a single camera device.
44  *
45  * CameraDevices are provided by a CameraProvider and are used to
46  * access the camera devices available within the system.
47  * Each device is based on a single sensor or a set of synchronized sensors.
48  *
49  * @see ICameraProvider::getCameraDevices
50  *
51  * @defgroup ArgusCameraDevice CameraDevice
52  * @ingroup ArgusObjects
53  */
55 {
56 protected:
58 };
59 
60 /**
61  * @class ICameraProperties
62  *
63  * Interface to the core CameraDevice properties.
64  *
65  * @ingroup ArgusCameraDevice
66  */
67 DEFINE_UUID(InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73,c85b,4a29,bce5,15,60,6e,35,86,91);
69 {
70 public:
71  static const InterfaceID& id() { return IID_CAMERA_PROPERTIES; }
72 
73  /**
74  * Returns the camera UUID.
75  * @todo Describe the meaning of the camera UUID.
76  */
77  virtual UUID getUUID() const = 0;
78 
79  /**
80  * Returns the maximum number of regions of interest supported by AE.
81  * A value of 0 means that the entire image is the only supported region of interest.
82  *
83  * @see IAutoControlSettings::setAeRegions()
84  */
85  virtual uint32_t getMaxAeRegions() const = 0;
86 
87  /**
88  * Returns the maximum number of regions of interest supported by AWB.
89  * A value of 0 means that the entire image is the only supported region of interest.
90  *
91  * @see IAutoControlSettings::setAwbRegions()
92  */
93  virtual uint32_t getMaxAwbRegions() const = 0;
94 
95  /**
96  * Returns only the basic available sensor modes that do not have an associated
97  * extension. Basic mode types include Depth, RGB, YUV and Bayer types.
98  *
99  * @param[out] modes A vector that will be populated with the sensor modes.
100  *
101  * @returns success/status of the call.
102  */
103  virtual Status getBasicSensorModes(std::vector<SensorMode*>* modes) const = 0;
104 
105  /**
106  * Returns all the available sensor modes including the ones that have extensions.
107  * The extended modes support some form of Wide Dynamic Range (WDR) technology.
108  *
109  * All the returned modes will support the basic sensor mode interface.
110  * @see ISensorMode
111  *
112  * @param[out] modes A vector that will be populated with the sensor modes.
113  *
114  * @returns success/status of the call.
115  */
116  virtual Status getAllSensorModes(std::vector<SensorMode*>* modes) const = 0;
117 
118  /**
119  * Returns the valid range of focuser positions.
120  * The units are focuser steps.
121  */
122  virtual Range<int32_t> getFocusPositionRange() const = 0;
123 
124  /**
125  * Returns the supported aperture range.
126  */
127  virtual Range<float> getLensApertureRange() const = 0;
128 
129  /**
130  * Returns the supported range of ISP digital gain.
131  */
132  virtual Range<float> getIspDigitalGainRange() const = 0;
133 
134  /**
135  * Returns the supported range of Exposure Compensation.
136  */
137  virtual Range<float> getExposureCompensationRange() const = 0;
138 
139 protected:
141 };
142 
143 /**
144  * Child object representing a CameraDevice's sensor mode, returned by
145  * ICameraProperties::getAllSensorModes
146  *
147  * @defgroup ArgusSensorMode SensorMode
148  * @ingroup ArgusCameraDevice
149  */
151 {
152 protected:
154 };
155 
156 /**
157  * @class ISensorMode
158  *
159  * Interface to the core properties of a SensorMode.
160  *
161  * @ingroup ArgusSensorMode
162  */
163 DEFINE_UUID(InterfaceID, IID_SENSOR_MODE, e69015e0,db2a,11e5,a837,18,00,20,0c,9a,66);
164 class ISensorMode : public Interface
165 {
166 public:
167  static const InterfaceID& id() { return IID_SENSOR_MODE; }
168 
169  /**
170  * Returns the image resolution, in pixels.
171  */
172  virtual Size2D<uint32_t> getResolution() const = 0;
173 
174  /**
175  * Returns the supported exposure time range (in nanoseconds).
176  */
177  virtual Range<uint64_t> getExposureTimeRange() const = 0;
178 
179  /**
180  * Returns the supported frame duration range (in nanoseconds).
181  */
182  virtual Range<uint64_t> getFrameDurationRange() const = 0;
183 
184  /**
185  * Returns the supported analog gain range.
186  */
187  virtual Range<float> getAnalogGainRange() const = 0;
188 
189  /**
190  * Returns the bit depth of the image captured by the image sensor in the
191  * current mode. For example, a wide dynamic range image sensor capturing
192  * 16 bits per pixel would have an input bit depth of 16.
193  */
194  virtual uint32_t getInputBitDepth() const = 0;
195 
196  /**
197  * Returns the bit depth of the image returned from the image sensor in the
198  * current mode. For example, a wide dynamic range image sensor capturing
199  * 16 bits per pixel might be connected through a Camera Serial Interface
200  * (CSI-3) which is limited to 12 bits per pixel. The sensor would have to
201  * compress the image internally and would have an output bit depth not
202  * exceeding 12.
203  */
204  virtual uint32_t getOutputBitDepth() const = 0;
205 
206  /**
207  * Describes the type of the sensor (Bayer, Yuv, etc.) and key modes of
208  * operation which are enabled in the sensor mode (Wide-dynamic range,
209  * Piecewise Linear Compressed output, etc.)
210  */
211  virtual SensorModeType getSensorModeType() const = 0;
212 
213  /**
214  * Checks if the buffer provided is supported by the camera device.
215  */
216  virtual bool isBufferFormatSupported(Buffer* buffer) const = 0;
217 protected:
219 };
220 
221 } // namespace Argus
222 
223 #endif // _ARGUS_CAMERA_DEVICE_H