/*****************************************************************************/
// Copyright 2008 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_bad_pixels.h#3 $ */ 
/* $DateTime: 2012/07/11 10:36:56 $ */
/* $Change: 838485 $ */
/* $Author: tknoll $ */

/** \file
 * Opcodes to fix defective pixels, including individual pixels and regions (such as
 * defective rows and columns).
 */

/*****************************************************************************/

#ifndef __dng_bad_pixels__
#define __dng_bad_pixels__

/*****************************************************************************/

#include "dng_memory.h"
#include "dng_opcodes.h"

#include <vector>

/*****************************************************************************/

/// \brief An opcode to fix individual bad pixels that are marked with a constant
/// value (e.g., 0) in a Bayer image.

class dng_opcode_FixBadPixelsConstant: public dng_filter_opcode
	{
	
	private:
	
		uint32 fConstant;
		
		uint32 fBayerPhase;
	
	public:

		/// Construct an opcode to fix an individual bad pixels that are marked with
		/// a constant value in a Bayer image.
		/// \param constant The constant value that indicates a bad pixel.
		/// \param bayerPhase The phase of the Bayer mosaic pattern (0, 1, 2, 3).
	
		dng_opcode_FixBadPixelsConstant (uint32 constant,
										 uint32 bayerPhase);

		dng_opcode_FixBadPixelsConstant (dng_stream &stream);
	
		virtual void PutData (dng_stream &stream) const;

		virtual dng_point SrcRepeat ();
	
		virtual dng_rect SrcArea (const dng_rect &dstArea,
								  const dng_rect &imageBounds);

		virtual void Prepare (dng_negative &negative,
							  uint32 threadCount,
							  const dng_point &tileSize,
							  const dng_rect &imageBounds,
							  uint32 imagePlanes,
							  uint32 bufferPixelType,
							  dng_memory_allocator &allocator);

		virtual void ProcessArea (dng_negative &negative,
								  uint32 threadIndex,
								  dng_pixel_buffer &srcBuffer,
								  dng_pixel_buffer &dstBuffer,
								  const dng_rect &dstArea,
								  const dng_rect &imageBounds);
								  
	protected:
	
#if defined(__clang__) && defined(__has_attribute)
#if __has_attribute(no_sanitize)
__attribute__((no_sanitize("unsigned-integer-overflow")))
#endif
#endif
		bool IsGreen (int32 row, int32 col) const
			{
			return (((uint32) row + (uint32) col + fBayerPhase + (fBayerPhase >> 1)) & 1) == 0;
			}

	};

/*****************************************************************************/

/// \brief A list of bad pixels and rectangles (usually single rows or columns).

class dng_bad_pixel_list
	{
	
	public:

		enum
			{
			kNoIndex = 0xFFFFFFFF
			};
	
	private:
	
		// List of bad single pixels.
	
		dng_std_vector<dng_point> fBadPoints;
		
		// List of bad rectangles (usually single rows or columns).
		
		dng_std_vector<dng_rect> fBadRects;
		
	public:

		/// Create an empty bad pixel list.

		dng_bad_pixel_list ();
		
		/// Returns the number of bad single pixels.

		uint32 PointCount () const
			{
			return (uint32) fBadPoints.size ();
			}
			
		/// Retrieves the bad single pixel coordinate via the specified list index.
		///
		/// \param index The list index from which to retrieve the bad single pixel
		/// coordinate.

		const dng_point & Point (uint32 index) const
			{
			return fBadPoints [index];
			}
		
		/// Returns the number of bad rectangles.

		uint32 RectCount () const
			{
			return (uint32) fBadRects.size ();
			}
		
		/// Retrieves the bad rectangle via the specified list index.
		///
		/// \param index The list index from which to retrieve the bad rectangle
		/// coordinates.

		const dng_rect & Rect (uint32 index) const
			{
			return fBadRects [index];
			}
			
		/// Returns true iff there are zero bad single pixels and zero bad
		/// rectangles.

		bool IsEmpty () const
			{
			return PointCount () == 0 &&
				   RectCount  () == 0;
			}
			
		/// Returns true iff there is at least one bad single pixel or at least one
		/// bad rectangle.

		bool NotEmpty () const
			{
			return !IsEmpty ();
			}
			
		/// Add the specified coordinate to the list of bad single pixels.
		///
		/// \param pt The bad single pixel to add.

		void AddPoint (const dng_point &pt);
		
		/// Add the specified rectangle to the list of bad rectangles.
		///
		/// \param pt The bad rectangle to add.

		void AddRect (const dng_rect &r);
		
		/// Sort the bad single pixels and bad rectangles by coordinates (top to
		/// bottom, then left to right).

		void Sort ();
		
		/// Returns true iff the specified bad single pixel is isolated, i.e., there
		/// is no other bad single pixel or bad rectangle that lies within radius
		/// pixels of this bad single pixel.
		///
		/// \param index The index of the bad single pixel to test.
		/// \param radius The pixel radius to test for isolation.

		bool IsPointIsolated (uint32 index,
							  uint32 radius) const;
							  
		/// Returns true iff the specified bad rectangle is isolated, i.e., there
		/// is no other bad single pixel or bad rectangle that lies within radius
		/// pixels of this bad rectangle.
		///
		/// \param index The index of the bad rectangle to test.
		/// \param radius The pixel radius to test for isolation.

		bool IsRectIsolated (uint32 index,
							 uint32 radius) const;
							  
		/// Returns true iff the specified point is valid, i.e., lies within the
		/// specified image bounds, is different from all other bad single pixels,
		/// and is not contained in any bad rectangle. The second and third
		/// conditions are only checked if provided with a starting search index.
		///
		/// \param pt The point to test for validity.
		/// \param imageBounds The pt must lie within imageBounds to be valid.
		/// \index The search index to use (or kNoIndex, to avoid a search) for
		/// checking for validity.

		bool IsPointValid (const dng_point &pt,
						   const dng_rect &imageBounds,
						   uint32 index = kNoIndex) const;
		
	};

/*****************************************************************************/

/// \brief An opcode to fix lists of bad pixels (indicated by position) in a Bayer
/// image.

class dng_opcode_FixBadPixelsList: public dng_filter_opcode
	{
	
	protected:
	
		enum
			{
			kBadPointPadding = 2,
			kBadRectPadding  = 4
			};
	
	private:
	
		AutoPtr<dng_bad_pixel_list> fList;
		
		uint32 fBayerPhase;
	
	public:
	
		/// Construct an opcode to fix lists of bad pixels (indicated by position) in
		/// a Bayer image.
		/// \param list The list of bad pixels to fix.
		/// \param bayerPhase The phase of the Bayer mosaic pattern (0, 1, 2, 3).
	
		dng_opcode_FixBadPixelsList (AutoPtr<dng_bad_pixel_list> &list,
									 uint32 bayerPhase);
		
		dng_opcode_FixBadPixelsList (dng_stream &stream);
	
		virtual void PutData (dng_stream &stream) const;

		virtual dng_point SrcRepeat ();
	
		virtual dng_rect SrcArea (const dng_rect &dstArea,
								  const dng_rect &imageBounds);

		virtual void Prepare (dng_negative &negative,
							  uint32 threadCount,
							  const dng_point &tileSize,
							  const dng_rect &imageBounds,
							  uint32 imagePlanes,
							  uint32 bufferPixelType,
							  dng_memory_allocator &allocator);

		virtual void ProcessArea (dng_negative &negative,
								  uint32 threadIndex,
								  dng_pixel_buffer &srcBuffer,
								  dng_pixel_buffer &dstBuffer,
								  const dng_rect &dstArea,
								  const dng_rect &imageBounds);
								  
	protected:
	
		bool IsGreen (int32 row, int32 col) const
			{
			return ((row + col + fBayerPhase + (fBayerPhase >> 1)) & 1) == 0;
			}
			
		virtual void FixIsolatedPixel (dng_pixel_buffer &buffer,
									   dng_point &badPoint);
	
		virtual void FixClusteredPixel (dng_pixel_buffer &buffer,
								        uint32 pointIndex,
										const dng_rect &imageBounds);

		virtual void FixSingleColumn (dng_pixel_buffer &buffer,
									  const dng_rect &badRect);

		virtual void FixSingleRow (dng_pixel_buffer &buffer,
								   const dng_rect &badRect);

		virtual void FixClusteredRect (dng_pixel_buffer &buffer,
									   const dng_rect &badRect,
									   const dng_rect &imageBounds);

	};

/*****************************************************************************/

#endif
	
/*****************************************************************************/
