Blame exrstdattr/main.cpp

Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
//
Packit Service 6754ca
// Copyright (c) 2004-2014, 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
//
Packit Service 6754ca
//	exrstdattr -- a program that can set the values of most
Packit Service 6754ca
//	standard attributes in an OpenEXR image file's header.
Packit Service 6754ca
//
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
Packit Service 6754ca
#include <ImfStandardAttributes.h>
Packit Service 6754ca
#include <ImfVecAttribute.h>
Packit Service 6754ca
#include <ImfIntAttribute.h>
Packit Service 6754ca
#include <ImfInputFile.h>
Packit Service 6754ca
#include <ImfOutputFile.h>
Packit Service 6754ca
#include <ImfMultiPartInputFile.h>
Packit Service 6754ca
#include <ImfMultiPartOutputFile.h>
Packit Service 6754ca
#include <ImfTiledOutputFile.h>
Packit Service 6754ca
#include <ImfNamespace.h>
Packit Service 6754ca
#include <ImfPartType.h>
Packit Service 6754ca
#include <ImfInputPart.h>
Packit Service 6754ca
#include <ImfOutputPart.h>
Packit Service 6754ca
#include <ImfTiledInputPart.h>
Packit Service 6754ca
#include <ImfTiledOutputPart.h>
Packit Service 6754ca
#include <ImfDeepScanLineInputPart.h>
Packit Service 6754ca
#include <ImfDeepScanLineOutputPart.h>
Packit Service 6754ca
#include <ImfDeepTiledInputPart.h>
Packit Service 6754ca
#include <ImfDeepTiledOutputPart.h>
Packit Service 6754ca
#include <ImathNamespace.h>
Packit Service 6754ca
Packit Service 6754ca
#include <map>
Packit Service 6754ca
#include <string>
Packit Service 6754ca
#include <iostream>
Packit Service 6754ca
#include <exception>
Packit Service 6754ca
#include <string.h>
Packit Service 6754ca
#include <stdlib.h>
Packit Service 6754ca
Packit Service 6754ca
using namespace std;
Packit Service 6754ca
using namespace OPENEXR_IMF_NAMESPACE;
Packit Service 6754ca
using namespace IMATH_NAMESPACE;
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
usageMessage (const char argv0[], bool verbose = false)
Packit Service 6754ca
{
Packit Service 6754ca
    cerr << "usage: " << argv0 << " [commands] infile outfile" << endl;
Packit Service 6754ca
Packit Service 6754ca
    if (verbose)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "\n"
Packit Service 6754ca
		"Reads OpenEXR image file infile, sets the values of one\n"
Packit Service 6754ca
		"or more attributes in the headers of the file, and saves\n"
Packit Service 6754ca
		"the result in outfile.  Infile and outfile must not refer\n"
Packit Service 6754ca
		"to the same file (the program cannot edit an image file "
Packit Service 6754ca
                "\"in place\").\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
                "Command for selecting headers:\n"
Packit Service 6754ca
                "\n"
Packit Service 6754ca
                "  -part i\n"
Packit Service 6754ca
                "        If i is greater than or equal to zero, and less\n"
Packit Service 6754ca
                "        than the number of parts in the input file, then\n"
Packit Service 6754ca
                "        the header for part i becomes \"current.\" If i\n"
Packit Service 6754ca
                "        is \"any\" or -1, then all headers become current.\n"
Packit Service 6754ca
                "        Subsequent attribute setting commands affect only\n"
Packit Service 6754ca
                "        the current header or headers.  All headers are\n"
Packit Service 6754ca
                "        current before the first -part command.\n"
Packit Service 6754ca
                "\n"
Packit Service 6754ca
                "        For example, the command sequence\n"
Packit Service 6754ca
                "\n"
Packit Service 6754ca
                "         -focus 3 -part 2 -aperture 8 -expTime 0.01 "
Packit Service 6754ca
                         "-part any -owner luke\n"
Packit Service 6754ca
                "\n"
Packit Service 6754ca
                "        sets the focus and owner attributes in all\n"
Packit Service 6754ca
                "        headers, as well as the aperture and expTime\n"
Packit Service 6754ca
                "        attributes in the header of part 2.\n"
Packit Service 6754ca
                "\n"
Packit Service 6754ca
		"Commands for setting attribute values:\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -chromaticities f f f f f f f f\n"
Packit Service 6754ca
		"        CIE xy chromaticities for the red, green\n"
Packit Service 6754ca
		"	 and blue primaries, and for the white point\n"
Packit Service 6754ca
		"        (8 floats)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -whiteLuminance f\n"
Packit Service 6754ca
		"        white luminance, in candelas per square meter\n"
Packit Service 6754ca
		"        (float, >= 0.0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -adoptedNeutral f f\n"
Packit Service 6754ca
		"        CIE xy coordinates that should be considered\n"
Packit Service 6754ca
		"        \"neutral\" during color rendering.  Pixels in\n"
Packit Service 6754ca
		"        the image file whose xy coordinates match the\n"
Packit Service 6754ca
		"        adoptedNeutral value should be mapped to neutral\n"
Packit Service 6754ca
		"        values on the display. (2 floats)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -renderingTransform s\n"
Packit Service 6754ca
		"        name of the CTL rendering transform for this\n"
Packit Service 6754ca
		"        image (string)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -lookModTransform s\n"
Packit Service 6754ca
		"        name of the CTL look modification transform for\n"
Packit Service 6754ca
		"        this image (string)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -xDensity f\n"
Packit Service 6754ca
		"        horizontal output density, in pixels per inch\n"
Packit Service 6754ca
		"        (float, >= 0.0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -owner s\n"
Packit Service 6754ca
		"        name of the owner of the image (string)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -comments s\n"
Packit Service 6754ca
		"        additional information about the image (string)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -capDate s\n"
Packit Service 6754ca
		"        date when the image was created or\n"
Packit Service 6754ca
		"        captured, in local time (string,\n"
Packit Service 6754ca
		"        formatted as YYYY:MM:DD hh:mm:ss)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -utcOffset f\n"
Packit Service 6754ca
		"        offset of local time at capDate from UTC, in\n"
Packit Service 6754ca
		"        seconds (float, UTC == local time + x)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -longitude f\n"
Packit Service 6754ca
		"  -latitude f\n"
Packit Service 6754ca
		"  -altitude f\n"
Packit Service 6754ca
		"        location where the image was recorded, in\n"
Packit Service 6754ca
		"        degrees east of Greenwich and north of the\n"
Packit Service 6754ca
		"        equator, and in meters above sea level\n"
Packit Service 6754ca
		"        (float)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -focus f\n"
Packit Service 6754ca
		"        the camera's focus distance, in meters\n"
Packit Service 6754ca
		"        (float, > 0, or \"infinity\")\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -expTime f\n"
Packit Service 6754ca
		"        exposure time, in seconds (float, >= 0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -aperture f\n"
Packit Service 6754ca
		"        lens apterture, in f-stops (float, >= 0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -isoSpeed f\n"
Packit Service 6754ca
		"        effective speed of the film or image\n"
Packit Service 6754ca
		"        sensor that was used to record the image\n"
Packit Service 6754ca
		"        (float, >= 0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -envmap s\n"
Packit Service 6754ca
		"        indicates that the image is an environment map\n"
Packit Service 6754ca
		"        (string, LATLONG or CUBE)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -framesPerSecond i i\n"
Packit Service 6754ca
		"        playback frame rate expressed as a ratio of two\n"
Packit Service 6754ca
		"        integers, n and d (the frame rate is n/d frames\n"
Packit Service 6754ca
		"        per second)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -keyCode i i i i i i i\n"
Packit Service 6754ca
		"        key code that uniquely identifies a motion\n"
Packit Service 6754ca
		"        picture film frame using 7 integers:\n"
Packit Service 6754ca
	        "         * film manufacturer code (0 - 99)\n"
Packit Service 6754ca
	        "         * film type code (0 - 99)\n"
Packit Service 6754ca
	        "         * prefix to identify film roll (0 - 999999)\n"
Packit Service 6754ca
	        "         * count, increments once every perfsPerCount\n"
Packit Service 6754ca
		"           perforations (0 - 9999)\n"
Packit Service 6754ca
	        "         * offset of frame, in perforations from\n"
Packit Service 6754ca
		"           zero-frame reference mark (0 - 119)\n"
Packit Service 6754ca
	        "         * number of perforations per frame (1 - 15)\n"
Packit Service 6754ca
	        "         * number of perforations per count (20 - 120)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -timeCode i i\n"
Packit Service 6754ca
		"        SMPTE time and control code, specified as a pair\n"
Packit Service 6754ca
		"        of 8-digit base-16 integers.  The first number\n"
Packit Service 6754ca
		"        contains the time address and flags (drop frame,\n"
Packit Service 6754ca
		"        color frame, field/phase, bgf0, bgf1, bgf2).\n"
Packit Service 6754ca
		"        The second number contains the user data and\n"
Packit Service 6754ca
		"        control codes.\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -wrapmodes s\n"
Packit Service 6754ca
		"        if the image is used as a texture map, specifies\n"
Packit Service 6754ca
		"        how the image should be extrapolated outside the\n"
Packit Service 6754ca
		"        zero-to-one texture coordinate range\n"
Packit Service 6754ca
		"        (string, e.g. \"clamp\" or \"periodic,clamp\")\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -pixelAspectRatio f\n"
Packit Service 6754ca
		"        width divided by height of a pixel\n"
Packit Service 6754ca
		"        (float, >= 0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -screenWindowWidth f\n"
Packit Service 6754ca
		"        width of the screen window (float, >= 0)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -screenWindowCenter f f\n"
Packit Service 6754ca
		"        center of the screen window (2 floats)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -string s s\n"
Packit Service 6754ca
		"        custom string attribute\n"
Packit Service 6754ca
		"        (2 strings, attribute name and value)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -float s f\n"
Packit Service 6754ca
		"        custom float attribute (string + float,\n"
Packit Service 6754ca
		"        attribute name and value)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -int s i\n"
Packit Service 6754ca
		"        custom integer attribute (string + integer,\n"
Packit Service 6754ca
		"        attribute name and value)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"Other Commands:\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"  -h        prints this message\n";
Packit Service 6754ca
Packit Service 6754ca
	 cerr << endl;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    exit (1);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
struct SetAttr
Packit Service 6754ca
{
Packit Service 6754ca
    string      name;
Packit Service 6754ca
    int         part;
Packit Service 6754ca
    Attribute * attr;
Packit Service 6754ca
    
Packit Service 6754ca
    SetAttr (const string &name, int part, Attribute *attr):
Packit Service 6754ca
        name (name), part (part), attr (attr) {}
Packit Service 6754ca
};
Packit Service 6754ca
Packit Service 6754ca
typedef vector <SetAttr> SetAttrVector;
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
isNonNegative (const char attrName[], float f)
Packit Service 6754ca
{
Packit Service 6754ca
    if (f < 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "The value for the " << attrName << " attribute "
Packit Service 6754ca
		"must not be less than zero." << endl;
Packit Service 6754ca
	exit (1);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
isPositive (const char attrName[], float f)
Packit Service 6754ca
{
Packit Service 6754ca
    if (f <= 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "The value for the " << attrName << " attribute "
Packit Service 6754ca
		"must be greater than zero." << endl;
Packit Service 6754ca
	exit (1);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
notValidDate (const char attrName[])
Packit Service 6754ca
{
Packit Service 6754ca
    cerr << "The value for the " << attrName << " attribute "
Packit Service 6754ca
	    "is not a valid date of the form \"YYYY:MM:DD yy:mm:ss\"." << endl;
Packit Service 6754ca
    exit (1);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
strToInt (const char str[], int length)
Packit Service 6754ca
{
Packit Service 6754ca
    int x = 0;
Packit Service 6754ca
Packit Service 6754ca
    for (int i = 0; i < length; ++i)
Packit Service 6754ca
    {
Packit Service 6754ca
	if (str[i] < '0' || str[i] > '9')
Packit Service 6754ca
	    return -1;
Packit Service 6754ca
Packit Service 6754ca
	x = x * 10 + (str[i] - '0');
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    return x;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
isDate (const char attrName[], const char str[])
Packit Service 6754ca
{
Packit Service 6754ca
    //
Packit Service 6754ca
    // Check that str represents a valid
Packit Service 6754ca
    // date of the form YYYY:MM:DD hh:mm:ss.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    if (strlen (str) != 19 ||
Packit Service 6754ca
	str[4] != ':' || str[7] != ':' ||
Packit Service 6754ca
	str[10] != ' ' ||
Packit Service 6754ca
	str[13] != ':' || str[16] != ':')
Packit Service 6754ca
    {
Packit Service 6754ca
	notValidDate (attrName);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    int Y = strToInt (str + 0, 4);	// year
Packit Service 6754ca
    int M = strToInt (str + 5, 2);	// month
Packit Service 6754ca
    int D = strToInt (str + 8, 2);      // day
Packit Service 6754ca
    int h = strToInt (str + 11, 2);	// hour
Packit Service 6754ca
    int m = strToInt (str + 14, 2);	// minute
Packit Service 6754ca
    int s = strToInt (str + 17, 2);	// second
Packit Service 6754ca
Packit Service 6754ca
    if (Y < 0 ||
Packit Service 6754ca
	M < 1 || M > 12 ||
Packit Service 6754ca
	D < 1 ||
Packit Service 6754ca
	h < 0 || h > 23 ||
Packit Service 6754ca
	m < 0 || m > 59 ||
Packit Service 6754ca
	s < 0 || s > 59)
Packit Service 6754ca
    {
Packit Service 6754ca
	notValidDate (attrName);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (M == 2)
Packit Service 6754ca
    {
Packit Service 6754ca
	bool leapYear = (Y % 4 == 0) && (Y % 100 != 0 || Y % 400 == 0);
Packit Service 6754ca
Packit Service 6754ca
	if (D > (leapYear? 29: 28))
Packit Service 6754ca
	    notValidDate (attrName);
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (M == 4 || M == 6 || M == 9 || M == 11)
Packit Service 6754ca
    {
Packit Service 6754ca
	if (D > 30)
Packit Service 6754ca
	    notValidDate (attrName);
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	if (D > 31)
Packit Service 6754ca
	    notValidDate (attrName);
Packit Service 6754ca
    }
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getFloat (const char attrName[],
Packit Service 6754ca
	  int argc,
Packit Service 6754ca
	  char **argv,
Packit Service 6754ca
	  int &i,
Packit Service 6754ca
          int part,
Packit Service 6754ca
	  SetAttrVector &attrs,
Packit Service 6754ca
	  void (*check) (const char attrName[], float f) = 0)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 2)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    float f = strtod (argv[i + 1], 0);
Packit Service 6754ca
Packit Service 6754ca
    if (check)
Packit Service 6754ca
	check (attrName, f);
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new FloatAttribute (f)));
Packit Service 6754ca
    i += 2;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getPosFloatOrInf (const char attrName[],
Packit Service 6754ca
	          int argc,
Packit Service 6754ca
		  char **argv,
Packit Service 6754ca
		  int &i,
Packit Service 6754ca
                  int part,
Packit Service 6754ca
		  SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 2)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    float f;
Packit Service 6754ca
    
Packit Service 6754ca
    if (!strcmp (argv[i + 1], "inf") || !strcmp (argv[i + 1], "infinity"))
Packit Service 6754ca
    {
Packit Service 6754ca
	f = float (half::posInf());
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	f = strtod (argv[i + 1], 0);
Packit Service 6754ca
Packit Service 6754ca
	if (f <= 0)
Packit Service 6754ca
	{
Packit Service 6754ca
	    cerr << "The value for the " << attrName << " attribute "
Packit Service 6754ca
		    "must be greater than zero, or \"infinity\"." << endl;
Packit Service 6754ca
	    exit (1);
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new FloatAttribute (f)));
Packit Service 6754ca
    i += 2;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getV2f (const char attrName[],
Packit Service 6754ca
	int argc,
Packit Service 6754ca
	char **argv,
Packit Service 6754ca
	int &i,
Packit Service 6754ca
        int part,
Packit Service 6754ca
	SetAttrVector &attrs,
Packit Service 6754ca
	void (*check) (const char attrName[], const V2f &v) = 0)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    V2f v (strtod (argv[i + 1], 0), strtod (argv[i + 2], 0));
Packit Service 6754ca
Packit Service 6754ca
    if (check)
Packit Service 6754ca
	check (attrName, v);
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new V2fAttribute (v)));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getRational (const char attrName[],
Packit Service 6754ca
	     int argc,
Packit Service 6754ca
	     char **argv,
Packit Service 6754ca
	     int &i,
Packit Service 6754ca
             int part,
Packit Service 6754ca
	     SetAttrVector &attrs,
Packit Service 6754ca
	     void (*check) (const char attrName[], const Rational &r) = 0)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    Rational r (strtol (argv[i + 1], 0, 0), strtol (argv[i + 2], 0, 0));
Packit Service 6754ca
Packit Service 6754ca
    if (check)
Packit Service 6754ca
	check (attrName, r);
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new RationalAttribute (r)));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getString (const char attrName[],
Packit Service 6754ca
	   int argc,
Packit Service 6754ca
	   char **argv,
Packit Service 6754ca
	   int &i,
Packit Service 6754ca
           int part,
Packit Service 6754ca
	   SetAttrVector &attrs,
Packit Service 6754ca
	   void (*check) (const char attrName[], const char str[]) = 0)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 2)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    const char *str = argv[i + 1];
Packit Service 6754ca
Packit Service 6754ca
    if (check)
Packit Service 6754ca
	check (attrName, str);
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new StringAttribute (str)));
Packit Service 6754ca
    i += 2;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getNameAndString (int argc,
Packit Service 6754ca
		  char **argv,
Packit Service 6754ca
		  int &i,
Packit Service 6754ca
                  int part,
Packit Service 6754ca
		  SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    const char *attrName = argv[i + 1];
Packit Service 6754ca
    const char *str = argv[i + 2];
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new StringAttribute (str)));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getNameAndFloat (int argc,
Packit Service 6754ca
		 char **argv,
Packit Service 6754ca
		 int &i,
Packit Service 6754ca
                 int part,
Packit Service 6754ca
		 SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    const char *attrName = argv[i + 1];
Packit Service 6754ca
    float f = strtod (argv[i + 2], 0);
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new FloatAttribute (f)));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getNameAndInt (int argc,
Packit Service 6754ca
	       char **argv,
Packit Service 6754ca
	       int &i,
Packit Service 6754ca
               int part,
Packit Service 6754ca
	       SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    const char *attrName = argv[i + 1];
Packit Service 6754ca
    int j = strtol (argv[i + 2], 0, 0);
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new IntAttribute (j)));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getChromaticities (const char attrName[],
Packit Service 6754ca
		   int argc,
Packit Service 6754ca
	           char **argv,
Packit Service 6754ca
		   int &i,
Packit Service 6754ca
                   int part,
Packit Service 6754ca
		   SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 9)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    ChromaticitiesAttribute *a = new ChromaticitiesAttribute;
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, a));
Packit Service 6754ca
Packit Service 6754ca
    a->value().red.x   = strtod (argv[i + 1], 0);
Packit Service 6754ca
    a->value().red.y   = strtod (argv[i + 2], 0);
Packit Service 6754ca
    a->value().green.x = strtod (argv[i + 3], 0);
Packit Service 6754ca
    a->value().green.y = strtod (argv[i + 4], 0);
Packit Service 6754ca
    a->value().blue.x  = strtod (argv[i + 5], 0);
Packit Service 6754ca
    a->value().blue.y  = strtod (argv[i + 6], 0);
Packit Service 6754ca
    a->value().white.x = strtod (argv[i + 7], 0);
Packit Service 6754ca
    a->value().white.y = strtod (argv[i + 8], 0);
Packit Service 6754ca
    i += 9;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getEnvmap (const char attrName[],
Packit Service 6754ca
	   int argc,
Packit Service 6754ca
	   char **argv,
Packit Service 6754ca
	   int &i,
Packit Service 6754ca
           int part,
Packit Service 6754ca
	   SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 2)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    char *str = argv[i + 1];
Packit Service 6754ca
    Envmap type;
Packit Service 6754ca
Packit Service 6754ca
    if (!strcmp (str, "latlong") || !strcmp (str, "LATLONG"))
Packit Service 6754ca
    {
Packit Service 6754ca
	type = ENVMAP_LATLONG;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (!strcmp (str, "cube") || !strcmp (str, "CUBE"))
Packit Service 6754ca
    {
Packit Service 6754ca
	type = ENVMAP_CUBE;
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "The value for the " << attrName << " attribute "
Packit Service 6754ca
	        "must be either LATLONG or CUBE." << endl;
Packit Service 6754ca
	exit (1);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, new EnvmapAttribute (type)));
Packit Service 6754ca
    i += 2;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getKeyCode (const char attrName[],
Packit Service 6754ca
	    int argc,
Packit Service 6754ca
	    char **argv,
Packit Service 6754ca
	    int &i,
Packit Service 6754ca
            int part,
Packit Service 6754ca
	    SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 8)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    KeyCodeAttribute *a = new KeyCodeAttribute;
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, a));
Packit Service 6754ca
Packit Service 6754ca
    a->value().setFilmMfcCode   (strtol (argv[i + 1], 0, 0));
Packit Service 6754ca
    a->value().setFilmType      (strtol (argv[i + 2], 0, 0));
Packit Service 6754ca
    a->value().setPrefix        (strtol (argv[i + 3], 0, 0));
Packit Service 6754ca
    a->value().setCount         (strtol (argv[i + 4], 0, 0));
Packit Service 6754ca
    a->value().setPerfOffset    (strtol (argv[i + 5], 0, 0));
Packit Service 6754ca
    a->value().setPerfsPerFrame (strtol (argv[i + 6], 0, 0));
Packit Service 6754ca
    a->value().setPerfsPerCount (strtol (argv[i + 7], 0, 0));
Packit Service 6754ca
    i += 8;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getTimeCode (const char attrName[],
Packit Service 6754ca
	    int argc,
Packit Service 6754ca
	    char **argv,
Packit Service 6754ca
	    int &i,
Packit Service 6754ca
            int part,
Packit Service 6754ca
	    SetAttrVector &attrs)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 3)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    TimeCodeAttribute *a = new TimeCodeAttribute;
Packit Service 6754ca
    attrs.push_back (SetAttr (attrName, part, a));
Packit Service 6754ca
Packit Service 6754ca
    a->value().setTimeAndFlags (strtoul (argv[i + 1], 0, 16));
Packit Service 6754ca
    a->value().setUserData     (strtoul (argv[i + 2], 0, 16));
Packit Service 6754ca
    i += 3;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
getPart (const char attrName[],
Packit Service 6754ca
         int argc,
Packit Service 6754ca
         char **argv,
Packit Service 6754ca
         int &i,
Packit Service 6754ca
         int &part)
Packit Service 6754ca
{
Packit Service 6754ca
    if (i > argc - 2)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    if (!strcmp (argv[i + 1], "any"))
Packit Service 6754ca
        part = -1;
Packit Service 6754ca
    else
Packit Service 6754ca
        part = strtol (argv[i + 1], 0, 0);
Packit Service 6754ca
Packit Service 6754ca
    i += 2;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
main(int argc, char **argv)
Packit Service 6754ca
{
Packit Service 6754ca
    //
Packit Service 6754ca
    // Parse the command line.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    if (argc < 2)
Packit Service 6754ca
	usageMessage (argv[0], true);
Packit Service 6754ca
Packit Service 6754ca
    int exitStatus = 0;
Packit Service 6754ca
Packit Service 6754ca
    try
Packit Service 6754ca
    {
Packit Service 6754ca
	const char *inFileName = 0;
Packit Service 6754ca
	const char *outFileName = 0;
Packit Service 6754ca
Packit Service 6754ca
	SetAttrVector attrs;
Packit Service 6754ca
	int part = -1;
Packit Service 6754ca
	int i = 1;
Packit Service 6754ca
Packit Service 6754ca
	while (i < argc)
Packit Service 6754ca
	{
Packit Service 6754ca
	    const char *attrName = argv[i] + 1;
Packit Service 6754ca
Packit Service 6754ca
	    if (!strcmp (argv[i], "-part"))
Packit Service 6754ca
	    {
Packit Service 6754ca
                getPart (attrName, argc, argv, i, part);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-chromaticities"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getChromaticities (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-whiteLuminance"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-adoptedNeutral"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getV2f (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-renderingTransform"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-lookModTransform"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-xDensity"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isPositive);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-owner"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-comments"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-capDate"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs, isDate);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-utcOffset"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-longitude"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-latitude"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-altitude"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-focus"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getPosFloatOrInf (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-expTime"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isPositive);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-aperture"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isPositive);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-isoSpeed"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isPositive);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-envmap"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getEnvmap (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-framesPerSecond"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getRational (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-keyCode"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getKeyCode (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-timeCode"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getTimeCode (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-wrapmodes"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getString (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-pixelAspectRatio"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isPositive);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-screenWindowWidth"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getFloat (attrName, argc, argv, i, part, attrs, isNonNegative);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-screenWindowCenter"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getV2f (attrName, argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-string"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getNameAndString (argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-float"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getNameAndFloat (argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-int"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		getNameAndInt (argc, argv, i, part, attrs);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (!strcmp (argv[i], "-h"))
Packit Service 6754ca
	    {
Packit Service 6754ca
		usageMessage (argv[0], true);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else
Packit Service 6754ca
	    {
Packit Service 6754ca
		if (inFileName == 0)
Packit Service 6754ca
		    inFileName = argv[i];
Packit Service 6754ca
		else
Packit Service 6754ca
		    outFileName = argv[i];
Packit Service 6754ca
Packit Service 6754ca
		i += 1;
Packit Service 6754ca
	    }
Packit Service 6754ca
	}
Packit Service 6754ca
Packit Service 6754ca
	if (inFileName == 0 || outFileName == 0)
Packit Service 6754ca
	    usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
	if (!strcmp (inFileName, outFileName))
Packit Service 6754ca
	{
Packit Service 6754ca
	    cerr << "Input and output cannot be the same file." << endl;
Packit Service 6754ca
	    return 1;
Packit Service 6754ca
	}
Packit Service 6754ca
Packit Service 6754ca
	//
Packit Service 6754ca
	// Load the headers from the input file
Packit Service 6754ca
        // and add attributes to the headers.
Packit Service 6754ca
	//
Packit Service 6754ca
Packit Service 6754ca
	MultiPartInputFile in (inFileName);
Packit Service 6754ca
	int numParts = in.parts();
Packit Service 6754ca
        vector <Header> headers;
Packit Service 6754ca
Packit Service 6754ca
        for (int part = 0; part < numParts; ++part)
Packit Service 6754ca
        {
Packit Service 6754ca
            Header h = in.header (part);
Packit Service 6754ca
Packit Service 6754ca
            for (int i = 0; i < attrs.size(); ++i)
Packit Service 6754ca
            {
Packit Service 6754ca
                const SetAttr &attr = attrs[i];
Packit Service 6754ca
Packit Service 6754ca
                if (attr.part == -1 || attr.part == part)
Packit Service 6754ca
                {
Packit Service 6754ca
                    h.insert (attr.name, *attr.attr);
Packit Service 6754ca
                }
Packit Service 6754ca
                else if (attr.part < 0 || attr.part >= numParts)
Packit Service 6754ca
                {
Packit Service 6754ca
                    cerr << "Invalid part number " << attr.part << ". "
Packit Service 6754ca
                            "Part numbers in file " << inFileName << " "
Packit Service 6754ca
                            "go from 0 to " << numParts - 1 << "." << endl;
Packit Service 6754ca
Packit Service 6754ca
                    return 1;
Packit Service 6754ca
                }
Packit Service 6754ca
            }
Packit Service 6754ca
Packit Service 6754ca
            headers.push_back(h);
Packit Service 6754ca
        }
Packit Service 6754ca
Packit Service 6754ca
        //
Packit Service 6754ca
        // Crete an output file with the modified headers,
Packit Service 6754ca
        // and copy the pixels from the input file to the
Packit Service 6754ca
        // output file.
Packit Service 6754ca
        //
Packit Service 6754ca
Packit Service 6754ca
	MultiPartOutputFile out (outFileName, &headers[0], numParts);
Packit Service 6754ca
Packit Service 6754ca
	for (int p = 0; p < numParts; ++p)
Packit Service 6754ca
	{
Packit Service 6754ca
	    const Header &h = in.header (p);
Packit Service 6754ca
	    const string &type = h.type();
Packit Service 6754ca
Packit Service 6754ca
	    if (type == SCANLINEIMAGE)
Packit Service 6754ca
	    {
Packit Service 6754ca
	        InputPart  inPart  (in,  p);
Packit Service 6754ca
	        OutputPart outPart (out, p);
Packit Service 6754ca
	        outPart.copyPixels (inPart);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (type == TILEDIMAGE)
Packit Service 6754ca
	    {
Packit Service 6754ca
	        TiledInputPart  inPart  (in,  p);
Packit Service 6754ca
	        TiledOutputPart outPart (out, p);
Packit Service 6754ca
	        outPart.copyPixels (inPart);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (type == DEEPSCANLINE)
Packit Service 6754ca
	    {
Packit Service 6754ca
	        DeepScanLineInputPart  inPart  (in,  p);
Packit Service 6754ca
	        DeepScanLineOutputPart outPart (out, p);
Packit Service 6754ca
	        outPart.copyPixels (inPart);
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else if (type == DEEPTILE)
Packit Service 6754ca
	    {
Packit Service 6754ca
	        DeepTiledInputPart  inPart  (in,  p);
Packit Service 6754ca
	        DeepTiledOutputPart outPart (out, p);
Packit Service 6754ca
	        outPart.copyPixels (inPart);
Packit Service 6754ca
	    }
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
    catch (const exception &e)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << e.what() << endl;
Packit Service 6754ca
	exitStatus = 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    return exitStatus;
Packit Service 6754ca
}