Libargus API
Libargus Camera API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Settings.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016-2024, 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: Settings API</b>
32  *
33  * @b Description: This file defines the settings that control the sensor module.
34  */
35 
36 #ifndef _ARGUS_SETTINGS_H
37 #define _ARGUS_SETTINGS_H
38 
39 namespace Argus
40 {
41 
42 /**
43  * @class ISourceSettings
44  *
45  * Interface to the source settings (provided by IRequest::getSourceSettings()).
46  *
47  * @ingroup ArgusSourceSettings
48  */
49 DEFINE_UUID(InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c,3c62,4161,a92a,a6,4f,ba,c6,38,83);
50 class ISourceSettings : public Interface
51 {
52 public:
53  static const InterfaceID& id() { return IID_SOURCE_SETTINGS; }
54 
55  /**
56  * Sets the exposure time range of the source, in nanoseconds.
57  * If the exposure range is outside of the available range, the capture's exposure time
58  * will be as close as possible to the exposure range specified.
59  * @param[in] exposureTimeRange Exposure time range, in nanoseconds.
60  * @see ISensorMode::getExposureTimeRange()
61  * @todo Document implications of quantization.
62  *
63  * @returns success/status of the call.
64  */
65  virtual Status setExposureTimeRange(const Range<uint64_t>& exposureTimeRange) = 0;
66 
67  /**
68  * Returns the exposure time range of the source, in nanoseconds.
69  */
70  virtual Range<uint64_t> getExposureTimeRange() const = 0;
71 
72  /**
73  * Sets the focus position, in focuser units. If the position
74  * is set outside of the focuser limits, the position will be clamped.
75  * @param[in] position The new focus position, in focuser units.
76  * @see ICameraProperties::getFocusPositionRange()
77  *
78  * @returns success/status of the call.
79  */
80  virtual Status setFocusPosition(int32_t position) = 0;
81 
82  /**
83  * Returns the focus position, in focuser units.
84  */
85  virtual int32_t getFocusPosition() const = 0;
86 
87  /**
88  * Sets the aperture position. If the position is not valid,
89  * error will be returned.
90  * @param[in] position The new aperture position.
91  * @see ICameraProperties::getAperturePositionRange()
92  *
93  * @returns success/status of the call.
94  */
95  virtual Status setAperturePosition(int32_t position) = 0;
96 
97  /**
98  * Returns the aperture position.
99  */
100  virtual int32_t getAperturePosition() const = 0;
101 
102  /**
103  * Sets the aperture motor speed in motor steps/second. If the speed
104  * is set outside of the speed limits, the speed will be clamped.
105  * @param[in] speed The new speed.
106  * @see ICameraProperties::getApertureMotorSpeedRange()
107  *
108  * @returns success/status of the call.
109  */
110  virtual Status setApertureMotorSpeed(float speed) = 0;
111 
112  /**
113  * Returns the aperture motor speed in motor steps/second.
114  */
115  virtual float getApertureMotorSpeed() const = 0;
116 
117  /**
118  * Sets the aperture f-number. If the f-number is not valid,
119  * error will be returned.
120  * @param[in] fnumber The new f-number.
121  *
122  * @returns success/status of the call.
123  */
124  virtual Status setApertureFNumber(float fnumber) = 0;
125 
126  /**
127  * Returns the aperture f-number.
128  */
129  virtual float getApertureFNumber() const = 0;
130 
131  /**
132  * Sets the frame duration range, in nanoseconds.
133  * If frame range is out of bounds of the current sensor mode,
134  * the capture's frame duration will be as close as possible to the range specified.
135  * @param[in] frameDurationRange Frame duration range, in nanoseconds
136  * @see ISensorMode::getFrameDurationRange()
137  *
138  * @returns success/status of the call.
139  */
140  virtual Status setFrameDurationRange(const Range<uint64_t>& frameDurationRange) = 0;
141 
142  /**
143  * Returns the frame duration range, in nanoseconds.
144  */
145  virtual Range<uint64_t> getFrameDurationRange() const = 0;
146 
147  /**
148  * Sets the analog gain range for the sensor.
149  * The range has to be within the max and min reported in the CameraProperties
150  * Otherwise the range will be clipped.
151  * @param[in] gainRange gain range in linear factor scale.
152  * @see ISensorMode::getAnalogGainRange()
153  *
154  * @returns success/status of the call.
155  */
156  virtual Status setGainRange(const Range<float>& gainRange) = 0;
157 
158  /**
159  * Returns the gain range.
160  */
161  virtual Range<float> getGainRange() const = 0;
162 
163  /**
164  * Sets the sensor mode.
165  * Note that changing sensor mode from one capture to the next may result in
166  * multiple sensor frames being dropped between the two captures.
167  * @param[in] mode Desired sensor mode for the capture.
168  * @see ICameraProperties::getAllSensorModes()
169  *
170  * @returns success/status of the call.
171  */
172  virtual Status setSensorMode(SensorMode* mode) = 0;
173 
174  /**
175  * Returns the sensor mode.
176  */
177  virtual SensorMode* getSensorMode() const = 0;
178 
179  /**
180  * Sets the user-specified optical black levels.
181  * These values will be ignored unless <tt>getOpticalBlackEnable() == true</tt>
182  * Values are floating point in the range [0,1) normalized based on sensor bit depth.
183  * @param[in] opticalBlackLevels opticalBlack levels in range [0,1) per bayer phase
184  *
185  * @returns success/status of the call.
186  */
187  virtual Status setOpticalBlack(const BayerTuple<float>& opticalBlackLevels) = 0;
188 
189  /**
190  * Returns user-specified opticalBlack level per bayer phase.
191  *
192  * @returns opticalBlackLevels
193  */
194  virtual BayerTuple<float> getOpticalBlack() const = 0;
195 
196  /**
197  * Sets whether or not user-provided optical black levels are used.
198  * @param[in] enable If @c true, Argus will use the user-specified optical black levels.
199  * @see setOpticalBlack()
200  * If @c false, the Argus implementation will choose the optical black values.
201  *
202  * @returns success/status of the call.
203  */
204  virtual Status setOpticalBlackEnable(bool enable) = 0;
205 
206  /**
207  * Returns whether user-specified optical black levels are enabled.
208  * If false, the Argus implementation will choose the optical black values.
209  * @see setOpticalBlackEnable()
210  *
211  * @returns enable
212  */
213  virtual bool getOpticalBlackEnable() const = 0;
214 
215 
216 protected:
218 };
219 
220 /**
221  * @class IAutoControlSettings
222  *
223  * Interface to the auto control settings (provided by IRequest::getAutoControlSettings()).
224  *
225  * @ingroup ArgusAutoControlSettings
226  */
227 DEFINE_UUID(InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6,cb13,440b,bc95,3f,fd,0d,19,91,db);
229 {
230 public:
231  static const InterfaceID& id() { return IID_AUTO_CONTROL_SETTINGS; }
232 
233  /**
234  * Sets the AE antibanding mode.
235  * @param[in] mode The requested antibanding mode.
236  *
237  * @returns success/status of the call.
238  */
239  virtual Status setAeAntibandingMode(const AeAntibandingMode& mode) = 0;
240 
241  /**
242  * Returns the AE antibanding mode.
243  */
244  virtual AeAntibandingMode getAeAntibandingMode() const = 0;
245 
246  /**
247  * Sets the AE mode.
248  * @param[in] mode The new AE mode.
249  *
250  * @returns success/status of the call.
251  */
252  virtual Status setAeMode(const AeMode& mode) = 0;
253 
254  /**
255  * Returns the AE mode.
256  */
257  virtual AeMode getAeMode() const = 0;
258 
259  /**
260  * Sets the AE lock. When locked, AE will maintain constant exposure.
261  * @param[in] lock If @c true, locks AE at its current exposure.
262  *
263  * @returns success/status of the call.
264  */
265  virtual Status setAeLock(bool lock) = 0;
266 
267  /**
268  * Returns the AE lock.
269  */
270  virtual bool getAeLock() const = 0;
271 
272  /**
273  * Sets the AE regions of interest.
274  * If no regions are specified, the region of interest will be determined by device
275  * and obtain by CameraMetadata::getAeRegions.
276  * @param[in] regions The AE regions of interest.
277  * The maximum number of regions is returned by @c ICameraProperties::getMaxAeRegions().
278  * The minimum supported size of resultatnt region is returned by
279  * @c ICameraProperties::getMinAeRegionSize().
280  *
281  * @returns success/status of the call.
282  */
283  virtual Status setAeRegions(const std::vector<AcRegion>& regions) = 0;
284 
285  /**
286  * Returns the AE regions of interest.
287  * @param[out] regions A vector that will be populated with the AE regions of interest.
288  *
289  * @returns success/status of the call.
290  */
291  virtual Status getAeRegions(std::vector<AcRegion>* regions) const = 0;
292 
293  /**
294  * Sets the bayer histogram region of interest.
295  * If no region is specified, the entire image is the region of interest.
296  * @param[in] region The bayer histogram region of interest.
297  *
298  * @returns success/status of the call.
299  */
300  virtual Status setBayerHistogramRegion(const Rectangle<uint32_t>& region) = 0;
301 
302  /**
303  * Returns the rectangle of the bayer histogram region of interest.
304  */
305  virtual Rectangle<uint32_t> getBayerHistogramRegion() const = 0;
306 
307  /**
308  * Sets the AWB lock.
309  * @param[in] lock If @c true, locks AWB at its current state.
310  *
311  * @returns success/status of the call.
312  */
313  virtual Status setAwbLock(bool lock) = 0;
314 
315  /**
316  * Returns the AWB lock.
317  */
318  virtual bool getAwbLock() const = 0;
319 
320  /**
321  * Sets the AWB mode.
322  * @param[in] mode The new AWB mode.
323  *
324  * @returns success/status of the call.
325  */
326  virtual Status setAwbMode(const AwbMode& mode) = 0;
327 
328  /**
329  * Returns the AWB mode.
330  */
331  virtual AwbMode getAwbMode() const = 0;
332 
333  /**
334  * Sets the AWB regions of interest.
335  * If no regions are specified, the region of interest will be determined by device
336  * and obtain by CameraMetadata::getAwbRegions.
337  * @param[in] regions The AWB regions of interest.
338  * The maximum number of regions is returned by @c ICameraProperties::getMaxAwbRegions().
339  *
340  * @returns success/status of the call.
341  */
342  virtual Status setAwbRegions(const std::vector<AcRegion>& regions) = 0;
343 
344  /**
345  * Returns the AWB regions of interest.
346  * @param[out] regions A vector that will be populated with the AWB regions of interest.
347  *
348  * @returns success/status of the call.
349  */
350  virtual Status getAwbRegions(std::vector<AcRegion>* regions) const = 0;
351 
352  /**
353  * Sets the AF mode.
354  * @param[in] mode The new AF mode.
355  *
356  * @returns success/status of the call.
357  */
358  virtual Status setAfMode(const AfMode& mode) = 0;
359 
360  /**
361  * Returns the AF mode.
362  */
363  virtual AfMode getAfMode() const = 0;
364 
365  /**
366  * Sets the AF regions of interest.
367  * If no regions are specified, the region of interest will be determined by device
368  * and obtain by CameraMetadata::getAfRegions.
369  * @param[in] regions The AF regions of interest.
370  * The maximum number of regions is returned by @c ICameraProperties::getMaxAfRegions().
371  *
372  * @returns success/status of the call.
373  */
374  virtual Status setAfRegions(const std::vector<AcRegion>& regions) = 0;
375 
376  /**
377  * Returns the AF regions of interest.
378  * @param[out] regions A vector that will be populated with the AF regions of interest.
379  *
380  * @returns success/status of the call.
381  */
382  virtual Status getAfRegions(std::vector<AcRegion>* regions) const = 0;
383 
384  /**
385  * Sets the Manual White Balance gains.
386  * @param[in] gains The Manual White Balance Gains
387  *
388  * @returns success/status of the call.
389  */
390  virtual Status setWbGains(const BayerTuple<float>& gains) = 0;
391 
392  /**
393  * Returns the Manual White Balance gains.
394  *
395  * @returns Manual White Balance Gains structure
396  */
397  virtual BayerTuple<float> getWbGains() const = 0;
398 
399  /**
400  * Returns the size of the color correction matrix.
401  */
403 
404  /**
405  * Sets the user-specified color correction matrix.
406  * This matrix will be ignored unless <tt>getColorCorrectionMatrixEnable() == true</tt>.
407  * The active color correction matrix used for image processing may be internally modified
408  * to account for the active color saturation value (either user-specified or automatically
409  * generated, after biasing, @see setColorSaturation and @see setColorSaturationBias).
410  * @param[in] matrix A color correction matrix that maps sensor RGB to linear sRGB. This matrix
411  * is given in row-major order and must have the size w*h, where w and h are
412  * the width and height of the Size returned by getColorCorrectionMatrixSize()
413  *
414  * @returns success/status of the call.
415  */
416  virtual Status setColorCorrectionMatrix(const std::vector<float>& matrix) = 0;
417 
418  /**
419  * Returns the user-specified color correction matrix.
420  * @param[out] matrix A matrix that will be populated with the CCM.
421  *
422  * @returns success/status of the call.
423  */
424  virtual Status getColorCorrectionMatrix(std::vector<float>* matrix) const = 0;
425 
426  /**
427  * Enables the user-specified color correction matrix.
428  * @param[in] enable If @c true, libargus uses the user-specified matrix.
429  * @see setColorCorrectionMatrix()
430  *
431  * @returns success/status of the call.
432  */
433  virtual Status setColorCorrectionMatrixEnable(bool enable) = 0;
434 
435  /**
436  * Returns the enable for the user-specified color correction matrix.
437  */
438  virtual bool getColorCorrectionMatrixEnable() const = 0;
439 
440  /**
441  * Sets the user-specified absolute color saturation. This must be enabled via
442  * @see setColorSaturationEnable, otherwise saturation will be determined automatically.
443  * This saturation value may be used to modify the color correction matrix used
444  * for processing (@see setColorCorrectionMatrix), and these changes will be reflected
445  * in the color correction matrix output to the capture metadata.
446  * @param[in] saturation The absolute color saturation. Acceptable values are in
447  * [0.0, 2.0], and the default value is 1.0.
448 
449  * @returns success/status of the call.
450  */
451  virtual Status setColorSaturation(float saturation) = 0;
452 
453  /**
454  * Returns the user-specified absolute color saturation (@see setColorSaturation).
455  */
456  virtual float getColorSaturation() const = 0;
457 
458  /**
459  * Enables the user-specified absolute color saturation.
460  * @param[in] enable If @c true, libargus uses the user-specified color saturation.
461  * @see setColorSaturation()
462  *
463  * @returns success/status of the call.
464  */
465  virtual Status setColorSaturationEnable(bool enable) = 0;
466 
467  /**
468  * Returns the enable for the user-specified color saturation.
469  */
470  virtual bool getColorSaturationEnable() const = 0;
471 
472  /**
473  * Sets the color saturation bias. This bias is used to multiply the active saturation
474  * value, either the user-specified or the automatically generated value depending on the state
475  * of @see getColorSaturationEnable, and produces the final saturation value to use for
476  * capture processing. This is used primarily to tweak automatically generated saturation
477  * values when the application prefers more or less saturation than what the implementation
478  * or hardware generates by default. The final saturation value (after biasing) may affect the
479  * color correction matrix used for processing (@see setColorCorrectionMatrix).
480  * @param[in] bias The color saturation bias. Acceptable values are in [0.0, 2.0], where
481  * 1.0 does not modify the saturation (default), 0.0 is fully desaturated
482  * (greyscale), and 2.0 is highly saturated.
483  *
484  * @returns success/status of the call.
485  */
486  virtual Status setColorSaturationBias(float bias) = 0;
487 
488  /**
489  * Returns the color saturation bias.
490  */
491  virtual float getColorSaturationBias() const = 0;
492 
493  /**
494  * Sets the exposure compensation.
495  * Exposure compensation is applied after AE is solved.
496  * @param[in] ev The exposure adjustment step in stops.
497  *
498  * @returns success/status of the call.
499  */
500  virtual Status setExposureCompensation(float ev) = 0;
501 
502  /**
503  * Returns the exposure compensation.
504  */
505  virtual float getExposureCompensation() const = 0;
506 
507  /**
508  * Returns the number of elements required for the tone map curve.
509  * @param[in] channel The color channel the curve size corresponds to.
510  */
511  virtual uint32_t getToneMapCurveSize(RGBChannel channel) const = 0;
512 
513  /**
514  * Sets the user-specified tone map curve for a channel on the stream.
515  * The user-specified tone map will be ignored unless <tt>getToneMapCurveEnable() == true</tt>.
516  * @param[in] channel The color the curve corresponds to.
517  * @param[in] curve A float vector that describes the LUT.
518  * The number of elements must match the number of elements
519  * returned from getToneMapCurve() of the same channel.
520  *
521  * @returns success/status of the call.
522  */
523  virtual Status setToneMapCurve(RGBChannel channel, const std::vector<float>& curve) = 0;
524 
525  /**
526  * Returns the user-specified tone map curve for a channel on the stream.
527  * @param[in] channel The color the curve corresponds to.
528  * @param[out] curve A vector that will be populated by the tone map curve for the specified
529  * color channel.
530  *
531  * @returns success/status of the call.
532  */
533  virtual Status getToneMapCurve(RGBChannel channel, std::vector<float>* curve) const = 0;
534 
535  /**
536  * Enables the user-specified tone map.
537  * @param[in] enable If @c true, libargus uses the user-specified tone map.
538  *
539  * @returns success/status of the call.
540  */
541  virtual Status setToneMapCurveEnable(bool enable) = 0;
542 
543  /**
544  * Returns the enable for the user-specified tone map.
545  */
546  virtual bool getToneMapCurveEnable() const = 0;
547 
548  /**
549  * Sets the user-specified Isp Digital gain range.
550  * @param[in] gain The user-specified Isp Digital gain.
551  *
552  * @returns success/status of the call.
553  */
554  virtual Status setIspDigitalGainRange(const Range<float>& gain) = 0;
555 
556  /**
557  * Returns the user-specified Isp Digital gain range.
558  *
559  * @returns Isp Digital gain
560  */
561  virtual Range<float> getIspDigitalGainRange() const = 0;
562 
563 protected:
565 };
566 
567 /**
568  * @class IStreamSettings
569  *
570  * Interface to per-stream settings (provided by IRequest::getStreamSettings()).
571  *
572  * @ingroup ArgusStreamSettings
573  */
574 DEFINE_UUID(InterfaceID, IID_STREAM_SETTINGS, c477aeaf,9cc8,4467,a834,c7,07,d7,b6,9f,a4);
576 {
577 public:
578  static const InterfaceID& id() { return IID_STREAM_SETTINGS; }
579 
580  /**
581  * Sets the clip rectangle for the stream.
582  * A clip rectangle is a normalized rectangle
583  * with valid coordinates contained in the [0.0,1.0] range.
584  * @param[in] clipRect The clip rectangle.
585  *
586  * @returns success/status of the call.
587  */
588  virtual Status setSourceClipRect(const Rectangle<float>& clipRect) = 0;
589 
590  /**
591  * Returns the clip rectangle for the stream.
592  */
593  virtual Rectangle<float> getSourceClipRect() const = 0;
594 
595  /**
596  * Sets whether or not post-processing is enabled for this stream.
597  * Post-processing features are controlled on a per-Request basis and all streams share the
598  * same post-processing control values, but this enable allows certain streams to be excluded
599  * from all post-processing. The current controls defined to be a part of "post-processing"
600  * includes (but may not be limited to):
601  * - Denoise
602  * Default value is true.
603  */
604  virtual void setPostProcessingEnable(bool enable) = 0;
605 
606  /**
607  * Returns the post-processing enable for the stream.
608  */
609  virtual bool getPostProcessingEnable() const = 0;
610 
611 protected:
613 };
614 
615 /**
616  * @class IDenoiseSettings
617  *
618  * Interface to denoise settings.
619  *
620  * @ingroup ArgusRequest
621  */
622 DEFINE_UUID(InterfaceID, IID_DENOISE_SETTINGS, 7A461D20,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
624 {
625 public:
626  static const InterfaceID& id() { return IID_DENOISE_SETTINGS; }
627 
628  /**
629  * Sets the denoise (noise reduction) mode for the request.
630  * @param[in] mode The denoise mode:
631  * OFF: Denoise algorithms are disabled.
632  * FAST: Noise reduction will be enabled, but it will not slow down
633  * the capture rate.
634  * HIGH_QUALITY: Maximum noise reduction will be enabled to achieve
635  * the highest quality, but may slow down the capture rate.
636  * @returns success/status of the call.
637  */
638  virtual Status setDenoiseMode(const DenoiseMode& mode) = 0;
639 
640  /**
641  * Returns the denoise mode for the request.
642  */
643  virtual DenoiseMode getDenoiseMode() const = 0;
644 
645  /**
646  * Sets the strength for the denoise operation.
647  * @param[in] strength The denoise strength. This must be within the range [0.0, 1.0], where
648  * 0.0 is the least and 1.0 is the most amount of noise reduction that can be
649  * applied. This denoise strength is relative to the current noise reduction mode;
650  * using a FAST denoise mode with a full strength of 1.0 may not perform as well
651  * as using a HIGH_QUALITY mode with a lower relative strength.
652  * @returns success/status of the call.
653  */
654  virtual Status setDenoiseStrength(float strength) = 0;
655 
656  /**
657  * Returns the denoise strength.
658  */
659  virtual float getDenoiseStrength() const = 0;
660 
661 protected:
663 };
664 
665 /**
666  * @class IEdgeEnhanceSettings
667  *
668  * Interface to edge enhancement settings.
669  *
670  * @ingroup ArgusRequest
671  */
672 DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
674 {
675 public:
676  static const InterfaceID& id() { return IID_EDGE_ENHANCE_SETTINGS; }
677 
678  /**
679  * Sets the edge enhancement mode for the request.
680  * @param[in] mode The edge enhancement mode:
681  * OFF: Edge enhancement algorithms are disabled.
682  * FAST: Edge enhancement will be enabled, but it will not slow down
683  * the capture rate.
684  * HIGH_QUALITY: Maximum edge enhancement will be enabled to achieve
685  * the highest quality, but may slow down the capture rate.
686  * @returns success/status of the call.
687  */
688  virtual Status setEdgeEnhanceMode(const EdgeEnhanceMode& mode) = 0;
689 
690  /**
691  * Returns the edge enhancement mode for the request.
692  */
693  virtual EdgeEnhanceMode getEdgeEnhanceMode() const = 0;
694 
695  /**
696  * Sets the strength for the edge enhancement operation.
697  * @param[in] strength The edge enhancement strength. This must be within the range [0.0, 1.0],
698  * where 0.0 is the least and 1.0 is the most amount of edge enhancement that can be
699  * applied. This strength is relative to the current edge enhancement mode; using
700  * a FAST edge enhancement mode with a full strength of 1.0 may not perform as well
701  * as using a HIGH_QUALITY mode with a lower relative strength.
702  * @returns success/status of the call.
703  */
704  virtual Status setEdgeEnhanceStrength(float strength) = 0;
705 
706  /**
707  * Returns the edge enhancement strength.
708  */
709  virtual float getEdgeEnhanceStrength() const = 0;
710 
711 protected:
713 };
714 
715 } // namespace Argus
716 
717 #endif // _ARGUS_SETTINGS_H