summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_linearization_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_linearization_info.h')
-rw-r--r--gpr/source/lib/dng_sdk/dng_linearization_info.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_linearization_info.h b/gpr/source/lib/dng_sdk/dng_linearization_info.h
new file mode 100644
index 0000000..510cf11
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_linearization_info.h
@@ -0,0 +1,164 @@
+/*****************************************************************************/
+// Copyright 2006-2011 Adobe Systems Incorporated
+// All Rights Reserved.
+//
+// NOTICE: Adobe permits you to use, modify, and distribute this file in
+// accordance with the terms of the Adobe license agreement accompanying it.
+/*****************************************************************************/
+
+/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_linearization_info.h#1 $ */
+/* $DateTime: 2012/05/30 13:28:51 $ */
+/* $Change: 832332 $ */
+/* $Author: tknoll $ */
+
+/** \file
+ * Support for linearization table and black level tags.
+ */
+
+/*****************************************************************************/
+
+#ifndef __dng_linearization_info__
+#define __dng_linearization_info__
+
+/*****************************************************************************/
+
+#include "dng_auto_ptr.h"
+#include "dng_classes.h"
+#include "dng_memory.h"
+#include "dng_rational.h"
+#include "dng_rect.h"
+#include "dng_sdk_limits.h"
+
+/*****************************************************************************/
+
+/// \brief Class for managing data values related to DNG linearization.
+///
+/// See LinearizationTable, BlackLevel, BlackLevelRepeatDim, BlackLevelDeltaH,
+/// BlackLevelDeltaV and WhiteLevel tags in the \ref spec_dng "DNG 1.1.0 specification".
+
+class dng_linearization_info
+ {
+
+ public:
+
+ /// This rectangle defines the active (non-masked) pixels of the sensor.
+ /// The order of the rectangle coordinates is: top, left, bottom, right.
+
+ dng_rect fActiveArea;
+
+ /// Number of rectangles in fMaskedArea
+
+ uint32 fMaskedAreaCount;
+
+ /// List of non-overlapping rectangle coordinates of fully masked pixels.
+ /// Can be optionally used by DNG readers to measure the black encoding level.
+ /// The order of each rectangle's coordinates is: top, left, bottom, right.
+ /// If the raw image data has already had its black encoding level subtracted, then this tag should
+ /// not be used, since the masked pixels are no longer useful.
+ /// Note that DNG writers are still required to include an estimate and store the black encoding level
+ /// using the black level DNG tags. Support for the MaskedAreas tag is not required of DNG
+ /// readers.
+
+ dng_rect fMaskedArea [kMaxMaskedAreas];
+
+ /// A lookup table that maps stored values into linear values.
+ /// This tag is typically used to increase compression ratios by storing the raw data in a non-linear, more
+ /// visually uniform space with fewer total encoding levels.
+ /// If SamplesPerPixel is not equal to one, e.g. Fuji S3 type sensor, this single table applies to all the samples for each
+ /// pixel.
+
+ AutoPtr<dng_memory_block> fLinearizationTable;
+
+ /// Actual number of rows in fBlackLevel pattern
+
+ uint32 fBlackLevelRepeatRows;
+
+ /// Actual number of columns in fBlackLevel pattern
+
+ uint32 fBlackLevelRepeatCols;
+
+ /// Repeating pattern of black level deltas fBlackLevelRepeatRows by fBlackLevelRepeatCols in size.
+
+ real64 fBlackLevel [kMaxBlackPattern] [kMaxBlackPattern] [kMaxSamplesPerPixel];
+
+ /// Memory block of double-precision floating point deltas between baseline black level and a given column's black level
+
+ AutoPtr<dng_memory_block> fBlackDeltaH;
+
+ /// Memory block of double-precision floating point deltas between baseline black level and a given row's black level
+
+ AutoPtr<dng_memory_block> fBlackDeltaV;
+
+ /// Single white level (maximum sensor value) for each sample plane.
+
+ real64 fWhiteLevel [kMaxSamplesPerPixel];
+
+ protected:
+
+ int32 fBlackDenom;
+
+ public:
+
+ dng_linearization_info ();
+
+ virtual ~dng_linearization_info ();
+
+ void RoundBlacks ();
+
+ virtual void Parse (dng_host &host,
+ dng_stream &stream,
+ dng_info &info);
+
+ virtual void PostParse (dng_host &host,
+ dng_negative &negative);
+
+ /// Compute the maximum black level for a given sample plane taking into account base
+ /// black level, repeated black level patter, and row/column delta maps.
+
+ real64 MaxBlackLevel (uint32 plane) const;
+
+ /// Convert raw data from in-file format to a true linear image using linearization data from DNG.
+ /// \param host Used to allocate buffers, check for aborts, and post progress updates.
+ /// \param srcImage Input pre-linearization RAW samples.
+ /// \param dstImage Output linearized image.
+
+ virtual void Linearize (dng_host &host,
+ const dng_image &srcImage,
+ dng_image &dstImage);
+
+ /// Compute black level for one coordinate and sample plane in the image.
+ /// \param row Row to compute black level for.
+ /// \param col Column to compute black level for.
+ /// \param plane Sample plane to compute black level for.
+
+ dng_urational BlackLevel (uint32 row,
+ uint32 col,
+ uint32 plane) const;
+
+ /// Number of per-row black level deltas in fBlackDeltaV.
+
+ uint32 RowBlackCount () const;
+
+ /// Lookup black level delta for a given row.
+ /// \param row Row to get black level for.
+ /// \retval black level for indicated row.
+
+ dng_srational RowBlack (uint32 row) const;
+
+ /// Number of per-column black level deltas in fBlackDeltaV.
+
+ uint32 ColumnBlackCount () const;
+
+ /// Lookup black level delta for a given column.
+ /// \param col Column to get black level for.
+ /// \retval black level for indicated column.
+
+ dng_srational ColumnBlack (uint32 col) const;
+
+ };
+
+/*****************************************************************************/
+
+#endif
+
+/*****************************************************************************/