1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler///////////////////////////////////////////////////////////////////////////
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Digital Ltd. LLC
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// All rights reserved.
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Redistribution and use in source and binary forms, with or without
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// modification, are permitted provided that the following conditions are
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// met:
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// *       Redistributions of source code must retain the above copyright
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// notice, this list of conditions and the following disclaimer.
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// *       Redistributions in binary form must reproduce the above
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// copyright notice, this list of conditions and the following disclaimer
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// in the documentation and/or other materials provided with the
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// distribution.
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// *       Neither the name of Industrial Light & Magic nor the names of
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// its contributors may be used to endorse or promote products derived
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// from this software without specific prior written permission.
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler///////////////////////////////////////////////////////////////////////////
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#ifndef INCLUDED_IMF_COMPRESSOR_H
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define INCLUDED_IMF_COMPRESSOR_H
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------------------
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//	class Compressor
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------------------
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <ImfCompression.h>
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "ImathBox.h"
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <stdlib.h>
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslernamespace Imf {
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerclass Header;
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerclass Compressor
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  public:
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //---------------------------------------------
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Constructor -- hdr is the header of the file
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // that will be compressed or uncompressed
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //---------------------------------------------
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Compressor (const Header &hdr);
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-----------
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Destructor
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-----------
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual ~Compressor ();
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //----------------------------------------------
75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Maximum number of scan lines processed by
76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // a single call to compress() and uncompress().
77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //----------------------------------------------
78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual int		numScanLines () const = 0;
80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //--------------------------------------------
83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Format of the pixel data read and written
84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // by the compress() and uncompress() methods.
85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // The default implementation of format()
86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // returns XDR.
87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //--------------------------------------------
88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    enum Format
90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    NATIVE,		// the machine's native format
92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    XDR		// Xdr format
93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    };
94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual Format	format () const;
96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //----------------------------
99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Access to the file's header
100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //----------------------------
101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    const Header &	header () const		{return _header;}
103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-------------------------------------------------------------------------
106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Compress an array of bytes that represents the contents of up to
107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // numScanLines() scan lines:
108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    inPtr		Input buffer (uncompressed data).
110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    inSize		Number of bytes in the input buffer
112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    minY		Minimum y coordinate of the scan lines to
114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //				be compressed
115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    outPtr		Pointer to output buffer
117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    return value	Size of compressed data in output buffer
119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Arrangement of uncompressed pixel data in the input buffer:
121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	Before calling
123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	        compress (buf, size, minY, ...);
125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	the InputFile::writePixels() method gathers pixel data from the
127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // 	frame buffer, fb, and places them in buffer buf, like this:
128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //  char *endOfBuf = buf;
130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	for (int y = minY;
132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	     y <= min (minY + numScanLines() - 1, header().dataWindow().max.y);
133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	     ++y)
134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	{
135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    for (ChannelList::ConstIterator c = header().channels().begin();
136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		 c != header().channels().end();
137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		 ++c)
138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    {
139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		if (modp (y, c.channel().ySampling) != 0)
140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		    continue;
141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		for (int x = header().dataWindow().min.x;
143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		     x <= header().dataWindow().max.x;
144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		     ++x)
145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		{
146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		    if (modp (x, c.channel().xSampling) != 0)
147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //			continue;
148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		    Xdr::write<CharPtrIO> (endOfBuf, fb.pixel (c, x, y));
150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //		}
151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    }
152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	}
153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	int size = endOfBuf - buf;
155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-------------------------------------------------------------------------
157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual int		compress (const char *inPtr,
159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                  int inSize,
160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                  int minY,
161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                  const char *&outPtr) = 0;
162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual int		compressTile (const char *inPtr,
164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                      int inSize,
165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                      Imath::Box2i range,
166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                      const char *&outPtr);
167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-------------------------------------------------------------------------
169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // Uncompress an array of bytes that has been compressed by compress():
170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    inPtr		Input buffer (compressed data).
172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    inSize		Number of bytes in the input buffer
174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    minY		Minimum y coordinate of the scan lines to
176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //				be uncompressed
177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    outPtr		Pointer to output buffer
179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //	    return value	Size of uncompressed data in output buffer
181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //
182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    //-------------------------------------------------------------------------
183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual int		uncompress (const char *inPtr,
185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    int inSize,
186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    int minY,
187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    const char *&outPtr) = 0;
188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual int		uncompressTile (const char *inPtr,
190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    int inSize,
191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    Imath::Box2i range,
192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    const char *&outPtr);
193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  private:
195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    const Header &	_header;
197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//--------------------------------------
201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Test if c is a valid compression type
202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//--------------------------------------
203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerbool		isValidCompression (Compression c);
205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------
208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Construct a Compressor for compression type c:
209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  maxScanLineSize	Maximum number of bytes per uncompressed
211793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			scan line.
212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  header		Header of the input or output file whose
214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			pixels will be compressed or uncompressed.
215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  return value	A pointer to a new Compressor object (it
217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			is the caller's responsibility to delete
218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			the object), or 0 (if c is NO_COMPRESSION).
219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------
221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
222793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerCompressor *	newCompressor (Compression c,
223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                   size_t maxScanLineSize,
224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                   const Header &hdr);
225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------
228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Construct a Compressor for compression type c for a tiled image:
229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
230793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  tileLineSize	Maximum number of bytes per uncompressed
231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			line in a tile.
232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  numTileLines	Maximum number of lines in a tile.
234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  header		Header of the input or output file whose
236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			pixels will be compressed or uncompressed.
237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  return value	A pointer to a new Compressor object (it
239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			is the caller's responsibility to delete
240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//			the object), or 0 (if c is NO_COMPRESSION).
241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//-----------------------------------------------------------------
243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
244793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerCompressor *    newTileCompressor (Compression c,
245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                   size_t tileLineSize,
246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                   size_t numTileLines,
247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                   const Header &hdr);
248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} // namespace Imf
251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#endif
253