Blame exrmultiview/main.cpp

Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
//
Packit Service 6754ca
// Copyright (c) 2007, 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
//	exrmultiview -- a program that combines multiple
Packit Service 6754ca
//	single-view OpenEXR image files into a single
Packit Service 6754ca
//	multi-view image file.
Packit Service 6754ca
//
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
Packit Service 6754ca
#include <makeMultiView.h>
Packit Service 6754ca
Packit Service 6754ca
#include <iostream>
Packit Service 6754ca
#include <exception>
Packit Service 6754ca
#include <string>
Packit Service 6754ca
#include <string.h>
Packit Service 6754ca
#include <stdlib.h>
Packit Service 6754ca
Packit Service 6754ca
#include "namespaceAlias.h"
Packit Service 6754ca
using namespace IMF;
Packit Service 6754ca
using namespace std;
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
namespace {
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 << " "
Packit Service 6754ca
	    "[options] viewname1 infile1 viewname2 infile2 ... outfile" << endl;
Packit Service 6754ca
Packit Service 6754ca
    if (verbose)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "\n"
Packit Service 6754ca
		"Combines two or more single-view OpenEXR image files into\n"
Packit Service 6754ca
		"a single multi-view image file.  On the command line,\n"
Packit Service 6754ca
		"each single-view input image is specified together with\n"
Packit Service 6754ca
		"a corresponding view name.  The first view on the command\n"
Packit Service 6754ca
		"line becomes the default view.  Example:\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"   " << argv0 << " left imgL.exr right imgR.exr imgLR.exr\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"Here, imgL.exr and imgR.exr become the left and right\n"
Packit Service 6754ca
		"views in output file imgLR.exr.  The left view becomes\n"
Packit Service 6754ca
		"the default view.\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"Options:\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-z x      sets the data compression method to x\n"
Packit Service 6754ca
		"          (none/rle/zip/piz/pxr24/b44/b44a/dwaa/dwab,\n"
Packit Service 6754ca
		"          default is piz)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-v        verbose mode\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
Compression
Packit Service 6754ca
getCompression (const string &str)
Packit Service 6754ca
{
Packit Service 6754ca
    Compression c;
Packit Service 6754ca
Packit Service 6754ca
    if (str == "no" || str == "none" || str == "NO" || str == "NONE")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = NO_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "rle" || str == "RLE")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = RLE_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "zip" || str == "ZIP")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = ZIP_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "piz" || str == "PIZ")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = PIZ_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "pxr24" || str == "PXR24")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = PXR24_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "b44" || str == "B44")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = B44_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "b44a" || str == "B44A")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = B44A_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "dwaa" || str == "DWAA")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = DWAA_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else if (str == "dwab" || str == "DWAB")
Packit Service 6754ca
    {
Packit Service 6754ca
	c = DWAB_COMPRESSION;
Packit Service 6754ca
    }
Packit Service 6754ca
    else
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "Unknown compression method \"" << str << "\"." << endl;
Packit Service 6754ca
	exit (1);
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    return c;
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
} // namespace
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
main(int argc, char **argv)
Packit Service 6754ca
{
Packit Service 6754ca
    vector <string> views;
Packit Service 6754ca
    vector <const char *> inFiles;
Packit Service 6754ca
    const char *outFile = 0;
Packit Service 6754ca
    Compression compression = PIZ_COMPRESSION;
Packit Service 6754ca
    bool verbose = false;
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 i = 1;
Packit Service 6754ca
Packit Service 6754ca
    while (i < argc)
Packit Service 6754ca
    {
Packit Service 6754ca
	if (!strcmp (argv[i], "-z"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Set compression method
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    if (i > argc - 2)
Packit Service 6754ca
		usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
	    compression = getCompression (argv[i + 1]);
Packit Service 6754ca
	    i += 2;
Packit Service 6754ca
	}
Packit Service 6754ca
	else if (!strcmp (argv[i], "-v"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Verbose mode
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    verbose = true;
Packit Service 6754ca
	    i += 1;
Packit Service 6754ca
	}
Packit Service 6754ca
	else if (!strcmp (argv[i], "-h"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Print help message
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    usageMessage (argv[0], true);
Packit Service 6754ca
	}
Packit Service 6754ca
	else
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // View or image file name
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    if (i > argc - 2 || argv[i + 1][0] == '-')
Packit Service 6754ca
	    {
Packit Service 6754ca
		//
Packit Service 6754ca
		// Output file
Packit Service 6754ca
		//
Packit Service 6754ca
Packit Service 6754ca
		if (outFile)
Packit Service 6754ca
		    usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
		outFile = argv[i];
Packit Service 6754ca
		i += 1;
Packit Service 6754ca
	    }
Packit Service 6754ca
	    else
Packit Service 6754ca
	    {
Packit Service 6754ca
	    	//
Packit Service 6754ca
		// View plus input file
Packit Service 6754ca
		//
Packit Service 6754ca
Packit Service 6754ca
		views.push_back (argv[i]);
Packit Service 6754ca
		inFiles.push_back (argv[i + 1]);
Packit Service 6754ca
		i += 2;
Packit Service 6754ca
	    }
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (views.size() < 2)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "Must specify at least two views." << endl;
Packit Service 6754ca
	return 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (outFile == 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "Must specify an output file." << endl;
Packit Service 6754ca
	return 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Load inFiles, and save a combined multi-view image in outFile.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    int exitStatus = 0;
Packit Service 6754ca
Packit Service 6754ca
    try
Packit Service 6754ca
    {
Packit Service 6754ca
	makeMultiView (views, inFiles, outFile, compression, verbose);
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
}