Libargus API
Libargus Camera API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
NonLinearHistogram.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018, 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 Extension: Non Linear Histogram</b>
32  *
33  * @b Description: This file defines the Non Linear Histogram extension, and provide
34  * methods to interpret non linear data in case of compressed data
35  */
36 
37 #ifndef _ARGUS_NON_LINEAR_HISTOGRAM_H
38 #define _ARGUS_NON_LINEAR_HISTOGRAM_H
39 
40 namespace Argus
41 {
42 
43 /**
44  * This adds a method to interpret the compressed histogram data correctly
45  * It introduces one new interface:
46  * -INonLinearHistogram -returns a list of bin indices that have been normalized. In case
47  * of WDR sensors, we compress 16 bit output data as ISP4 has
48  * a max support for 14 bit data. Hence these introduced non-linearities
49  * should be inverted. The indices are first corrected for the
50  * PreispCompression and then for the white balance gains. Eventually
51  * the getHistogram() API will incorporate this, but untill the new
52  * API design is finalized, this will be a temporary solution.
53  * @defgroup ArgusExtNonLinearHistogram Ext::NonLinearHistogram
54  * @ingroup ArgusExtensions
55  */
56 DEFINE_UUID(ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850,e801,11e8,b568,08,00,20,0c,9a,66);
57 
58 namespace Ext
59 {
60 
61 /**
62  * @class INonLinearHistogram
63  *
64  * Interface used to query the metadata to correctly interpret the compressed histogram data.
65  * Returns the normalized bin values to correctly interpret the compressed bayer histogram
66  * data. This interface will only be exposed in case the histogram is compressed.
67  *
68  * This interface is available from:
69  * - Histogram child objects returned by ICaptureMetadata::getBayerHistogram()
70  *
71  * @ingroup ArgusCaptureMetadata ArgusExtNonLinearHistogram
72  */
73 DEFINE_UUID(InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0,e801,11e8,b568,08,00,20,0c,9a,66);
75 {
76 public:
77  static const InterfaceID& id() { return IID_NON_LINEAR_HISTOGRAM; }
78 
79  /**
80  * Returns the average bayer values of bins for bayer histogram data.
81  *
82  * @param[out] binValues Returns the normalized average bin values (float in [0,1]) for
83  * bins provided by IBayerHistogram interface.
84  * In case the histogram data provided by IBayerHistogram::getHistogram()
85  * is non-linear, this method will return a vector having the same size as
86  * histogram (i.e. IBayerHistogram::getBinCount()), and will contain
87  * normalized bayer colour values to which the histogram bin of the same
88  * index corresponds.
89  *
90  * For Example, in case of Non Linear Histogram
91  *
92  * IBayerHistogram->getHistogram(&histogram);
93  * INonLinearHistogram->getBinValues(&values);
94  *
95  * for(int i = 0 ; i < histogram.size() ; i++)
96  * {
97  * cout<<" bin: " << i
98  * <<" normalized bin Value: " << values[i]
99  * <<" frequency: " << histogram[i];
100  * }
101  */
102  virtual Status getHistogramBinValues(std::vector< BayerTuple<float> >* binValues) const = 0;
103 
104 protected:
106 };
107 
108 } // namespace Ext
109 
110 } // namespace Argus
111 
112 #endif // _ARGUS_NON_LINEAR_HISTOGRAM_H