PHP 8.0.30
Preview: ImfRgbaYca.h Size: 8.21 KB
//usr/include/OpenEXR/ImfRgbaYca.h

#ifndef INCLUDED_IMF_RGBA_YCA_H
#define INCLUDED_IMF_RGBA_YCA_H

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm
// Entertainment Company Ltd.  Portions contributed and copyright held by
// others as indicated.  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above
//       copyright notice, this list of conditions and the following
//       disclaimer.
//
//     * Redistributions in binary form must reproduce the above
//       copyright notice, this list of conditions and the following
//       disclaimer in the documentation and/or other materials provided with
//       the distribution.
//
//     * Neither the name of Industrial Light & Magic nor the names of
//       any other contributors to this software may be used to endorse or
//       promote products derived from this software without specific prior
//       written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////

//-----------------------------------------------------------------------------
//
//	Conversion between RGBA (red, green, blue alpha)
//	and YCA (luminance, subsampled chroma, alpha) data:
//
//	Luminance, Y, is computed as a weighted sum of R, G, and B:
//
//		Y = yw.x * R + yw.y * G + yw.z * B
//
//	Function computeYw() computes a set of RGB-to-Y weights, yw,
//	from a set of primary and white point chromaticities.
//
//	Chroma, C, consists of two components, RY and BY:
//
//		RY = (R - Y) / Y
//		BY = (B - Y) / Y
//
//	For efficiency, the x and y subsampling rates for chroma are
//	hardwired to 2, and the chroma subsampling and reconstruction
//	filters are fixed 27-pixel wide windowed sinc functions.
//
//	Starting with an image that has RGBA data for all pixels,
//
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//		...
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//		RGBA RGBA RGBA RGBA ... RGBA RGBA
//
//	function RGBAtoYCA() converts the pixels to YCA format:
//
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//		...
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//		YCA  YCA  YCA  YCA  ... YCA  YCA
//
//	Next, decimateChomaHoriz() eliminates the chroma values from
//	the odd-numbered pixels in every scan line:
//
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YCA  YA   YCA  YA   ... YCA  YA  
//		...
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YCA  YA   YCA  YA   ... YCA  YA  
//
//	decimateChromaVert() eliminates all chroma values from the
//	odd-numbered scan lines:
//
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YA   YA   YA   YA   ... YA   YA  
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YA   YA   YA   YA   ... YA   YA  
//		...
//		YCA  YA   YCA  YA   ... YCA  YA  
//		YA   YA   YA   YA   ... YA   YA  
//
//	Finally, roundYCA() reduces the precision of the luminance
//	and chroma values so that the pixel data shrink more when
//	they are saved in a compressed file.
//
//	The output of roundYCA() can be converted back to a set
//	of RGBA pixel data that is visually very similar to the
//	original RGBA image, by calling reconstructChromaHoriz(),
//	reconstructChromaVert(), YCAtoRGBA(), and finally
//	fixSaturation().
//
//-----------------------------------------------------------------------------

#include "ImfRgba.h"
#include "ImfChromaticities.h"
#include "ImfNamespace.h"

OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER

namespace RgbaYca {


//
// Width of the chroma subsampling and reconstruction filters
//

static const int N = 27;
static const int N2 = N / 2;


//
// Convert a set of primary chromaticities into a set of weighting
// factors for computing a pixels's luminance, Y, from R, G and B
//
 
IMF_EXPORT
IMATH_NAMESPACE::V3f computeYw (const Chromaticities &cr);


//
// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha):
//
//	ycaOut[i].g = Y (rgbaIn[i]);
//	ycaOut[i].r = RY (rgbaIn[i]);
//	ycaOut[i].b = BY (rgbaIn[i]);
//	ycaOut[i].a = aIsValid? rgbaIn[i].a: 1
//
// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
//

IMF_EXPORT
void RGBAtoYCA (const IMATH_NAMESPACE::V3f &yw,
		int n,
	        bool aIsValid,
		const Rgba rgbaIn[/*n*/],
		Rgba ycaOut[/*n*/]);

//
// Perform horizontal low-pass filtering and subsampling of
// the chroma channels of an array of n pixels.  In order
// to avoid indexing off the ends of the input array during
// low-pass filtering, ycaIn must have N2 extra pixels at
// both ends.  Before calling decimateChromaHoriz(), the extra
// pixels should be filled with copies of the first and last
// "real" input pixel.
//

IMF_EXPORT
void decimateChromaHoriz (int n,
			  const Rgba ycaIn[/*n+N-1*/],
			  Rgba ycaOut[/*n*/]);

//
// Perform vertical chroma channel low-pass filtering and subsampling.
// N scan lines of input pixels are combined into a single scan line
// of output pixels.
//

IMF_EXPORT
void decimateChromaVert (int n,
			 const Rgba * const ycaIn[N],
			 Rgba ycaOut[/*n*/]);

//
// Round the luminance and chroma channels of an array of YCA
// pixels that has already been filtered and subsampled.
// The signifcands of the pixels' luminance and chroma values
// are rounded to roundY and roundC bits respectively.
//

IMF_EXPORT
void roundYCA (int n,
	       unsigned int roundY,
	       unsigned int roundC,
	       const Rgba ycaIn[/*n*/],
	       Rgba ycaOut[/*n*/]);

//
// For a scan line that has valid chroma data only for every other pixel,
// reconstruct the missing chroma values.
//

IMF_EXPORT
void reconstructChromaHoriz (int n,
			     const Rgba ycaIn[/*n+N-1*/],
			     Rgba ycaOut[/*n*/]);

//
// For a scan line that has only luminance and no valid chroma data,
// reconstruct chroma from the surronding N scan lines.
//

IMF_EXPORT
void reconstructChromaVert (int n,
			    const Rgba * const ycaIn[N],
			    Rgba ycaOut[/*n*/]);
			 
//
// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA.
// This function is the inverse of RGBAtoYCA().
// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
//

IMF_EXPORT
void YCAtoRGBA (const IMATH_NAMESPACE::V3f &yw,
		int n,
		const Rgba ycaIn[/*n*/],
		Rgba rgbaOut[/*n*/]);
			 
//
// Eliminate super-saturated pixels:
//
// Converting an image from RGBA to YCA, low-pass filtering chroma,
// and converting the result back to RGBA can produce pixels with
// super-saturated colors, where one or two of the RGB components
// become zero or negative.  (The low-pass and reconstruction filters
// introduce some amount of ringing into the chroma components.
// This can lead to negative RGB values near high-contrast edges.)
//
// The fixSaturation() function finds super-saturated pixels and
// corrects them by desaturating their colors while maintaining
// their luminance.  fixSaturation() takes three adjacent input
// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the
// saturation of rgbaIn[1], and stores the result in rgbaOut.
//

IMF_EXPORT
void fixSaturation (const IMATH_NAMESPACE::V3f &yw,
		    int n,
		    const Rgba * const rgbaIn[3],
		    Rgba rgbaOut[/*n*/]);

} // namespace RgbaYca
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT

#endif

Directory Contents

Dirs: 0 × Files: 145

Name Size Perms Modified Actions
17.22 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
757 B lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.83 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
3.73 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.34 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
9.06 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
7.37 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.08 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
5.10 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
5.63 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.41 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.58 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
3.30 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.30 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.30 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
3.40 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
1.64 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
173 B lrw-r--r-- 2021-01-13 09:02:02
Edit Download
4.78 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
2.15 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
2.08 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
4.32 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
4.54 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
5.21 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
3.38 KB lrw-r--r-- 2021-04-23 19:20:50
Edit Download
16.62 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
22.35 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
14.87 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
7.08 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
22.88 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.82 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.13 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.68 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
6.60 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
22.26 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
14.77 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
5.99 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.52 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.17 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.47 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
2.40 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
5.34 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
7.76 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.74 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
7.68 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
7.17 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
82.42 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
37.97 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.38 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
6.75 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
3.23 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
20.94 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
9.84 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
5.62 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
13.85 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.68 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
44.17 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
4.64 KB lrw-r--r-- 2021-04-23 19:20:49
Edit Download
10.27 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
6.79 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
10.36 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.67 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.10 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
11.20 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.69 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.45 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.74 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
5.38 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.25 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.71 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.39 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
12.50 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
5.97 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
8.79 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.67 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.64 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
11.01 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
6.90 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
9.37 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
6.41 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
16.08 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
13.27 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
18.10 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
14.83 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.29 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
11.29 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.67 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.11 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.26 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.48 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
9.89 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.79 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.26 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.44 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
19.27 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.86 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
8.28 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.52 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.24 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.27 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
7.45 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.90 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.65 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.42 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.67 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
5.12 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.65 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
16.19 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.94 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.29 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
6.29 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.52 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.46 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.55 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
9.66 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.04 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
7.66 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.38 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.34 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.65 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.68 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.17 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.63 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.08 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
11.33 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
8.21 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
13.26 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.58 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.70 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.55 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.24 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
3.13 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.70 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
13.82 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.55 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
17.83 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.75 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
15.89 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
7.00 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.64 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.45 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
4.64 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
2.73 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
18.74 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download
1.80 KB lrw-r--r-- 2026-04-20 03:35:59
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).