/*****************************************************************************/
// Copyright 2006-2007 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_xy_coord.cpp#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

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

#include "dng_xy_coord.h"

#include "dng_matrix.h"
#include "dng_utils.h"

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

dng_xy_coord XYZtoXY (const dng_vector_3 &coord)
	{
	
	real64 X = coord [0];
	real64 Y = coord [1];
	real64 Z = coord [2];
	
	real64 total = X + Y + Z;
	
	if (total > 0.0)
		{
		
		return dng_xy_coord (X / total,
						     Y / total);
						
		}
		
	return D50_xy_coord ();
		
	}

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

dng_vector_3 XYtoXYZ (const dng_xy_coord &coord)
	{
	
	dng_xy_coord temp = coord;
	
	// Restrict xy coord to someplace inside the range of real xy coordinates.
	// This prevents math from doing strange things when users specify
	// extreme temperature/tint coordinates.
	
	temp.x = Pin_real64 (0.000001, temp.x, 0.999999);
	temp.y = Pin_real64 (0.000001, temp.y, 0.999999);
	
	if (temp.x + temp.y > 0.999999)
		{
		real64 scale = 0.999999 / (temp.x + temp.y);
		temp.x *= scale;
		temp.y *= scale;
		}
	
	return dng_vector_3 (temp.x / temp.y,
					     1.0,
					     (1.0 - temp.x - temp.y) / temp.y);
	
	}

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

dng_xy_coord PCStoXY ()
	{
	
	return D50_xy_coord ();
	
	}

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

dng_vector_3 PCStoXYZ ()
	{
	
	return XYtoXYZ (PCStoXY ());
	
	}

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