mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1282 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1282 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/***********************************************************
 | 
						|
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
 | 
						|
The Netherlands.
 | 
						|
 | 
						|
                        All Rights Reserved
 | 
						|
 | 
						|
Permission to use, copy, modify, and distribute this software and its 
 | 
						|
documentation for any purpose and without fee is hereby granted, 
 | 
						|
provided that the above copyright notice appear in all copies and that
 | 
						|
both that copyright notice and this permission notice appear in 
 | 
						|
supporting documentation, and that the names of Stichting Mathematisch
 | 
						|
Centrum or CWI not be used in advertising or publicity pertaining to
 | 
						|
distribution of the software without specific, written prior permission.
 | 
						|
 | 
						|
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
 | 
						|
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | 
						|
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
 | 
						|
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
						|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
						|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 | 
						|
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
						|
 | 
						|
******************************************************************/
 | 
						|
 | 
						|
 | 
						|
/* Cl objects */
 | 
						|
 | 
						|
#define CLDEBUG
 | 
						|
 | 
						|
#include <stdarg.h>
 | 
						|
#include <cl.h>
 | 
						|
#include "allobjects.h"
 | 
						|
#include "modsupport.h"		/* For getargs() etc. */
 | 
						|
#include "ceval.h"		/* For call_object() */
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	OB_HEAD
 | 
						|
	int ob_isCompressor;	/* Compressor or Decompressor */
 | 
						|
	CL_Handle ob_compressorHdl;
 | 
						|
	int *ob_paramtypes;
 | 
						|
	int ob_nparams;
 | 
						|
} clobject;
 | 
						|
 | 
						|
static object *ClError;		/* exception cl.error */
 | 
						|
 | 
						|
static int error_handler_called = 0;
 | 
						|
 | 
						|
/*
 | 
						|
 * We want to use the function prototypes that are available in the C
 | 
						|
 * compiler on the SGI.  Because of that, we need to declare the first
 | 
						|
 * argument of the compressor and decompressor methods as "object *",
 | 
						|
 * even though they are really "clobject *".  Therefore we cast the
 | 
						|
 * argument to the proper type using this macro.
 | 
						|
 */
 | 
						|
#define SELF	((clobject *) self)
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
			  Utility routines.
 | 
						|
********************************************************************/
 | 
						|
static void
 | 
						|
cl_ErrorHandler(CL_Handle handle, int code, const char *fmt, ...)
 | 
						|
{
 | 
						|
	va_list ap;
 | 
						|
	char errbuf[BUFSIZ];	/* hopefully big enough */
 | 
						|
	char *p;
 | 
						|
 | 
						|
	if (err_occurred())	/* don't change existing error */
 | 
						|
		return;
 | 
						|
	error_handler_called = 1;
 | 
						|
	va_start(ap, fmt);
 | 
						|
	vsprintf(errbuf, fmt, ap);
 | 
						|
	va_end(ap);
 | 
						|
	p = &errbuf[strlen(errbuf) - 1]; /* swat the line feed */
 | 
						|
	if (*p == '\n')
 | 
						|
		*p = 0;
 | 
						|
	err_setstr(ClError, errbuf);
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * This assumes that params are always in the range 0 to some maximum.
 | 
						|
 */
 | 
						|
static int
 | 
						|
param_type_is_float(clobject *self, int param)
 | 
						|
{
 | 
						|
	int bufferlength;
 | 
						|
	int ret;
 | 
						|
 | 
						|
	if (self->ob_paramtypes == NULL) {
 | 
						|
		error_handler_called = 0;
 | 
						|
		bufferlength = clQueryParams(self->ob_compressorHdl, 0, 0);
 | 
						|
		if (error_handler_called)
 | 
						|
			return -1;
 | 
						|
 | 
						|
		self->ob_paramtypes = NEW(int, bufferlength);
 | 
						|
		if (self->ob_paramtypes == NULL)
 | 
						|
			return -1;
 | 
						|
		self->ob_nparams = bufferlength / 2;
 | 
						|
 | 
						|
		(void) clQueryParams(self->ob_compressorHdl, self->ob_paramtypes, bufferlength);
 | 
						|
		if (error_handler_called) {
 | 
						|
			DEL(self->ob_paramtypes);
 | 
						|
			self->ob_paramtypes = NULL;
 | 
						|
			return -1;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if (param < 0 || param >= self->ob_nparams)
 | 
						|
		return -1;
 | 
						|
 | 
						|
	if (self->ob_paramtypes[param*2 + 1] == CL_FLOATING_ENUM_VALUE ||
 | 
						|
	    self->ob_paramtypes[param*2 + 1] == CL_FLOATING_RANGE_VALUE)
 | 
						|
		return 1;
 | 
						|
	else
 | 
						|
		return 0;
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
	       Single image compression/decompression.
 | 
						|
********************************************************************/
 | 
						|
static object *
 | 
						|
cl_CompressImage(object *self, object *args)
 | 
						|
{
 | 
						|
	int compressionScheme, width, height, originalFormat;
 | 
						|
	float compressionRatio;
 | 
						|
	int frameBufferSize, compressedBufferSize;
 | 
						|
	char *frameBuffer;
 | 
						|
	object *compressedBuffer;
 | 
						|
 | 
						|
	if (!getargs(args, "(iiiifs#)", &compressionScheme, &width, &height,
 | 
						|
		     &originalFormat, &compressionRatio, &frameBuffer,
 | 
						|
		     &frameBufferSize))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
 retry:
 | 
						|
	compressedBuffer = newsizedstringobject(NULL, frameBufferSize);
 | 
						|
	if (compressedBuffer == NULL)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	compressedBufferSize = frameBufferSize;
 | 
						|
	error_handler_called = 0;
 | 
						|
	if (clCompressImage(compressionScheme, width, height, originalFormat,
 | 
						|
			    compressionRatio, (void *) frameBuffer,
 | 
						|
			    &compressedBufferSize,
 | 
						|
			    (void *) getstringvalue(compressedBuffer))
 | 
						|
	    == FAILURE) {
 | 
						|
		DECREF(compressedBuffer);
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "clCompressImage failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	if (compressedBufferSize > frameBufferSize) {
 | 
						|
		frameBufferSize = compressedBufferSize;
 | 
						|
		DECREF(compressedBuffer);
 | 
						|
		goto retry;
 | 
						|
	}
 | 
						|
 | 
						|
	if (compressedBufferSize < frameBufferSize)
 | 
						|
		if (resizestring(&compressedBuffer, compressedBufferSize))
 | 
						|
			return NULL;
 | 
						|
 | 
						|
	return compressedBuffer;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_DecompressImage(object *self, object *args)
 | 
						|
{
 | 
						|
	int compressionScheme, width, height, originalFormat;
 | 
						|
	char *compressedBuffer;
 | 
						|
	int compressedBufferSize, frameBufferSize;
 | 
						|
	object *frameBuffer;
 | 
						|
 | 
						|
	if (!getargs(args, "(iiiis#)", &compressionScheme, &width, &height,
 | 
						|
		     &originalFormat, &compressedBuffer,
 | 
						|
		     &compressedBufferSize))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	frameBufferSize = width * height * CL_BytesPerPixel(originalFormat);
 | 
						|
 | 
						|
	frameBuffer = newsizedstringobject(NULL, frameBufferSize);
 | 
						|
	if (frameBuffer == NULL)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	if (clDecompressImage(compressionScheme, width, height, originalFormat,
 | 
						|
			      compressedBufferSize, compressedBuffer,
 | 
						|
			      (void *) getstringvalue(frameBuffer)) == FAILURE) {
 | 
						|
		DECREF(frameBuffer);
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "clDecompressImage failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return frameBuffer;
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
		Sequential compression/decompression.
 | 
						|
********************************************************************/
 | 
						|
#define CheckCompressor(self)	if ((self)->ob_compressorHdl == NULL) { \
 | 
						|
					err_setstr(RuntimeError, "(de)compressor not active"); \
 | 
						|
					return NULL; \
 | 
						|
				}
 | 
						|
 | 
						|
static object *
 | 
						|
doClose(clobject *self, object *args, int (*close_func)(CL_Handle))
 | 
						|
{
 | 
						|
	CheckCompressor(self);
 | 
						|
 | 
						|
	if (!getnoarg(args))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	if ((*close_func)(self->ob_compressorHdl) == FAILURE) {
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "close failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	self->ob_compressorHdl = NULL;
 | 
						|
 | 
						|
	if (self->ob_paramtypes)
 | 
						|
		DEL(self->ob_paramtypes);
 | 
						|
	self->ob_paramtypes = NULL;
 | 
						|
 | 
						|
	INCREF(None);
 | 
						|
	return None;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_CloseCompressor(object *self, object *args)
 | 
						|
{
 | 
						|
	return doClose(SELF, args, clCloseCompressor);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_CloseDecompressor(object *self, object *args)
 | 
						|
{
 | 
						|
	return doClose(SELF, args, clCloseDecompressor);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_Compress(object *self, object *args)
 | 
						|
{
 | 
						|
	int numberOfFrames;
 | 
						|
	int frameBufferSize, compressedBufferSize, size;
 | 
						|
	char *frameBuffer;
 | 
						|
	object *data;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "(is#)", &numberOfFrames, &frameBuffer, &frameBufferSize))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	size = clGetParam(SELF->ob_compressorHdl, CL_COMPRESSED_BUFFER_SIZE);
 | 
						|
	compressedBufferSize = size;
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	data = newsizedstringobject(NULL, size);
 | 
						|
	if (data == NULL)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	if (clCompress(SELF->ob_compressorHdl, numberOfFrames,
 | 
						|
		       (void *) frameBuffer, &compressedBufferSize,
 | 
						|
		       (void *) getstringvalue(data)) == FAILURE) {
 | 
						|
		DECREF(data);
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "compress failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	if (compressedBufferSize < size)
 | 
						|
		if (resizestring(&data, compressedBufferSize))
 | 
						|
			return NULL;
 | 
						|
 | 
						|
	if (compressedBufferSize > size) {
 | 
						|
		/* we didn't get all "compressed" data */
 | 
						|
		DECREF(data);
 | 
						|
		err_setstr(ClError, "compressed data is more than fitted");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return data;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_Decompress(object *self, object *args)
 | 
						|
{
 | 
						|
	object *data;
 | 
						|
	int numberOfFrames;
 | 
						|
	char *compressedData;
 | 
						|
	int compressedDataSize, dataSize;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "(is#)", &numberOfFrames, &compressedData,
 | 
						|
		     &compressedDataSize))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	dataSize = clGetParam(SELF->ob_compressorHdl, CL_FRAME_BUFFER_SIZE);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	data = newsizedstringobject(NULL, dataSize);
 | 
						|
	if (data == NULL)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	if (clDecompress(SELF->ob_compressorHdl, numberOfFrames,
 | 
						|
			 compressedDataSize, (void *) compressedData,
 | 
						|
			 (void *) getstringvalue(data)) == FAILURE) {
 | 
						|
		DECREF(data);
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "decompress failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return data;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
doParams(clobject *self, object *args, int (*func)(CL_Handle, int *, int),
 | 
						|
	 int modified)
 | 
						|
{
 | 
						|
	object *list, *v;
 | 
						|
	int *PVbuffer;
 | 
						|
	int length;
 | 
						|
	int i;
 | 
						|
	float number;
 | 
						|
	
 | 
						|
	CheckCompressor(self);
 | 
						|
 | 
						|
	if (!getargs(args, "O", &list))
 | 
						|
		return NULL;
 | 
						|
	if (!is_listobject(list)) {
 | 
						|
		err_badarg();
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
	length = getlistsize(list);
 | 
						|
	PVbuffer = NEW(int, length);
 | 
						|
	if (PVbuffer == NULL)
 | 
						|
		return err_nomem();
 | 
						|
	for (i = 0; i < length; i++) {
 | 
						|
		v = getlistitem(list, i);
 | 
						|
		if (is_floatobject(v)) {
 | 
						|
			number = getfloatvalue(v);
 | 
						|
			PVbuffer[i] = CL_TypeIsInt(number);
 | 
						|
		} else if (is_intobject(v)) {
 | 
						|
			PVbuffer[i] = getintvalue(v);
 | 
						|
			if ((i & 1) &&
 | 
						|
			    param_type_is_float(self, PVbuffer[i-1]) > 0) {
 | 
						|
				number = PVbuffer[i];
 | 
						|
				PVbuffer[i] = CL_TypeIsInt(number);
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			DEL(PVbuffer);
 | 
						|
			err_badarg();
 | 
						|
			return NULL;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	(*func)(self->ob_compressorHdl, PVbuffer, length);
 | 
						|
	if (error_handler_called) {
 | 
						|
		DEL(PVbuffer);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	if (modified) {
 | 
						|
		for (i = 0; i < length; i++) {
 | 
						|
			if ((i & 1) &&
 | 
						|
			    param_type_is_float(self, PVbuffer[i-1]) > 0) {
 | 
						|
				number = CL_TypeIsFloat(PVbuffer[i]);
 | 
						|
				v = newfloatobject(number);
 | 
						|
			} else
 | 
						|
				v = newintobject(PVbuffer[i]);
 | 
						|
			setlistitem(list, i, v);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	DEL(PVbuffer);
 | 
						|
 | 
						|
	INCREF(None);
 | 
						|
	return None;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetParams(object *self, object *args)
 | 
						|
{
 | 
						|
	return doParams(SELF, args, clGetParams, 1);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_SetParams(object *self, object *args)
 | 
						|
{
 | 
						|
	return doParams(SELF, args, clSetParams, 0);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
do_get(clobject *self, object *args, int (*func)(CL_Handle, int))
 | 
						|
{
 | 
						|
	int paramID, value;
 | 
						|
	float fvalue;
 | 
						|
 | 
						|
	CheckCompressor(self);
 | 
						|
 | 
						|
	if (!getargs(args, "i", ¶mID))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	value = (*func)(self->ob_compressorHdl, paramID);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	if (param_type_is_float(self, paramID) > 0) {
 | 
						|
		fvalue = CL_TypeIsFloat(value);
 | 
						|
		return newfloatobject(fvalue);
 | 
						|
	}
 | 
						|
 | 
						|
	return newintobject(value);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetParam(object *self, object *args)
 | 
						|
{
 | 
						|
	return do_get(SELF, args, clGetParam);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetDefault(object *self, object *args)
 | 
						|
{
 | 
						|
	return do_get(SELF, args, clGetDefault);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_SetParam(object *self, object *args)
 | 
						|
{
 | 
						|
	int paramID, value;
 | 
						|
	float fvalue;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "(ii)", ¶mID, &value)) {
 | 
						|
		err_clear();
 | 
						|
		if (!getargs(args, "(if)", ¶mID, &fvalue)) {
 | 
						|
			err_clear();
 | 
						|
			err_setstr(TypeError, "bad argument list (format '(ii)' or '(if)')");
 | 
						|
			return NULL;
 | 
						|
		}
 | 
						|
		value = CL_TypeIsInt(fvalue);
 | 
						|
	} else {
 | 
						|
		if (param_type_is_float(SELF, paramID) > 0) {
 | 
						|
			fvalue = value;
 | 
						|
			value = CL_TypeIsInt(fvalue);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 	error_handler_called = 0;
 | 
						|
	value = clSetParam(SELF->ob_compressorHdl, paramID, value);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	if (param_type_is_float(SELF, paramID) > 0)
 | 
						|
		return newfloatobject(CL_TypeIsFloat(value));
 | 
						|
	else
 | 
						|
		return newintobject(value);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetParamID(object *self, object *args)
 | 
						|
{
 | 
						|
	char *name;
 | 
						|
	int value;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "s", &name))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	value = clGetParamID(SELF->ob_compressorHdl, name);
 | 
						|
	if (value == FAILURE) {
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "getparamid failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return newintobject(value);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_QueryParams(object *self, object *args)
 | 
						|
{
 | 
						|
	int bufferlength;
 | 
						|
	int *PVbuffer;
 | 
						|
	object *list;
 | 
						|
	int i;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getnoarg(args))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	bufferlength = clQueryParams(SELF->ob_compressorHdl, 0, 0);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	PVbuffer = NEW(int, bufferlength);
 | 
						|
	if (PVbuffer == NULL)
 | 
						|
		return err_nomem();
 | 
						|
 | 
						|
	bufferlength = clQueryParams(SELF->ob_compressorHdl, PVbuffer,
 | 
						|
				     bufferlength);
 | 
						|
	if (error_handler_called) {
 | 
						|
		DEL(PVbuffer);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	list = newlistobject(bufferlength);
 | 
						|
	if (list == NULL) {
 | 
						|
		DEL(PVbuffer);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	for (i = 0; i < bufferlength; i++) {
 | 
						|
		if (i & 1)
 | 
						|
			setlistitem(list, i, newintobject(PVbuffer[i]));
 | 
						|
		else if (PVbuffer[i] == 0) {
 | 
						|
			INCREF(None);
 | 
						|
			setlistitem(list, i, None);
 | 
						|
		} else
 | 
						|
			setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
 | 
						|
	}
 | 
						|
 | 
						|
	DEL(PVbuffer);
 | 
						|
 | 
						|
	return list;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetMinMax(object *self, object *args)
 | 
						|
{
 | 
						|
	int param, min, max;
 | 
						|
	float fmin, fmax;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "i", ¶m))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	clGetMinMax(SELF->ob_compressorHdl, param, &min, &max);
 | 
						|
 | 
						|
	if (param_type_is_float(SELF, param) > 0) {
 | 
						|
		fmin = CL_TypeIsFloat(min);
 | 
						|
		fmax = CL_TypeIsFloat(max);
 | 
						|
		return mkvalue("(ff)", fmin, fmax);
 | 
						|
	}
 | 
						|
 | 
						|
	return mkvalue("(ii)", min, max);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_GetName(object *self, object *args)
 | 
						|
{
 | 
						|
	int param;
 | 
						|
	char *name;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "i", ¶m))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	name = clGetName(SELF->ob_compressorHdl, param);
 | 
						|
	if (name == NULL || error_handler_called) {
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "getname failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return newstringobject(name);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_QuerySchemeFromHandle(object *self, object *args)
 | 
						|
{
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getnoarg(args))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	return newintobject(clQuerySchemeFromHandle(SELF->ob_compressorHdl));
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
clm_ReadHeader(object *self, object *args)
 | 
						|
{
 | 
						|
	char *header;
 | 
						|
	int headerSize;
 | 
						|
 | 
						|
	CheckCompressor(SELF);
 | 
						|
 | 
						|
	if (!getargs(args, "s#", &header, &headerSize))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	return newintobject(clReadHeader(SELF->ob_compressorHdl,
 | 
						|
					 headerSize, header));
 | 
						|
}
 | 
						|
 | 
						|
static struct methodlist compressor_methods[] = {
 | 
						|
	{"close",		clm_CloseCompressor}, /* alias */
 | 
						|
	{"CloseCompressor",	clm_CloseCompressor},
 | 
						|
	{"Compress",		clm_Compress},
 | 
						|
	{"GetDefault",		clm_GetDefault},
 | 
						|
	{"GetMinMax",		clm_GetMinMax},
 | 
						|
	{"GetName",		clm_GetName},
 | 
						|
	{"GetParam",		clm_GetParam},
 | 
						|
	{"GetParamID",		clm_GetParamID},
 | 
						|
	{"GetParams",		clm_GetParams},
 | 
						|
	{"QueryParams",		clm_QueryParams},
 | 
						|
	{"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
 | 
						|
	{"SetParam",		clm_SetParam},
 | 
						|
	{"SetParams",		clm_SetParams},
 | 
						|
	{NULL,			NULL}		/* sentinel */
 | 
						|
};
 | 
						|
 | 
						|
static struct methodlist decompressor_methods[] = {
 | 
						|
	{"close",		clm_CloseDecompressor},	/* alias */
 | 
						|
	{"CloseDecompressor",	clm_CloseDecompressor},
 | 
						|
	{"Decompress",		clm_Decompress},
 | 
						|
	{"GetDefault",		clm_GetDefault},
 | 
						|
	{"GetMinMax",		clm_GetMinMax},
 | 
						|
	{"GetName",		clm_GetName},
 | 
						|
	{"GetParam",		clm_GetParam},
 | 
						|
	{"GetParamID",		clm_GetParamID},
 | 
						|
	{"GetParams",		clm_GetParams},
 | 
						|
	{"ReadHeader",		clm_ReadHeader},
 | 
						|
	{"QueryParams",		clm_QueryParams},
 | 
						|
	{"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
 | 
						|
	{"SetParam",		clm_SetParam},
 | 
						|
	{"SetParams",		clm_SetParams},
 | 
						|
	{NULL,			NULL}		/* sentinel */
 | 
						|
};
 | 
						|
 | 
						|
static void
 | 
						|
cl_dealloc(object *self)
 | 
						|
{
 | 
						|
	if (SELF->ob_compressorHdl) {
 | 
						|
		if (SELF->ob_isCompressor)
 | 
						|
			clCloseCompressor(SELF->ob_compressorHdl);
 | 
						|
		else
 | 
						|
			clCloseDecompressor(SELF->ob_compressorHdl);
 | 
						|
	}
 | 
						|
	DEL(self);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_getattr(object *self, char *name)
 | 
						|
{
 | 
						|
	if (SELF->ob_isCompressor)
 | 
						|
		return findmethod(compressor_methods, self, name);
 | 
						|
	else
 | 
						|
		return findmethod(decompressor_methods, self, name);
 | 
						|
}
 | 
						|
 | 
						|
static typeobject Cltype = {
 | 
						|
	OB_HEAD_INIT(&Typetype)
 | 
						|
	0,			/*ob_size*/
 | 
						|
	"cl",			/*tp_name*/
 | 
						|
	sizeof(clobject),	/*tp_size*/
 | 
						|
	0,			/*tp_itemsize*/
 | 
						|
	/* methods */
 | 
						|
	(destructor)cl_dealloc,	/*tp_dealloc*/
 | 
						|
	0,			/*tp_print*/
 | 
						|
	(getattrfunc)cl_getattr, /*tp_getattr*/
 | 
						|
	0,			/*tp_setattr*/
 | 
						|
	0,			/*tp_compare*/
 | 
						|
	0,			/*tp_repr*/
 | 
						|
	0,			/*tp_as_number*/
 | 
						|
	0,			/*tp_as_sequence*/
 | 
						|
	0,			/*tp_as_mapping*/
 | 
						|
};
 | 
						|
 | 
						|
static object *
 | 
						|
doOpen(object *self, object *args, int (*open_func)(int, CL_Handle *),
 | 
						|
       int iscompressor)
 | 
						|
{
 | 
						|
	int scheme;
 | 
						|
	clobject *new;
 | 
						|
 | 
						|
	if (!getargs(args, "i", &scheme))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	new = NEWOBJ(clobject, &Cltype);
 | 
						|
	if (new == NULL)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	new->ob_compressorHdl = NULL;
 | 
						|
	new->ob_isCompressor = iscompressor;
 | 
						|
	new->ob_paramtypes = NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	if ((*open_func)(scheme, &new->ob_compressorHdl) == FAILURE) {
 | 
						|
		DECREF(new);
 | 
						|
		if (!error_handler_called)
 | 
						|
			err_setstr(ClError, "Open(De)Compressor failed");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
	return (object *)new;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_OpenCompressor(object *self, object *args)
 | 
						|
{
 | 
						|
	return doOpen(self, args, clOpenCompressor, 1);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_OpenDecompressor(object *self, object *args)
 | 
						|
{
 | 
						|
	return doOpen(self, args, clOpenDecompressor, 0);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_QueryScheme(object *self, object *args)
 | 
						|
{
 | 
						|
	char *header;
 | 
						|
	int headerlen;
 | 
						|
	int scheme;
 | 
						|
 | 
						|
	if (!getargs(args, "s#", &header, &headerlen))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	scheme = clQueryScheme(header);
 | 
						|
	if (scheme < 0) {
 | 
						|
		err_setstr(ClError, "unknown compression scheme");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return newintobject(scheme);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_QueryMaxHeaderSize(object *self, object *args)
 | 
						|
{
 | 
						|
	int scheme;
 | 
						|
 | 
						|
	if (!getargs(args, "i", &scheme))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	return newintobject(clQueryMaxHeaderSize(scheme));
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_QueryAlgorithms(object *self, object *args)
 | 
						|
{
 | 
						|
	int algorithmMediaType;
 | 
						|
	int bufferlength;
 | 
						|
	int *PVbuffer;
 | 
						|
	object *list;
 | 
						|
	int i;
 | 
						|
 | 
						|
	if (!getargs(args, "i", &algorithmMediaType))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	bufferlength = clQueryAlgorithms(algorithmMediaType, 0, 0);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	PVbuffer = NEW(int, bufferlength);
 | 
						|
	if (PVbuffer == NULL)
 | 
						|
		return err_nomem();
 | 
						|
 | 
						|
	bufferlength = clQueryAlgorithms(algorithmMediaType, PVbuffer,
 | 
						|
				     bufferlength);
 | 
						|
	if (error_handler_called) {
 | 
						|
		DEL(PVbuffer);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	list = newlistobject(bufferlength);
 | 
						|
	if (list == NULL) {
 | 
						|
		DEL(PVbuffer);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	for (i = 0; i < bufferlength; i++) {
 | 
						|
		if (i & 1)
 | 
						|
			setlistitem(list, i, newintobject(PVbuffer[i]));
 | 
						|
		else if (PVbuffer[i] == 0) {
 | 
						|
			INCREF(None);
 | 
						|
			setlistitem(list, i, None);
 | 
						|
		} else
 | 
						|
			setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
 | 
						|
	}
 | 
						|
 | 
						|
	DEL(PVbuffer);
 | 
						|
 | 
						|
	return list;
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_QuerySchemeFromName(object *self, object *args)
 | 
						|
{
 | 
						|
	int algorithmMediaType;
 | 
						|
	char *name;
 | 
						|
	int scheme;
 | 
						|
 | 
						|
	if (!getargs(args, "(is)", &algorithmMediaType, &name))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	error_handler_called = 0;
 | 
						|
	scheme = clQuerySchemeFromName(algorithmMediaType, name);
 | 
						|
	if (error_handler_called) {
 | 
						|
		err_setstr(ClError, "unknown compression scheme");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return newintobject(scheme);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_GetAlgorithmName(object *self, object *args)
 | 
						|
{
 | 
						|
	int scheme;
 | 
						|
	char *name;
 | 
						|
 | 
						|
	if (!getargs(args, "i", &scheme))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	name = clGetAlgorithmName(scheme);
 | 
						|
	if (name == 0) {
 | 
						|
		err_setstr(ClError, "unknown compression scheme");
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
 | 
						|
	return newstringobject(name);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
do_set(object *self, object *args, int (*func)(int, int, int))
 | 
						|
{
 | 
						|
	int scheme, paramID, value;
 | 
						|
	float fvalue;
 | 
						|
	int is_float = 0;
 | 
						|
 | 
						|
	if (!getargs(args, "(iii)", &scheme, ¶mID, &value)) {
 | 
						|
		err_clear();
 | 
						|
		if (!getargs(args, "(iif)", &scheme, ¶mID, &fvalue)) {
 | 
						|
			err_clear();
 | 
						|
			err_setstr(TypeError, "bad argument list (format '(iii)' or '(iif)')");
 | 
						|
			return NULL;
 | 
						|
		}
 | 
						|
		value = CL_TypeIsInt(fvalue);
 | 
						|
		is_float = 1;
 | 
						|
	} else {
 | 
						|
		/* check some parameters which we know to be floats */
 | 
						|
		switch (scheme) {
 | 
						|
		case CL_COMPRESSION_RATIO:
 | 
						|
		case CL_SPEED:
 | 
						|
			fvalue = value;
 | 
						|
			value = CL_TypeIsInt(fvalue);
 | 
						|
			is_float = 1;
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 	error_handler_called = 0;
 | 
						|
	value = (*func)(scheme, paramID, value);
 | 
						|
	if (error_handler_called)
 | 
						|
		return NULL;
 | 
						|
 | 
						|
	if (is_float)
 | 
						|
		return newfloatobject(CL_TypeIsFloat(value));
 | 
						|
	else
 | 
						|
		return newintobject(value);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_SetDefault(object *self, object *args)
 | 
						|
{
 | 
						|
	return do_set(self, args, clSetDefault);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_SetMin(object *self, object *args)
 | 
						|
{
 | 
						|
	return do_set(self, args, clSetMin);
 | 
						|
}
 | 
						|
 | 
						|
static object *
 | 
						|
cl_SetMax(object *self, object *args)
 | 
						|
{
 | 
						|
	return do_set(self, args, clSetMax);
 | 
						|
}
 | 
						|
 | 
						|
#define func(name, type)	\
 | 
						|
		static object *cl_##name(object *self, object *args) \
 | 
						|
		{ \
 | 
						|
			int x; \
 | 
						|
			if (!getargs(args, "i", &x)) return NULL; \
 | 
						|
			return new##type##object(CL_##name(x)); \
 | 
						|
		}
 | 
						|
 | 
						|
#define func2(name, type)	\
 | 
						|
		static object *cl_##name(object *self, object *args) \
 | 
						|
		{ \
 | 
						|
			int a1, a2; \
 | 
						|
			if (!getargs(args, "(ii)", &a1, &a2)) return NULL; \
 | 
						|
			return new##type##object(CL_##name(a1, a2)); \
 | 
						|
		}
 | 
						|
 | 
						|
func(BytesPerSample,int)
 | 
						|
func(BytesPerPixel,int)
 | 
						|
func(AudioFormatName,string)
 | 
						|
func(VideoFormatName,string)
 | 
						|
func(AlgorithmNumber,int)
 | 
						|
func(AlgorithmType,int)
 | 
						|
func2(Algorithm,int)
 | 
						|
func(ParamNumber,int)
 | 
						|
func(ParamType,int)
 | 
						|
func2(ParamID,int)
 | 
						|
 | 
						|
#ifdef CLDEBUG
 | 
						|
static object *
 | 
						|
cvt_type(object *self, object *args)
 | 
						|
{
 | 
						|
	int number;
 | 
						|
	float fnumber;
 | 
						|
 | 
						|
	if (getargs(args, "i", &number))
 | 
						|
		return newfloatobject(CL_TypeIsFloat(number));
 | 
						|
	else {
 | 
						|
		err_clear();
 | 
						|
		if (getargs(args, "f", &fnumber))
 | 
						|
			return newintobject(CL_TypeIsInt(fnumber));
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
static struct methodlist cl_methods[] = {
 | 
						|
	{"CompressImage",	cl_CompressImage},
 | 
						|
	{"DecompressImage",	cl_DecompressImage},
 | 
						|
	{"GetAlgorithmName",	cl_GetAlgorithmName},
 | 
						|
	{"OpenCompressor",	cl_OpenCompressor},
 | 
						|
	{"OpenDecompressor",	cl_OpenDecompressor},
 | 
						|
	{"QueryAlgorithms",	cl_QueryAlgorithms},
 | 
						|
	{"QueryMaxHeaderSize",	cl_QueryMaxHeaderSize},
 | 
						|
	{"QueryScheme",		cl_QueryScheme},
 | 
						|
	{"QuerySchemeFromName",	cl_QuerySchemeFromName},
 | 
						|
	{"SetDefault",		cl_SetDefault},
 | 
						|
	{"SetMax",		cl_SetMax},
 | 
						|
	{"SetMin",		cl_SetMin},
 | 
						|
	{"BytesPerSample",	cl_BytesPerSample},
 | 
						|
	{"BytesPerPixel",	cl_BytesPerPixel},
 | 
						|
	{"AudioFormatName",	cl_AudioFormatName},
 | 
						|
	{"VideoFormatName",	cl_VideoFormatName},
 | 
						|
	{"AlgorithmNumber",	cl_AlgorithmNumber},
 | 
						|
	{"AlgorithmType",	cl_AlgorithmType},
 | 
						|
	{"Algorithm",		cl_Algorithm},
 | 
						|
	{"ParamNumber",		cl_ParamNumber},
 | 
						|
	{"ParamType",		cl_ParamType},
 | 
						|
	{"ParamID",		cl_ParamID},
 | 
						|
#ifdef CLDEBUG
 | 
						|
	{"cvt_type",		cvt_type},
 | 
						|
#endif
 | 
						|
	{NULL,			NULL} /* Sentinel */
 | 
						|
};
 | 
						|
 | 
						|
#ifdef CL_JPEG_SOFTWARE
 | 
						|
#define IRIX_5_3_LIBRARY
 | 
						|
#endif
 | 
						|
 | 
						|
void
 | 
						|
initcl()
 | 
						|
{
 | 
						|
	object *m, *d;
 | 
						|
 | 
						|
	m = initmodule("cl", cl_methods);
 | 
						|
	d = getmoduledict(m);
 | 
						|
 | 
						|
	ClError = newstringobject("cl.error");
 | 
						|
	(void) dictinsert(d, "error", ClError);
 | 
						|
 | 
						|
	(void) dictinsert(d, "MAX_NUMBER_OF_ORIGINAL_FORMATS",
 | 
						|
			  newintobject(CL_MAX_NUMBER_OF_ORIGINAL_FORMATS));
 | 
						|
	(void) dictinsert(d, "MONO", newintobject(CL_MONO));
 | 
						|
	(void) dictinsert(d, "STEREO_INTERLEAVED",
 | 
						|
			  newintobject(CL_STEREO_INTERLEAVED));
 | 
						|
	(void) dictinsert(d, "RGB", newintobject(CL_RGB));
 | 
						|
	(void) dictinsert(d, "RGBX", newintobject(CL_RGBX));
 | 
						|
	(void) dictinsert(d, "RGBA", newintobject(CL_RGBA));
 | 
						|
	(void) dictinsert(d, "RGB332", newintobject(CL_RGB332));
 | 
						|
	(void) dictinsert(d, "GRAYSCALE", newintobject(CL_GRAYSCALE));
 | 
						|
	(void) dictinsert(d, "Y", newintobject(CL_Y));
 | 
						|
	(void) dictinsert(d, "YUV", newintobject(CL_YUV));
 | 
						|
	(void) dictinsert(d, "YCbCr", newintobject(CL_YCbCr));
 | 
						|
	(void) dictinsert(d, "YUV422", newintobject(CL_YUV422));
 | 
						|
	(void) dictinsert(d, "YCbCr422", newintobject(CL_YCbCr422));
 | 
						|
	(void) dictinsert(d, "YUV422HC", newintobject(CL_YUV422HC));
 | 
						|
	(void) dictinsert(d, "YCbCr422HC", newintobject(CL_YCbCr422HC));
 | 
						|
	(void) dictinsert(d, "YUV422DC", newintobject(CL_YUV422DC));
 | 
						|
	(void) dictinsert(d, "YCbCr422DC", newintobject(CL_YCbCr422DC));
 | 
						|
	(void) dictinsert(d, "RGB8", newintobject(CL_RGB8));
 | 
						|
	(void) dictinsert(d, "BEST_FIT", newintobject(CL_BEST_FIT));
 | 
						|
	(void) dictinsert(d, "MAX_NUMBER_OF_AUDIO_ALGORITHMS",
 | 
						|
			  newintobject(CL_MAX_NUMBER_OF_AUDIO_ALGORITHMS));
 | 
						|
	(void) dictinsert(d, "MAX_NUMBER_OF_VIDEO_ALGORITHMS",
 | 
						|
			  newintobject(CL_MAX_NUMBER_OF_VIDEO_ALGORITHMS));
 | 
						|
	(void) dictinsert(d, "AUDIO", newintobject(CL_AUDIO));
 | 
						|
	(void) dictinsert(d, "VIDEO", newintobject(CL_VIDEO));
 | 
						|
	(void) dictinsert(d, "UNKNOWN_SCHEME",
 | 
						|
			  newintobject(CL_UNKNOWN_SCHEME));
 | 
						|
	(void) dictinsert(d, "UNCOMPRESSED_AUDIO",
 | 
						|
			  newintobject(CL_UNCOMPRESSED_AUDIO));
 | 
						|
	(void) dictinsert(d, "G711_ULAW", newintobject(CL_G711_ULAW));
 | 
						|
	(void) dictinsert(d, "ULAW", newintobject(CL_ULAW));
 | 
						|
	(void) dictinsert(d, "G711_ALAW", newintobject(CL_G711_ALAW));
 | 
						|
	(void) dictinsert(d, "ALAW", newintobject(CL_ALAW));
 | 
						|
	(void) dictinsert(d, "AWARE_MPEG_AUDIO",
 | 
						|
			  newintobject(CL_AWARE_MPEG_AUDIO));
 | 
						|
	(void) dictinsert(d, "AWARE_MULTIRATE",
 | 
						|
			  newintobject(CL_AWARE_MULTIRATE));
 | 
						|
	(void) dictinsert(d, "UNCOMPRESSED", newintobject(CL_UNCOMPRESSED));
 | 
						|
	(void) dictinsert(d, "UNCOMPRESSED_VIDEO",
 | 
						|
			  newintobject(CL_UNCOMPRESSED_VIDEO));
 | 
						|
	(void) dictinsert(d, "RLE", newintobject(CL_RLE));
 | 
						|
	(void) dictinsert(d, "JPEG", newintobject(CL_JPEG));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "JPEG_SOFTWARE", newintobject(CL_JPEG_SOFTWARE));
 | 
						|
#endif
 | 
						|
	(void) dictinsert(d, "MPEG_VIDEO", newintobject(CL_MPEG_VIDEO));
 | 
						|
	(void) dictinsert(d, "MVC1", newintobject(CL_MVC1));
 | 
						|
	(void) dictinsert(d, "RTR", newintobject(CL_RTR));
 | 
						|
	(void) dictinsert(d, "RTR1", newintobject(CL_RTR1));
 | 
						|
	(void) dictinsert(d, "HDCC", newintobject(CL_HDCC));
 | 
						|
	(void) dictinsert(d, "MVC2", newintobject(CL_MVC2));
 | 
						|
	(void) dictinsert(d, "RLE24", newintobject(CL_RLE24));
 | 
						|
	(void) dictinsert(d, "MAX_NUMBER_OF_PARAMS",
 | 
						|
			  newintobject(CL_MAX_NUMBER_OF_PARAMS));
 | 
						|
	(void) dictinsert(d, "IMAGE_WIDTH", newintobject(CL_IMAGE_WIDTH));
 | 
						|
	(void) dictinsert(d, "IMAGE_HEIGHT", newintobject(CL_IMAGE_HEIGHT));
 | 
						|
	(void) dictinsert(d, "ORIGINAL_FORMAT",
 | 
						|
			  newintobject(CL_ORIGINAL_FORMAT));
 | 
						|
	(void) dictinsert(d, "INTERNAL_FORMAT",
 | 
						|
			  newintobject(CL_INTERNAL_FORMAT));
 | 
						|
	(void) dictinsert(d, "COMPONENTS", newintobject(CL_COMPONENTS));
 | 
						|
	(void) dictinsert(d, "BITS_PER_COMPONENT",
 | 
						|
			  newintobject(CL_BITS_PER_COMPONENT));
 | 
						|
	(void) dictinsert(d, "FRAME_RATE", newintobject(CL_FRAME_RATE));
 | 
						|
	(void) dictinsert(d, "COMPRESSION_RATIO",
 | 
						|
			  newintobject(CL_COMPRESSION_RATIO));
 | 
						|
	(void) dictinsert(d, "EXACT_COMPRESSION_RATIO",
 | 
						|
			  newintobject(CL_EXACT_COMPRESSION_RATIO));
 | 
						|
	(void) dictinsert(d, "FRAME_BUFFER_SIZE",
 | 
						|
			  newintobject(CL_FRAME_BUFFER_SIZE));
 | 
						|
	(void) dictinsert(d, "COMPRESSED_BUFFER_SIZE",
 | 
						|
			  newintobject(CL_COMPRESSED_BUFFER_SIZE));
 | 
						|
	(void) dictinsert(d, "BLOCK_SIZE", newintobject(CL_BLOCK_SIZE));
 | 
						|
	(void) dictinsert(d, "PREROLL", newintobject(CL_PREROLL));
 | 
						|
	(void) dictinsert(d, "FRAME_TYPE", newintobject(CL_FRAME_TYPE));
 | 
						|
	(void) dictinsert(d, "ALGORITHM_ID", newintobject(CL_ALGORITHM_ID));
 | 
						|
	(void) dictinsert(d, "ALGORITHM_VERSION",
 | 
						|
			  newintobject(CL_ALGORITHM_VERSION));
 | 
						|
	(void) dictinsert(d, "ORIENTATION", newintobject(CL_ORIENTATION));
 | 
						|
	(void) dictinsert(d, "NUMBER_OF_FRAMES",
 | 
						|
			  newintobject(CL_NUMBER_OF_FRAMES));
 | 
						|
	(void) dictinsert(d, "SPEED", newintobject(CL_SPEED));
 | 
						|
	(void) dictinsert(d, "LAST_FRAME_INDEX",
 | 
						|
			  newintobject(CL_LAST_FRAME_INDEX));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "ENABLE_IMAGEINFO",
 | 
						|
			  newintobject(CL_ENABLE_IMAGEINFO));
 | 
						|
	(void) dictinsert(d, "INTERNAL_IMAGE_WIDTH",
 | 
						|
			  newintobject(CL_INTERNAL_IMAGE_WIDTH));
 | 
						|
	(void) dictinsert(d, "INTERNAL_IMAGE_HEIGHT",
 | 
						|
			  newintobject(CL_INTERNAL_IMAGE_HEIGHT));
 | 
						|
#endif
 | 
						|
	(void) dictinsert(d, "NUMBER_OF_PARAMS",
 | 
						|
			  newintobject(CL_NUMBER_OF_PARAMS));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "MVC2_LUMA_THRESHOLD",
 | 
						|
			  newintobject(CL_MVC2_LUMA_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "MVC2_CHROMA_THRESHOLD",
 | 
						|
			  newintobject(CL_MVC2_CHROMA_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "MVC2_EDGE_THRESHOLD",
 | 
						|
			  newintobject(CL_MVC2_EDGE_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "MVC2_BLENDING", newintobject(CL_MVC2_BLENDING));
 | 
						|
	(void) dictinsert(d, "MVC2_BLENDING_OFF",
 | 
						|
			  newintobject(CL_MVC2_BLENDING_OFF));
 | 
						|
	(void) dictinsert(d, "MVC2_BLENDING_ON",
 | 
						|
			  newintobject(CL_MVC2_BLENDING_ON));
 | 
						|
	(void) dictinsert(d, "JPEG_QUALITY_FACTOR",
 | 
						|
			  newintobject(CL_JPEG_QUALITY_FACTOR));
 | 
						|
	(void) dictinsert(d, "JPEG_STREAM_HEADERS",
 | 
						|
			  newintobject(CL_JPEG_STREAM_HEADERS));
 | 
						|
	(void) dictinsert(d, "JPEG_QUANTIZATION_TABLES",
 | 
						|
			  newintobject(CL_JPEG_QUANTIZATION_TABLES));
 | 
						|
	(void) dictinsert(d, "JPEG_NUM_PARAMS",
 | 
						|
			  newintobject(CL_JPEG_NUM_PARAMS));
 | 
						|
	(void) dictinsert(d, "RTR_QUALITY_LEVEL",
 | 
						|
			  newintobject(CL_RTR_QUALITY_LEVEL));
 | 
						|
	(void) dictinsert(d, "HDCC_TILE_THRESHOLD",
 | 
						|
			  newintobject(CL_HDCC_TILE_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "HDCC_SAMPLES_PER_TILE",
 | 
						|
			  newintobject(CL_HDCC_SAMPLES_PER_TILE));
 | 
						|
#endif
 | 
						|
	(void) dictinsert(d, "END_OF_SEQUENCE",
 | 
						|
			  newintobject(CL_END_OF_SEQUENCE));
 | 
						|
	(void) dictinsert(d, "CHANNEL_POLICY",
 | 
						|
			  newintobject(CL_CHANNEL_POLICY));
 | 
						|
	(void) dictinsert(d, "NOISE_MARGIN", newintobject(CL_NOISE_MARGIN));
 | 
						|
	(void) dictinsert(d, "BITRATE_POLICY",
 | 
						|
			  newintobject(CL_BITRATE_POLICY));
 | 
						|
	(void) dictinsert(d, "BITRATE_TARGET",
 | 
						|
			  newintobject(CL_BITRATE_TARGET));
 | 
						|
	(void) dictinsert(d, "LAYER", newintobject(CL_LAYER));
 | 
						|
	(void) dictinsert(d, "ENUM_VALUE", newintobject(CL_ENUM_VALUE));
 | 
						|
	(void) dictinsert(d, "RANGE_VALUE", newintobject(CL_RANGE_VALUE));
 | 
						|
	(void) dictinsert(d, "FLOATING_ENUM_VALUE",
 | 
						|
			  newintobject(CL_FLOATING_ENUM_VALUE));
 | 
						|
	(void) dictinsert(d, "FLOATING_RANGE_VALUE",
 | 
						|
			  newintobject(CL_FLOATING_RANGE_VALUE));
 | 
						|
	(void) dictinsert(d, "DECOMPRESSOR", newintobject(CL_DECOMPRESSOR));
 | 
						|
	(void) dictinsert(d, "COMPRESSOR", newintobject(CL_COMPRESSOR));
 | 
						|
	(void) dictinsert(d, "CODEC", newintobject(CL_CODEC));
 | 
						|
	(void) dictinsert(d, "NONE", newintobject(CL_NONE));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "BUF_FRAME", newintobject(CL_BUF_FRAME));
 | 
						|
	(void) dictinsert(d, "BUF_DATA", newintobject(CL_BUF_DATA));
 | 
						|
#endif
 | 
						|
#ifdef CL_FRAME
 | 
						|
	(void) dictinsert(d, "FRAME", newintobject(CL_FRAME));
 | 
						|
	(void) dictinsert(d, "DATA", newintobject(CL_DATA));
 | 
						|
#endif
 | 
						|
	(void) dictinsert(d, "NONE", newintobject(CL_NONE));
 | 
						|
	(void) dictinsert(d, "KEYFRAME", newintobject(CL_KEYFRAME));
 | 
						|
	(void) dictinsert(d, "INTRA", newintobject(CL_INTRA));
 | 
						|
	(void) dictinsert(d, "PREDICTED", newintobject(CL_PREDICTED));
 | 
						|
	(void) dictinsert(d, "BIDIRECTIONAL", newintobject(CL_BIDIRECTIONAL));
 | 
						|
	(void) dictinsert(d, "TOP_DOWN", newintobject(CL_TOP_DOWN));
 | 
						|
	(void) dictinsert(d, "BOTTOM_UP", newintobject(CL_BOTTOM_UP));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "CONTINUOUS_BLOCK",
 | 
						|
			  newintobject(CL_CONTINUOUS_BLOCK));
 | 
						|
	(void) dictinsert(d, "CONTINUOUS_NONBLOCK",
 | 
						|
			  newintobject(CL_CONTINUOUS_NONBLOCK));
 | 
						|
	(void) dictinsert(d, "EXTERNAL_DEVICE",
 | 
						|
			  newintobject((long)CL_EXTERNAL_DEVICE));
 | 
						|
#endif
 | 
						|
	(void) dictinsert(d, "AWCMP_STEREO", newintobject(AWCMP_STEREO));
 | 
						|
	(void) dictinsert(d, "AWCMP_JOINT_STEREO",
 | 
						|
			  newintobject(AWCMP_JOINT_STEREO));
 | 
						|
	(void) dictinsert(d, "AWCMP_INDEPENDENT",
 | 
						|
			  newintobject(AWCMP_INDEPENDENT));
 | 
						|
	(void) dictinsert(d, "AWCMP_FIXED_RATE",
 | 
						|
			  newintobject(AWCMP_FIXED_RATE));
 | 
						|
	(void) dictinsert(d, "AWCMP_CONST_QUAL",
 | 
						|
			  newintobject(AWCMP_CONST_QUAL));
 | 
						|
	(void) dictinsert(d, "AWCMP_LOSSLESS", newintobject(AWCMP_LOSSLESS));
 | 
						|
	(void) dictinsert(d, "AWCMP_MPEG_LAYER_I",
 | 
						|
			  newintobject(AWCMP_MPEG_LAYER_I));
 | 
						|
	(void) dictinsert(d, "AWCMP_MPEG_LAYER_II",
 | 
						|
			  newintobject(AWCMP_MPEG_LAYER_II));
 | 
						|
	(void) dictinsert(d, "HEADER_START_CODE",
 | 
						|
			  newintobject(CL_HEADER_START_CODE));
 | 
						|
	(void) dictinsert(d, "BAD_NO_BUFFERSPACE",
 | 
						|
			  newintobject(CL_BAD_NO_BUFFERSPACE));
 | 
						|
	(void) dictinsert(d, "BAD_PVBUFFER", newintobject(CL_BAD_PVBUFFER));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFERLENGTH_NEG",
 | 
						|
			  newintobject(CL_BAD_BUFFERLENGTH_NEG));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFERLENGTH_ODD",
 | 
						|
			  newintobject(CL_BAD_BUFFERLENGTH_ODD));
 | 
						|
	(void) dictinsert(d, "BAD_PARAM", newintobject(CL_BAD_PARAM));
 | 
						|
	(void) dictinsert(d, "BAD_COMPRESSION_SCHEME",
 | 
						|
			  newintobject(CL_BAD_COMPRESSION_SCHEME));
 | 
						|
	(void) dictinsert(d, "BAD_COMPRESSOR_HANDLE",
 | 
						|
			  newintobject(CL_BAD_COMPRESSOR_HANDLE));
 | 
						|
	(void) dictinsert(d, "BAD_COMPRESSOR_HANDLE_POINTER",
 | 
						|
			  newintobject(CL_BAD_COMPRESSOR_HANDLE_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_HANDLE",
 | 
						|
			  newintobject(CL_BAD_BUFFER_HANDLE));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_QUERY_SIZE",
 | 
						|
			  newintobject(CL_BAD_BUFFER_QUERY_SIZE));
 | 
						|
	(void) dictinsert(d, "JPEG_ERROR", newintobject(CL_JPEG_ERROR));
 | 
						|
	(void) dictinsert(d, "BAD_FRAME_SIZE",
 | 
						|
			  newintobject(CL_BAD_FRAME_SIZE));
 | 
						|
	(void) dictinsert(d, "PARAM_OUT_OF_RANGE",
 | 
						|
			  newintobject(CL_PARAM_OUT_OF_RANGE));
 | 
						|
	(void) dictinsert(d, "ADDED_ALGORITHM_ERROR",
 | 
						|
			  newintobject(CL_ADDED_ALGORITHM_ERROR));
 | 
						|
	(void) dictinsert(d, "BAD_ALGORITHM_TYPE",
 | 
						|
			  newintobject(CL_BAD_ALGORITHM_TYPE));
 | 
						|
	(void) dictinsert(d, "BAD_ALGORITHM_NAME",
 | 
						|
			  newintobject(CL_BAD_ALGORITHM_NAME));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFERING", newintobject(CL_BAD_BUFFERING));
 | 
						|
	(void) dictinsert(d, "BUFFER_NOT_CREATED",
 | 
						|
			  newintobject(CL_BUFFER_NOT_CREATED));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_EXISTS",
 | 
						|
			  newintobject(CL_BAD_BUFFER_EXISTS));
 | 
						|
	(void) dictinsert(d, "BAD_INTERNAL_FORMAT",
 | 
						|
			  newintobject(CL_BAD_INTERNAL_FORMAT));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_POINTER",
 | 
						|
			  newintobject(CL_BAD_BUFFER_POINTER));
 | 
						|
	(void) dictinsert(d, "FRAME_BUFFER_SIZE_ZERO",
 | 
						|
			  newintobject(CL_FRAME_BUFFER_SIZE_ZERO));
 | 
						|
	(void) dictinsert(d, "BAD_STREAM_HEADER",
 | 
						|
			  newintobject(CL_BAD_STREAM_HEADER));
 | 
						|
	(void) dictinsert(d, "BAD_LICENSE", newintobject(CL_BAD_LICENSE));
 | 
						|
	(void) dictinsert(d, "AWARE_ERROR", newintobject(CL_AWARE_ERROR));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_SIZE_POINTER",
 | 
						|
			  newintobject(CL_BAD_BUFFER_SIZE_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_SIZE",
 | 
						|
			  newintobject(CL_BAD_BUFFER_SIZE));
 | 
						|
	(void) dictinsert(d, "BAD_BUFFER_TYPE",
 | 
						|
			  newintobject(CL_BAD_BUFFER_TYPE));
 | 
						|
	(void) dictinsert(d, "BAD_HEADER_SIZE",
 | 
						|
			  newintobject(CL_BAD_HEADER_SIZE));
 | 
						|
	(void) dictinsert(d, "BAD_FUNCTION_POINTER",
 | 
						|
			  newintobject(CL_BAD_FUNCTION_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_SCHEME_POINTER",
 | 
						|
			  newintobject(CL_BAD_SCHEME_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_STRING_POINTER",
 | 
						|
			  newintobject(CL_BAD_STRING_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_MIN_GT_MAX",
 | 
						|
			  newintobject(CL_BAD_MIN_GT_MAX));
 | 
						|
	(void) dictinsert(d, "BAD_INITIAL_VALUE",
 | 
						|
			  newintobject(CL_BAD_INITIAL_VALUE));
 | 
						|
	(void) dictinsert(d, "BAD_PARAM_ID_POINTER",
 | 
						|
			  newintobject(CL_BAD_PARAM_ID_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_PARAM_TYPE",
 | 
						|
			  newintobject(CL_BAD_PARAM_TYPE));
 | 
						|
	(void) dictinsert(d, "BAD_TEXT_STRING_PTR",
 | 
						|
			  newintobject(CL_BAD_TEXT_STRING_PTR));
 | 
						|
	(void) dictinsert(d, "BAD_FUNCTIONALITY",
 | 
						|
			  newintobject(CL_BAD_FUNCTIONALITY));
 | 
						|
	(void) dictinsert(d, "BAD_NUMBER_OF_BLOCKS",
 | 
						|
			  newintobject(CL_BAD_NUMBER_OF_BLOCKS));
 | 
						|
	(void) dictinsert(d, "BAD_BLOCK_SIZE",
 | 
						|
			  newintobject(CL_BAD_BLOCK_SIZE));
 | 
						|
	(void) dictinsert(d, "BAD_POINTER", newintobject(CL_BAD_POINTER));
 | 
						|
	(void) dictinsert(d, "BAD_BOARD", newintobject(CL_BAD_BOARD));
 | 
						|
	(void) dictinsert(d, "MVC2_ERROR", newintobject(CL_MVC2_ERROR));
 | 
						|
#ifdef IRIX_5_3_LIBRARY
 | 
						|
	(void) dictinsert(d, "NEXT_NOT_AVAILABLE",
 | 
						|
			  newintobject(CL_NEXT_NOT_AVAILABLE));
 | 
						|
	(void) dictinsert(d, "SCHEME_BUSY", newintobject(CL_SCHEME_BUSY));
 | 
						|
	(void) dictinsert(d, "SCHEME_NOT_AVAILABLE",
 | 
						|
			  newintobject(CL_SCHEME_NOT_AVAILABLE));
 | 
						|
#endif
 | 
						|
#ifdef CL_LUMA_THRESHOLD
 | 
						|
	/* backward compatibility */
 | 
						|
	(void) dictinsert(d, "LUMA_THRESHOLD",
 | 
						|
			  newintobject(CL_LUMA_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "CHROMA_THRESHOLD",
 | 
						|
			  newintobject(CL_CHROMA_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "EDGE_THRESHOLD",
 | 
						|
			  newintobject(CL_EDGE_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "BLENDING", newintobject(CL_BLENDING));
 | 
						|
	(void) dictinsert(d, "QUALITY_FACTOR",
 | 
						|
			  newintobject(CL_QUALITY_FACTOR));
 | 
						|
	(void) dictinsert(d, "STREAM_HEADERS",
 | 
						|
			  newintobject(CL_STREAM_HEADERS));
 | 
						|
	(void) dictinsert(d, "QUALITY_LEVEL", newintobject(CL_QUALITY_LEVEL));
 | 
						|
	(void) dictinsert(d, "TILE_THRESHOLD",
 | 
						|
			  newintobject(CL_TILE_THRESHOLD));
 | 
						|
	(void) dictinsert(d, "SAMPLES_PER_TILE",
 | 
						|
			  newintobject(CL_SAMPLES_PER_TILE));
 | 
						|
#endif
 | 
						|
 | 
						|
	if (err_occurred())
 | 
						|
		fatal("can't initialize module cl");
 | 
						|
 | 
						|
	(void) clSetErrorHandler(cl_ErrorHandler);
 | 
						|
}
 |