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