Blame IlmImf/ImfTiledRgbaFile.cpp

Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
//
Packit Service 6754ca
// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
Packit Service 6754ca
// Digital Ltd. LLC
Packit Service 6754ca
// 
Packit Service 6754ca
// All rights reserved.
Packit Service 6754ca
// 
Packit Service 6754ca
// Redistribution and use in source and binary forms, with or without
Packit Service 6754ca
// modification, are permitted provided that the following conditions are
Packit Service 6754ca
// met:
Packit Service 6754ca
// *       Redistributions of source code must retain the above copyright
Packit Service 6754ca
// notice, this list of conditions and the following disclaimer.
Packit Service 6754ca
// *       Redistributions in binary form must reproduce the above
Packit Service 6754ca
// copyright notice, this list of conditions and the following disclaimer
Packit Service 6754ca
// in the documentation and/or other materials provided with the
Packit Service 6754ca
// distribution.
Packit Service 6754ca
// *       Neither the name of Industrial Light & Magic nor the names of
Packit Service 6754ca
// its contributors may be used to endorse or promote products derived
Packit Service 6754ca
// from this software without specific prior written permission. 
Packit Service 6754ca
// 
Packit Service 6754ca
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 6754ca
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 6754ca
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit Service 6754ca
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 6754ca
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit Service 6754ca
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit Service 6754ca
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service 6754ca
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service 6754ca
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service 6754ca
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit Service 6754ca
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 6754ca
//
Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
//
Packit Service 6754ca
//	class TiledRgbaOutputFile
Packit Service 6754ca
//	class TiledRgbaInputFile
Packit Service 6754ca
//
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
Packit Service 6754ca
#include <ImfTiledRgbaFile.h>
Packit Service 6754ca
#include <ImfRgbaFile.h>
Packit Service 6754ca
#include <ImfTiledOutputFile.h>
Packit Service 6754ca
#include <ImfTiledInputFile.h>
Packit Service 6754ca
#include <ImfChannelList.h>
Packit Service 6754ca
#include <ImfTileDescriptionAttribute.h>
Packit Service 6754ca
#include <ImfStandardAttributes.h>
Packit Service 6754ca
#include <ImfRgbaYca.h>
Packit Service 6754ca
#include <ImfArray.h>
Packit Service 6754ca
#include "IlmThreadMutex.h"
Packit Service 6754ca
#include "Iex.h"
Packit Service 6754ca
Packit Service 6754ca
#include "ImfNamespace.h"
Packit Service 6754ca
Packit Service 6754ca
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
Packit Service 6754ca
Packit Service 6754ca
using namespace std;
Packit Service 6754ca
using namespace IMATH_NAMESPACE;
Packit Service 6754ca
using namespace RgbaYca;
Packit Service 6754ca
using namespace ILMTHREAD_NAMESPACE;
Packit Service 6754ca
Packit Service 6754ca
namespace {
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
insertChannels (Header &header,
Packit Service 6754ca
		RgbaChannels rgbaChannels,
Packit Service 6754ca
		const char fileName[])
Packit Service 6754ca
{
Packit Service 6754ca
    ChannelList ch;
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & (WRITE_Y | WRITE_C))
Packit Service 6754ca
    {
Packit Service 6754ca
	if (rgbaChannels & WRITE_Y)
Packit Service 6754ca
	{
Packit Service 6754ca
	    ch.insert ("Y", Channel (HALF, 1, 1));
Packit Service 6754ca
	}
Packit Service 6754ca
Packit Service 6754ca
	if (rgbaChannels & WRITE_C)
Packit Service 6754ca
	{
Packit Service 6754ca
	    THROW (IEX_NAMESPACE::ArgExc, "Cannot open file \"" << fileName << "\" "
Packit Service 6754ca
				"for writing.  Tiled image files do not "
Packit Service 6754ca
				"support subsampled chroma channels.");
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	if (rgbaChannels & WRITE_R)
Packit Service 6754ca
	    ch.insert ("R", Channel (HALF, 1, 1));
Packit Service 6754ca
Packit Service 6754ca
	if (rgbaChannels & WRITE_G)
Packit Service 6754ca
	    ch.insert ("G", Channel (HALF, 1, 1));
Packit Service 6754ca
Packit Service 6754ca
	if (rgbaChannels & WRITE_B)
Packit Service 6754ca
	    ch.insert ("B", Channel (HALF, 1, 1));
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & WRITE_A)
Packit Service 6754ca
	ch.insert ("A", Channel (HALF, 1, 1));
Packit Service 6754ca
Packit Service 6754ca
    header.channels() = ch;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
RgbaChannels
Packit Service 6754ca
rgbaChannels (const ChannelList &ch, const string &channelNamePrefix = "")
Packit Service 6754ca
{
Packit Service 6754ca
    int i = 0;
Packit Service 6754ca
Packit Service 6754ca
    if (ch.findChannel (channelNamePrefix + "R"))
Packit Service 6754ca
	i |= WRITE_R;
Packit Service 6754ca
Packit Service 6754ca
    if (ch.findChannel (channelNamePrefix + "G"))
Packit Service 6754ca
	i |= WRITE_G;
Packit Service 6754ca
    
Packit Service 6754ca
    if (ch.findChannel (channelNamePrefix + "B"))
Packit Service 6754ca
	i |= WRITE_B;
Packit Service 6754ca
Packit Service 6754ca
    if (ch.findChannel (channelNamePrefix + "A"))
Packit Service 6754ca
	i |= WRITE_A;
Packit Service 6754ca
Packit Service 6754ca
    if (ch.findChannel (channelNamePrefix + "Y"))
Packit Service 6754ca
	i |= WRITE_Y;
Packit Service 6754ca
Packit Service 6754ca
    return RgbaChannels (i);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
string
Packit Service 6754ca
prefixFromLayerName (const string &layerName, const Header &header)
Packit Service 6754ca
{
Packit Service 6754ca
    if (layerName.empty())
Packit Service 6754ca
	return "";
Packit Service 6754ca
Packit Service 6754ca
    if (hasMultiView (header) && multiView(header)[0] == layerName)
Packit Service 6754ca
	return "";
Packit Service 6754ca
Packit Service 6754ca
    return layerName + ".";
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
V3f
Packit Service 6754ca
ywFromHeader (const Header &header)
Packit Service 6754ca
{
Packit Service 6754ca
    Chromaticities cr;
Packit Service 6754ca
Packit Service 6754ca
    if (hasChromaticities (header))
Packit Service 6754ca
	cr = chromaticities (header);
Packit Service 6754ca
Packit Service 6754ca
    return computeYw (cr);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
} // namespace
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
class TiledRgbaOutputFile::ToYa: public Mutex
Packit Service 6754ca
{
Packit Service 6754ca
  public:
Packit Service 6754ca
Packit Service 6754ca
     ToYa (TiledOutputFile &outputFile, RgbaChannels rgbaChannels);
Packit Service 6754ca
Packit Service 6754ca
     void	setFrameBuffer (const Rgba *base,
Packit Service 6754ca
				size_t xStride,
Packit Service 6754ca
				size_t yStride);
Packit Service 6754ca
Packit Service 6754ca
     void	writeTile (int dx, int dy, int lx, int ly);
Packit Service 6754ca
Packit Service 6754ca
  private:
Packit Service 6754ca
Packit Service 6754ca
     TiledOutputFile &	_outputFile;
Packit Service 6754ca
     bool		_writeA;
Packit Service 6754ca
     unsigned int	_tileXSize;
Packit Service 6754ca
     unsigned int	_tileYSize;
Packit Service 6754ca
     V3f		_yw;
Packit Service 6754ca
     Array2D <Rgba>	_buf;
Packit Service 6754ca
     const Rgba *	_fbBase;
Packit Service 6754ca
     size_t		_fbXStride;
Packit Service 6754ca
     size_t		_fbYStride;
Packit Service 6754ca
};
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::ToYa::ToYa (TiledOutputFile &outputFile,
Packit Service 6754ca
				 RgbaChannels rgbaChannels)
Packit Service 6754ca
:
Packit Service 6754ca
    _outputFile (outputFile)
Packit Service 6754ca
{
Packit Service 6754ca
    _writeA = (rgbaChannels & WRITE_A)? true: false;
Packit Service 6754ca
    
Packit Service 6754ca
    const TileDescription &td = outputFile.header().tileDescription();
Packit Service 6754ca
Packit Service 6754ca
    _tileXSize = td.xSize;
Packit Service 6754ca
    _tileYSize = td.ySize;
Packit Service 6754ca
    _yw = ywFromHeader (_outputFile.header());
Packit Service 6754ca
    _buf.resizeErase (_tileYSize, _tileXSize);
Packit Service 6754ca
    _fbBase = 0;
Packit Service 6754ca
    _fbXStride = 0;
Packit Service 6754ca
    _fbYStride = 0;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaOutputFile::ToYa::setFrameBuffer (const Rgba *base,
Packit Service 6754ca
					   size_t xStride,
Packit Service 6754ca
					   size_t yStride)
Packit Service 6754ca
{
Packit Service 6754ca
    _fbBase = base;
Packit Service 6754ca
    _fbXStride = xStride;
Packit Service 6754ca
    _fbYStride = yStride;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaOutputFile::ToYa::writeTile (int dx, int dy, int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fbBase == 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the "
Packit Service 6754ca
			    "pixel data source for image file "
Packit Service 6754ca
			    "\"" << _outputFile.fileName() << "\".");
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Copy the tile's RGBA pixels into _buf and convert
Packit Service 6754ca
    // them to luminance/alpha format
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    Box2i dw = _outputFile.dataWindowForTile (dx, dy, lx, ly);
Packit Service 6754ca
    int width = dw.max.x - dw.min.x + 1;
Packit Service 6754ca
Packit Service 6754ca
    for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1)
Packit Service 6754ca
    {
Packit Service 6754ca
	for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1)
Packit Service 6754ca
	    _buf[y1][x1] = _fbBase[x * _fbXStride + y * _fbYStride];
Packit Service 6754ca
Packit Service 6754ca
	RGBAtoYCA (_yw, width, _writeA, _buf[y1], _buf[y1]);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Store the contents of _buf in the output file
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    FrameBuffer fb;
Packit Service 6754ca
Packit Service 6754ca
    fb.insert ("Y", Slice (HALF,				   // type
Packit Service 6754ca
			   (char *) &_buf[-dw.min.y][-dw.min.x].g, // base
Packit Service 6754ca
			   sizeof (Rgba),			   // xStride
Packit Service 6754ca
			   sizeof (Rgba) * _tileXSize));	   // yStride
Packit Service 6754ca
Packit Service 6754ca
    fb.insert ("A", Slice (HALF,				   // type
Packit Service 6754ca
			   (char *) &_buf[-dw.min.y][-dw.min.x].a, // base
Packit Service 6754ca
			   sizeof (Rgba),			   // xStride
Packit Service 6754ca
			   sizeof (Rgba) * _tileXSize));	   // yStride
Packit Service 6754ca
Packit Service 6754ca
    _outputFile.setFrameBuffer (fb);
Packit Service 6754ca
    _outputFile.writeTile (dx, dy, lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::TiledRgbaOutputFile
Packit Service 6754ca
    (const char name[],
Packit Service 6754ca
     const Header &header,
Packit Service 6754ca
     RgbaChannels rgbaChannels,
Packit Service 6754ca
     int tileXSize,
Packit Service 6754ca
     int tileYSize,
Packit Service 6754ca
     LevelMode mode,
Packit Service 6754ca
     LevelRoundingMode rmode,
Packit Service 6754ca
     int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _outputFile (0),
Packit Service 6754ca
    _toYa (0)
Packit Service 6754ca
{
Packit Service 6754ca
    Header hd (header);
Packit Service 6754ca
    insertChannels (hd, rgbaChannels, name);
Packit Service 6754ca
    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
Packit Service 6754ca
    _outputFile = new TiledOutputFile (name, hd, numThreads);
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & WRITE_Y)
Packit Service 6754ca
	_toYa = new ToYa (*_outputFile, rgbaChannels);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::TiledRgbaOutputFile
Packit Service 6754ca
    (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os,
Packit Service 6754ca
     const Header &header,
Packit Service 6754ca
     RgbaChannels rgbaChannels,
Packit Service 6754ca
     int tileXSize,
Packit Service 6754ca
     int tileYSize,
Packit Service 6754ca
     LevelMode mode,
Packit Service 6754ca
     LevelRoundingMode rmode,
Packit Service 6754ca
     int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _outputFile (0),
Packit Service 6754ca
    _toYa (0)
Packit Service 6754ca
{
Packit Service 6754ca
    Header hd (header);
Packit Service 6754ca
    insertChannels (hd, rgbaChannels, os.fileName());
Packit Service 6754ca
    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
Packit Service 6754ca
    _outputFile = new TiledOutputFile (os, hd, numThreads);
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & WRITE_Y)
Packit Service 6754ca
	_toYa = new ToYa (*_outputFile, rgbaChannels);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::TiledRgbaOutputFile
Packit Service 6754ca
    (const char name[],
Packit Service 6754ca
     int tileXSize,
Packit Service 6754ca
     int tileYSize,
Packit Service 6754ca
     LevelMode mode,
Packit Service 6754ca
     LevelRoundingMode rmode,
Packit Service 6754ca
     const IMATH_NAMESPACE::Box2i &displayWindow,
Packit Service 6754ca
     const IMATH_NAMESPACE::Box2i &dataWindow,
Packit Service 6754ca
     RgbaChannels rgbaChannels,
Packit Service 6754ca
     float pixelAspectRatio,
Packit Service 6754ca
     const IMATH_NAMESPACE::V2f screenWindowCenter,
Packit Service 6754ca
     float screenWindowWidth,
Packit Service 6754ca
     LineOrder lineOrder,
Packit Service 6754ca
     Compression compression,
Packit Service 6754ca
     int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _outputFile (0),
Packit Service 6754ca
    _toYa (0)
Packit Service 6754ca
{
Packit Service 6754ca
    Header hd (displayWindow,
Packit Service 6754ca
	       dataWindow.isEmpty()? displayWindow: dataWindow,
Packit Service 6754ca
	       pixelAspectRatio,
Packit Service 6754ca
	       screenWindowCenter,
Packit Service 6754ca
	       screenWindowWidth,
Packit Service 6754ca
	       lineOrder,
Packit Service 6754ca
	       compression);
Packit Service 6754ca
Packit Service 6754ca
    insertChannels (hd, rgbaChannels, name);
Packit Service 6754ca
    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
Packit Service 6754ca
    _outputFile = new TiledOutputFile (name, hd, numThreads);
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & WRITE_Y)
Packit Service 6754ca
	_toYa = new ToYa (*_outputFile, rgbaChannels);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::TiledRgbaOutputFile
Packit Service 6754ca
    (const char name[],
Packit Service 6754ca
     int width,
Packit Service 6754ca
     int height,
Packit Service 6754ca
     int tileXSize,
Packit Service 6754ca
     int tileYSize,
Packit Service 6754ca
     LevelMode mode,
Packit Service 6754ca
     LevelRoundingMode rmode,
Packit Service 6754ca
     RgbaChannels rgbaChannels,
Packit Service 6754ca
     float pixelAspectRatio,
Packit Service 6754ca
     const IMATH_NAMESPACE::V2f screenWindowCenter,
Packit Service 6754ca
     float screenWindowWidth,
Packit Service 6754ca
     LineOrder lineOrder,
Packit Service 6754ca
     Compression compression,
Packit Service 6754ca
     int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _outputFile (0),
Packit Service 6754ca
    _toYa (0)
Packit Service 6754ca
{
Packit Service 6754ca
    Header hd (width,
Packit Service 6754ca
	       height,
Packit Service 6754ca
	       pixelAspectRatio,
Packit Service 6754ca
	       screenWindowCenter,
Packit Service 6754ca
	       screenWindowWidth,
Packit Service 6754ca
	       lineOrder,
Packit Service 6754ca
	       compression);
Packit Service 6754ca
Packit Service 6754ca
    insertChannels (hd, rgbaChannels, name);
Packit Service 6754ca
    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
Packit Service 6754ca
    _outputFile = new TiledOutputFile (name, hd, numThreads);
Packit Service 6754ca
Packit Service 6754ca
    if (rgbaChannels & WRITE_Y)
Packit Service 6754ca
	_toYa = new ToYa (*_outputFile, rgbaChannels);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaOutputFile::~TiledRgbaOutputFile ()
Packit Service 6754ca
{
Packit Service 6754ca
    delete _outputFile;
Packit Service 6754ca
    delete _toYa;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaOutputFile::setFrameBuffer (const Rgba *base,
Packit Service 6754ca
				     size_t xStride,
Packit Service 6754ca
				     size_t yStride)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_toYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_toYa);
Packit Service 6754ca
	_toYa->setFrameBuffer (base, xStride, yStride);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	size_t xs = xStride * sizeof (Rgba);
Packit Service 6754ca
	size_t ys = yStride * sizeof (Rgba);
Packit Service 6754ca
Packit Service 6754ca
	FrameBuffer fb;
Packit Service 6754ca
Packit Service 6754ca
	fb.insert ("R", Slice (HALF, (char *) &base[0].r, xs, ys));
Packit Service 6754ca
	fb.insert ("G", Slice (HALF, (char *) &base[0].g, xs, ys));
Packit Service 6754ca
	fb.insert ("B", Slice (HALF, (char *) &base[0].b, xs, ys));
Packit Service 6754ca
	fb.insert ("A", Slice (HALF, (char *) &base[0].a, xs, ys));
Packit Service 6754ca
Packit Service 6754ca
	_outputFile->setFrameBuffer (fb);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const Header &
Packit Service 6754ca
TiledRgbaOutputFile::header () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const FrameBuffer &
Packit Service 6754ca
TiledRgbaOutputFile::frameBuffer () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->frameBuffer();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::Box2i &
Packit Service 6754ca
TiledRgbaOutputFile::displayWindow () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().displayWindow();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::Box2i &
Packit Service 6754ca
TiledRgbaOutputFile::dataWindow () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().dataWindow();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
float	
Packit Service 6754ca
TiledRgbaOutputFile::pixelAspectRatio () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().pixelAspectRatio();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::V2f
Packit Service 6754ca
TiledRgbaOutputFile::screenWindowCenter () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().screenWindowCenter();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
float	
Packit Service 6754ca
TiledRgbaOutputFile::screenWindowWidth () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().screenWindowWidth();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LineOrder
Packit Service 6754ca
TiledRgbaOutputFile::lineOrder () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().lineOrder();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
Compression
Packit Service 6754ca
TiledRgbaOutputFile::compression () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->header().compression();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
RgbaChannels
Packit Service 6754ca
TiledRgbaOutputFile::channels () const
Packit Service 6754ca
{
Packit Service 6754ca
    return rgbaChannels (_outputFile->header().channels());
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
unsigned int
Packit Service 6754ca
TiledRgbaOutputFile::tileXSize () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->tileXSize();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
unsigned int
Packit Service 6754ca
TiledRgbaOutputFile::tileYSize () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->tileYSize();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LevelMode
Packit Service 6754ca
TiledRgbaOutputFile::levelMode () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->levelMode();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LevelRoundingMode
Packit Service 6754ca
TiledRgbaOutputFile::levelRoundingMode () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->levelRoundingMode();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::numLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->numLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::numXLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->numXLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::numYLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->numYLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
bool
Packit Service 6754ca
TiledRgbaOutputFile::isValidLevel (int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
    return _outputFile->isValidLevel (lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::levelWidth (int lx) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->levelWidth (lx);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::levelHeight (int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->levelHeight (ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::numXTiles (int lx) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->numXTiles (lx);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaOutputFile::numYTiles (int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->numYTiles (ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaOutputFile::dataWindowForLevel (int l) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->dataWindowForLevel (l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaOutputFile::dataWindowForLevel (int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->dataWindowForLevel (lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int l) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->dataWindowForTile (dx, dy, l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _outputFile->dataWindowForTile (dx, dy, lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaOutputFile::writeTile (int dx, int dy, int l)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_toYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_toYa);
Packit Service 6754ca
	_toYa->writeTile (dx, dy, l, l);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	 _outputFile->writeTile (dx, dy, l);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaOutputFile::writeTile (int dx, int dy, int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_toYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_toYa);
Packit Service 6754ca
	_toYa->writeTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	 _outputFile->writeTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaOutputFile::writeTiles
Packit Service 6754ca
    (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_toYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_toYa);
Packit Service 6754ca
Packit Service 6754ca
        for (int dy = dyMin; dy <= dyMax; dy++)
Packit Service 6754ca
            for (int dx = dxMin; dx <= dxMax; dx++)
Packit Service 6754ca
	        _toYa->writeTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
        _outputFile->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaOutputFile::writeTiles
Packit Service 6754ca
    (int dxMin, int dxMax, int dyMin, int dyMax, int l)
Packit Service 6754ca
{
Packit Service 6754ca
    writeTiles (dxMin, dxMax, dyMin, dyMax, l, l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
class TiledRgbaInputFile::FromYa: public Mutex
Packit Service 6754ca
{
Packit Service 6754ca
  public:
Packit Service 6754ca
Packit Service 6754ca
     FromYa (TiledInputFile &inputFile);
Packit Service 6754ca
Packit Service 6754ca
     void	setFrameBuffer (Rgba *base,
Packit Service 6754ca
				size_t xStride,
Packit Service 6754ca
				size_t yStride,
Packit Service 6754ca
				const string &channelNamePrefix);
Packit Service 6754ca
Packit Service 6754ca
     void	readTile (int dx, int dy, int lx, int ly);
Packit Service 6754ca
Packit Service 6754ca
  private:
Packit Service 6754ca
Packit Service 6754ca
     TiledInputFile &	_inputFile;
Packit Service 6754ca
     unsigned int	_tileXSize;
Packit Service 6754ca
     unsigned int	_tileYSize;
Packit Service 6754ca
     V3f		_yw;
Packit Service 6754ca
     Array2D <Rgba>	_buf;
Packit Service 6754ca
     Rgba *		_fbBase;
Packit Service 6754ca
     size_t		_fbXStride;
Packit Service 6754ca
     size_t		_fbYStride;
Packit Service 6754ca
};
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::FromYa::FromYa (TiledInputFile &inputFile)
Packit Service 6754ca
:
Packit Service 6754ca
    _inputFile (inputFile)
Packit Service 6754ca
{
Packit Service 6754ca
    const TileDescription &td = inputFile.header().tileDescription();
Packit Service 6754ca
Packit Service 6754ca
    _tileXSize = td.xSize;
Packit Service 6754ca
    _tileYSize = td.ySize;
Packit Service 6754ca
    _yw = ywFromHeader (_inputFile.header());
Packit Service 6754ca
    _buf.resizeErase (_tileYSize, _tileXSize);
Packit Service 6754ca
    _fbBase = 0;
Packit Service 6754ca
    _fbXStride = 0;
Packit Service 6754ca
    _fbYStride = 0;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaInputFile::FromYa::setFrameBuffer (Rgba *base,
Packit Service 6754ca
					    size_t xStride,
Packit Service 6754ca
					    size_t yStride,
Packit Service 6754ca
					    const string &channelNamePrefix)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fbBase == 0)
Packit Service 6754ca
{
Packit Service 6754ca
	FrameBuffer fb;
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (channelNamePrefix + "Y",
Packit Service 6754ca
		   Slice (HALF,				// type
Packit Service 6754ca
			  (char *) &_buf[0][0].g,	// base
Packit Service 6754ca
			  sizeof (Rgba),		// xStride
Packit Service 6754ca
			  sizeof (Rgba) * _tileXSize,	// yStride
Packit Service 6754ca
			  1, 1,				// sampling
Packit Service 6754ca
			  0.0,				// fillValue
Packit Service 6754ca
			  true, true));			// tileCoordinates
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (channelNamePrefix + "A",
Packit Service 6754ca
		   Slice (HALF,				// type
Packit Service 6754ca
			  (char *) &_buf[0][0].a,	// base
Packit Service 6754ca
			  sizeof (Rgba),		// xStride
Packit Service 6754ca
			  sizeof (Rgba) * _tileXSize,	// yStride
Packit Service 6754ca
			  1, 1,				// sampling
Packit Service 6754ca
			  1.0,				// fillValue
Packit Service 6754ca
			  true, true));			// tileCoordinates
Packit Service 6754ca
Packit Service 6754ca
	_inputFile.setFrameBuffer (fb);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    _fbBase = base;
Packit Service 6754ca
    _fbXStride = xStride;
Packit Service 6754ca
    _fbYStride = yStride;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fbBase == 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the "
Packit Service 6754ca
			    "pixel data destination for image file "
Packit Service 6754ca
			    "\"" << _inputFile.fileName() << "\".");
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Read the tile requested by the caller into _buf.
Packit Service 6754ca
    //
Packit Service 6754ca
    
Packit Service 6754ca
    _inputFile.readTile (dx, dy, lx, ly);
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Convert the luminance/alpha pixels to RGBA
Packit Service 6754ca
    // and copy them into the caller's frame buffer.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    Box2i dw = _inputFile.dataWindowForTile (dx, dy, lx, ly);
Packit Service 6754ca
    int width = dw.max.x - dw.min.x + 1;
Packit Service 6754ca
Packit Service 6754ca
    for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1)
Packit Service 6754ca
    {
Packit Service 6754ca
	for (int x1 = 0; x1 < width; ++x1)
Packit Service 6754ca
	{
Packit Service 6754ca
	    _buf[y1][x1].r = 0;
Packit Service 6754ca
	    _buf[y1][x1].b = 0;
Packit Service 6754ca
	}
Packit Service 6754ca
Packit Service 6754ca
	YCAtoRGBA (_yw, width, _buf[y1], _buf[y1]);
Packit Service 6754ca
Packit Service 6754ca
	for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1)
Packit Service 6754ca
	{
Packit Service 6754ca
	    _fbBase[x * _fbXStride + y * _fbYStride] = _buf[y1][x1];
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::TiledRgbaInputFile (const char name[], int numThreads):
Packit Service 6754ca
    _inputFile (new TiledInputFile (name, numThreads)),
Packit Service 6754ca
    _fromYa (0),
Packit Service 6754ca
    _channelNamePrefix ("")
Packit Service 6754ca
{
Packit Service 6754ca
    if (channels() & WRITE_Y)
Packit Service 6754ca
	_fromYa = new FromYa (*_inputFile);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads):
Packit Service 6754ca
    _inputFile (new TiledInputFile (is, numThreads)),
Packit Service 6754ca
    _fromYa (0),
Packit Service 6754ca
    _channelNamePrefix ("")
Packit Service 6754ca
{
Packit Service 6754ca
    if (channels() & WRITE_Y)
Packit Service 6754ca
	_fromYa = new FromYa (*_inputFile);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::TiledRgbaInputFile (const char name[],
Packit Service 6754ca
					const string &layerName,
Packit Service 6754ca
					int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _inputFile (new TiledInputFile (name, numThreads)),
Packit Service 6754ca
    _fromYa (0),
Packit Service 6754ca
    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
Packit Service 6754ca
{
Packit Service 6754ca
    if (channels() & WRITE_Y)
Packit Service 6754ca
	_fromYa = new FromYa (*_inputFile);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is,
Packit Service 6754ca
					const string &layerName,
Packit Service 6754ca
					int numThreads)
Packit Service 6754ca
:
Packit Service 6754ca
    _inputFile (new TiledInputFile (is, numThreads)),
Packit Service 6754ca
    _fromYa (0),
Packit Service 6754ca
    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
Packit Service 6754ca
{
Packit Service 6754ca
    if (channels() & WRITE_Y)
Packit Service 6754ca
	_fromYa = new FromYa (*_inputFile);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
TiledRgbaInputFile::~TiledRgbaInputFile ()
Packit Service 6754ca
{
Packit Service 6754ca
    delete _inputFile;
Packit Service 6754ca
    delete _fromYa;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fromYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_fromYa);
Packit Service 6754ca
	_fromYa->setFrameBuffer (base, xStride, yStride, _channelNamePrefix);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	size_t xs = xStride * sizeof (Rgba);
Packit Service 6754ca
	size_t ys = yStride * sizeof (Rgba);
Packit Service 6754ca
Packit Service 6754ca
	FrameBuffer fb;
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (_channelNamePrefix + "R",
Packit Service 6754ca
		   Slice (HALF,
Packit Service 6754ca
			       (char *) &base[0].r,
Packit Service 6754ca
			       xs, ys,
Packit Service 6754ca
			       1, 1,	// xSampling, ySampling
Packit Service 6754ca
			       0.0));	// fillValue
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (_channelNamePrefix + "G",
Packit Service 6754ca
		   Slice (HALF,
Packit Service 6754ca
			       (char *) &base[0].g,
Packit Service 6754ca
			       xs, ys,
Packit Service 6754ca
			       1, 1,	// xSampling, ySampling
Packit Service 6754ca
			       0.0));	// fillValue
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (_channelNamePrefix + "B",
Packit Service 6754ca
		   Slice (HALF,
Packit Service 6754ca
			       (char *) &base[0].b,
Packit Service 6754ca
			       xs, ys,
Packit Service 6754ca
			       1, 1,	// xSampling, ySampling
Packit Service 6754ca
			       0.0));	// fillValue
Packit Service 6754ca
Packit Service 6754ca
	fb.insert (_channelNamePrefix + "A",
Packit Service 6754ca
		   Slice (HALF,
Packit Service 6754ca
			       (char *) &base[0].a,
Packit Service 6754ca
			       xs, ys,
Packit Service 6754ca
			       1, 1,	// xSampling, ySampling
Packit Service 6754ca
			       1.0));	// fillValue
Packit Service 6754ca
Packit Service 6754ca
	_inputFile->setFrameBuffer (fb);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void		
Packit Service 6754ca
TiledRgbaInputFile::setLayerName (const std::string &layerName)
Packit Service 6754ca
{
Packit Service 6754ca
    delete _fromYa;
Packit Service 6754ca
    _fromYa = 0;
Packit Service 6754ca
    
Packit Service 6754ca
    _channelNamePrefix = prefixFromLayerName (layerName, _inputFile->header());
Packit Service 6754ca
Packit Service 6754ca
    if (channels() & WRITE_Y)
Packit Service 6754ca
	_fromYa = new FromYa (*_inputFile);
Packit Service 6754ca
Packit Service 6754ca
    FrameBuffer fb;
Packit Service 6754ca
    _inputFile->setFrameBuffer (fb);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const Header &
Packit Service 6754ca
TiledRgbaInputFile::header () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const char *
Packit Service 6754ca
TiledRgbaInputFile::fileName () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->fileName();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const FrameBuffer &	
Packit Service 6754ca
TiledRgbaInputFile::frameBuffer () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->frameBuffer();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::Box2i &
Packit Service 6754ca
TiledRgbaInputFile::displayWindow () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().displayWindow();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::Box2i &
Packit Service 6754ca
TiledRgbaInputFile::dataWindow () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().dataWindow();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
float	
Packit Service 6754ca
TiledRgbaInputFile::pixelAspectRatio () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().pixelAspectRatio();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
const IMATH_NAMESPACE::V2f	
Packit Service 6754ca
TiledRgbaInputFile::screenWindowCenter () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().screenWindowCenter();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
float	
Packit Service 6754ca
TiledRgbaInputFile::screenWindowWidth () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().screenWindowWidth();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LineOrder
Packit Service 6754ca
TiledRgbaInputFile::lineOrder () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().lineOrder();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
Compression
Packit Service 6754ca
TiledRgbaInputFile::compression () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->header().compression();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
RgbaChannels	
Packit Service 6754ca
TiledRgbaInputFile::channels () const
Packit Service 6754ca
{
Packit Service 6754ca
    return rgbaChannels (_inputFile->header().channels(), _channelNamePrefix);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::version () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->version();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
bool
Packit Service 6754ca
TiledRgbaInputFile::isComplete () const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->isComplete();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
unsigned int
Packit Service 6754ca
TiledRgbaInputFile::tileXSize () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->tileXSize();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
unsigned int
Packit Service 6754ca
TiledRgbaInputFile::tileYSize () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->tileYSize();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LevelMode
Packit Service 6754ca
TiledRgbaInputFile::levelMode () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->levelMode();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
LevelRoundingMode
Packit Service 6754ca
TiledRgbaInputFile::levelRoundingMode () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->levelRoundingMode();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::numLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->numLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::numXLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->numXLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::numYLevels () const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->numYLevels();
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
bool
Packit Service 6754ca
TiledRgbaInputFile::isValidLevel (int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
    return _inputFile->isValidLevel (lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::levelWidth (int lx) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->levelWidth (lx);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::levelHeight (int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->levelHeight (ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::numXTiles (int lx) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->numXTiles(lx);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
TiledRgbaInputFile::numYTiles (int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->numYTiles(ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaInputFile::dataWindowForLevel (int l) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->dataWindowForLevel (l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaInputFile::dataWindowForLevel (int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->dataWindowForLevel (lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int l) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->dataWindowForTile (dx, dy, l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
IMATH_NAMESPACE::Box2i
Packit Service 6754ca
TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
Packit Service 6754ca
{
Packit Service 6754ca
     return _inputFile->dataWindowForTile (dx, dy, lx, ly);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaInputFile::readTile (int dx, int dy, int l)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fromYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_fromYa);
Packit Service 6754ca
	_fromYa->readTile (dx, dy, l, l);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	 _inputFile->readTile (dx, dy, l);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
TiledRgbaInputFile::readTile (int dx, int dy, int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fromYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_fromYa);
Packit Service 6754ca
	_fromYa->readTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	 _inputFile->readTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,
Packit Service 6754ca
                               int lx, int ly)
Packit Service 6754ca
{
Packit Service 6754ca
    if (_fromYa)
Packit Service 6754ca
    {
Packit Service 6754ca
	Lock lock (*_fromYa);
Packit Service 6754ca
Packit Service 6754ca
        for (int dy = dyMin; dy <= dyMax; dy++)
Packit Service 6754ca
            for (int dx = dxMin; dx <= dxMax; dx++)
Packit Service 6754ca
	        _fromYa->readTile (dx, dy, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
        _inputFile->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,
Packit Service 6754ca
                               int l)
Packit Service 6754ca
{
Packit Service 6754ca
    readTiles (dxMin, dxMax, dyMin, dyMax, l, l);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void		
Packit Service 6754ca
TiledRgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[])
Packit Service 6754ca
{
Packit Service 6754ca
    _outputFile->updatePreviewImage (newPixels);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void	
Packit Service 6754ca
TiledRgbaOutputFile::breakTile  (int dx, int dy, int lx, int ly,
Packit Service 6754ca
				 int offset, int length, char c)
Packit Service 6754ca
{
Packit Service 6754ca
    _outputFile->breakTile (dx, dy, lx, ly, offset, length, c);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT