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  * - Ext::INonLinearHistogram: returns a list of normalized bin indices that map bins from
47  * getHistogram() to compressed pixel values.
48  * @defgroup ArgusExtNonLinearHistogram Ext::NonLinearHistogram
49  * @ingroup ArgusExtensions
50  */
51 DEFINE_UUID(ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850,e801,11e8,b568,08,00,20,0c,9a,66);
52 
53 namespace Ext
54 {
55 
56 /**
57  * @class INonLinearHistogram
58  *
59  * Interface used to query the metadata to correctly interpret the compressed histogram data.
60  * Returns the normalized bin values to correctly interpret the compressed bayer histogram
61  * data. This interface will only be exposed in case the histogram is compressed.
62  *
63  * This interface is available from:
64  * - Histogram child objects returned by ICaptureMetadata::getBayerHistogram()
65  *
66  * @ingroup ArgusCaptureMetadata ArgusExtNonLinearHistogram
67  */
68 DEFINE_UUID(InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0,e801,11e8,b568,08,00,20,0c,9a,66);
70 {
71 public:
72  static const InterfaceID& id() { return IID_NON_LINEAR_HISTOGRAM; }
73 
74  /**
75  * Returns the average bayer values of bins for bayer histogram data.
76  *
77  * @param[out] binValues Returns the normalized average bin values (float in [0,1]) for
78  * bins provided by IBayerHistogram interface.
79  * In case the histogram data provided by IBayerHistogram::getHistogram()
80  * is non-linear, this method will return a vector having the same size as
81  * histogram (i.e. IBayerHistogram::getBinCount()), and will contain
82  * normalized bayer colour values to which the histogram bin of the same
83  * index corresponds.
84  *
85  * For Example, in case of Non Linear Histogram
86  *
87  * IBayerHistogram->getHistogram(&histogram);
88  * INonLinearHistogram->getBinValues(&values);
89  *
90  * for(int i = 0 ; i < histogram.size() ; i++)
91  * {
92  * cout<<" bin: " << i
93  * <<" normalized bin Value: " << values[i]
94  * <<" frequency: " << histogram[i];
95  * }
96  */
97  virtual Status getHistogramBinValues(std::vector< BayerTuple<float> >* binValues) const = 0;
98 
99 protected:
101 };
102 
103 } // namespace Ext
104 
105 } // namespace Argus
106 
107 #endif // _ARGUS_NON_LINEAR_HISTOGRAM_H