

/* Cl objects */

#define CLDEBUG

#include <stdarg.h>
#include <cl.h>
#if defined(CL_JPEG_SOFTWARE) && !defined(CL_JPEG_COSMO)
#include <dmedia/cl_cosmo.h>
#endif
#include "Python.h"

typedef struct {
    PyObject_HEAD
    int ob_isCompressor;        /* Compressor or Decompressor */
    CL_Handle ob_compressorHdl;
    int *ob_paramtypes;
    int ob_nparams;
} clobject;

static PyObject *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 (PyErr_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;
    PyErr_SetString(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;

    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 = PyMem_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) {
            PyMem_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 PyObject *
cl_CompressImage(PyObject *self, PyObject *args)
{
    int compressionScheme, width, height, originalFormat;
    float compressionRatio;
    int frameBufferSize, compressedBufferSize;
    char *frameBuffer;
    PyObject *compressedBuffer;

    if (!PyArg_ParseTuple(args, "iiiifs#", &compressionScheme,
                     &width, &height,
                     &originalFormat, &compressionRatio, &frameBuffer,
                     &frameBufferSize))
        return NULL;

  retry:
    compressedBuffer = PyString_FromStringAndSize(NULL, frameBufferSize);
    if (compressedBuffer == NULL)
        return NULL;

    compressedBufferSize = frameBufferSize;
    error_handler_called = 0;
    if (clCompressImage(compressionScheme, width, height, originalFormat,
                        compressionRatio, (void *) frameBuffer,
                        &compressedBufferSize,
                        (void *) PyString_AsString(compressedBuffer))
        == FAILURE || error_handler_called) {
        Py_DECREF(compressedBuffer);
        if (!error_handler_called)
            PyErr_SetString(ClError, "clCompressImage failed");
        return NULL;
    }

    if (compressedBufferSize > frameBufferSize) {
        frameBufferSize = compressedBufferSize;
        Py_DECREF(compressedBuffer);
        goto retry;
    }

    if (compressedBufferSize < frameBufferSize)
        _PyString_Resize(&compressedBuffer, compressedBufferSize);

    return compressedBuffer;
}

static PyObject *
cl_DecompressImage(PyObject *self, PyObject *args)
{
    int compressionScheme, width, height, originalFormat;
    char *compressedBuffer;
    int compressedBufferSize, frameBufferSize;
    PyObject *frameBuffer;

    if (!PyArg_ParseTuple(args, "iiiis#", &compressionScheme, &width, &height,
                     &originalFormat, &compressedBuffer,
                     &compressedBufferSize))
        return NULL;

    frameBufferSize = width * height * CL_BytesPerPixel(originalFormat);

    frameBuffer = PyString_FromStringAndSize(NULL, frameBufferSize);
    if (frameBuffer == NULL)
        return NULL;

    error_handler_called = 0;
    if (clDecompressImage(compressionScheme, width, height, originalFormat,
                          compressedBufferSize, compressedBuffer,
                          (void *) PyString_AsString(frameBuffer))
        == FAILURE || error_handler_called) {
        Py_DECREF(frameBuffer);
        if (!error_handler_called)
            PyErr_SetString(ClError, "clDecompressImage failed");
        return NULL;
    }

    return frameBuffer;
}

/********************************************************************
                Sequential compression/decompression.
********************************************************************/
#define CheckCompressor(self)   if ((self)->ob_compressorHdl == NULL) { \
    PyErr_SetString(PyExc_RuntimeError, "(de)compressor not active"); \
    return NULL; \
}

static PyObject *
doClose(clobject *self, int (*close_func)(CL_Handle))
{
    CheckCompressor(self);

    error_handler_called = 0;
    if ((*close_func)(self->ob_compressorHdl) == FAILURE ||
        error_handler_called) {
        if (!error_handler_called)
            PyErr_SetString(ClError, "close failed");
        return NULL;
    }

    self->ob_compressorHdl = NULL;

    if (self->ob_paramtypes)
        PyMem_DEL(self->ob_paramtypes);
    self->ob_paramtypes = NULL;

    Py_INCREF(Py_None);
    return Py_None;
}

static PyObject *
clm_CloseCompressor(PyObject *self)
{
    return doClose(SELF, clCloseCompressor);
}

static PyObject *
clm_CloseDecompressor(PyObject *self)
{
    return doClose(SELF, clCloseDecompressor);
}

static PyObject *
clm_Compress(PyObject *self, PyObject *args)
{
    int numberOfFrames;
    int frameBufferSize, compressedBufferSize, size;
    char *frameBuffer;
    PyObject *data;

    CheckCompressor(SELF);

    if (!PyArg_Parse(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 = PyString_FromStringAndSize(NULL, size);
    if (data == NULL)
        return NULL;

    error_handler_called = 0;
    if (clCompress(SELF->ob_compressorHdl, numberOfFrames,
                   (void *) frameBuffer, &compressedBufferSize,
                   (void *) PyString_AsString(data)) == FAILURE ||
        error_handler_called) {
        Py_DECREF(data);
        if (!error_handler_called)
            PyErr_SetString(ClError, "compress failed");
        return NULL;
    }

    if (compressedBufferSize < size)
        if (_PyString_Resize(&data, compressedBufferSize))
            return NULL;

    if (compressedBufferSize > size) {
        /* we didn't get all "compressed" data */
        Py_DECREF(data);
        PyErr_SetString(ClError,
                        "compressed data is more than fitted");
        return NULL;
    }

    return data;
}

static PyObject *
clm_Decompress(PyObject *self, PyObject *args)
{
    PyObject *data;
    int numberOfFrames;
    char *compressedData;
    int compressedDataSize, dataSize;

    CheckCompressor(SELF);

    if (!PyArg_Parse(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 = PyString_FromStringAndSize(NULL, dataSize);
    if (data == NULL)
        return NULL;

    error_handler_called = 0;
    if (clDecompress(SELF->ob_compressorHdl, numberOfFrames,
                     compressedDataSize, (void *) compressedData,
                     (void *) PyString_AsString(data)) == FAILURE ||
        error_handler_called) {
        Py_DECREF(data);
        if (!error_handler_called)
            PyErr_SetString(ClError, "decompress failed");
        return NULL;
    }

    return data;
}

static PyObject *
doParams(clobject *self, PyObject *args, int (*func)(CL_Handle, int *, int),
         int modified)
{
    PyObject *list, *v;
    int *PVbuffer;
    int length;
    int i;
    float number;

    CheckCompressor(self);

    if (!PyArg_Parse(args, "O", &list))
        return NULL;
    if (!PyList_Check(list)) {
        PyErr_BadArgument();
        return NULL;
    }
    length = PyList_Size(list);
    PVbuffer = PyMem_NEW(int, length);
    if (PVbuffer == NULL)
        return PyErr_NoMemory();
    for (i = 0; i < length; i++) {
        v = PyList_GetItem(list, i);
        if (PyFloat_Check(v)) {
            number = PyFloat_AsDouble(v);
            PVbuffer[i] = CL_TypeIsInt(number);
        } else if (PyInt_Check(v)) {
            PVbuffer[i] = PyInt_AsLong(v);
            if ((i & 1) &&
                param_type_is_float(self, PVbuffer[i-1]) > 0) {
                number = PVbuffer[i];
                PVbuffer[i] = CL_TypeIsInt(number);
            }
        } else {
            PyMem_DEL(PVbuffer);
            PyErr_BadArgument();
            return NULL;
        }
    }

    error_handler_called = 0;
    (*func)(self->ob_compressorHdl, PVbuffer, length);
    if (error_handler_called) {
        PyMem_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 = PyFloat_FromDouble(number);
            } else
                v = PyInt_FromLong(PVbuffer[i]);
            PyList_SetItem(list, i, v);
        }
    }

    PyMem_DEL(PVbuffer);

    Py_INCREF(Py_None);
    return Py_None;
}

static PyObject *
clm_GetParams(PyObject *self, PyObject *args)
{
    return doParams(SELF, args, clGetParams, 1);
}

static PyObject *
clm_SetParams(PyObject *self, PyObject *args)
{
    return doParams(SELF, args, clSetParams, 0);
}

static PyObject *
do_get(clobject *self, PyObject *args, int (*func)(CL_Handle, int))
{
    int paramID, value;
    float fvalue;

    CheckCompressor(self);

    if (!PyArg_Parse(args, "i", &paramID))
        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 PyFloat_FromDouble(fvalue);
    }

    return PyInt_FromLong(value);
}

static PyObject *
clm_GetParam(PyObject *self, PyObject *args)
{
    return do_get(SELF, args, clGetParam);
}

static PyObject *
clm_GetDefault(PyObject *self, PyObject *args)
{
    return do_get(SELF, args, clGetDefault);
}

static PyObject *
clm_SetParam(PyObject *self, PyObject *args)
{
    int paramID, value;
    float fvalue;

    CheckCompressor(SELF);

    if (!PyArg_Parse(args, "(ii)", &paramID, &value)) {
        PyErr_Clear();
        if (!PyArg_Parse(args, "(if)", &paramID, &fvalue)) {
            PyErr_Clear();
            PyErr_SetString(PyExc_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 PyFloat_FromDouble(CL_TypeIsFloat(value));
    else
        return PyInt_FromLong(value);
}

static PyObject *
clm_GetParamID(PyObject *self, PyObject *args)
{
    char *name;
    int value;

    CheckCompressor(SELF);

    if (!PyArg_Parse(args, "s", &name))
        return NULL;

    error_handler_called = 0;
    value = clGetParamID(SELF->ob_compressorHdl, name);
    if (value == FAILURE || error_handler_called) {
        if (!error_handler_called)
            PyErr_SetString(ClError, "getparamid failed");
        return NULL;
    }

    return PyInt_FromLong(value);
}

static PyObject *
clm_QueryParams(PyObject *self)
{
    int bufferlength;
    int *PVbuffer;
    PyObject *list;
    int i;

    CheckCompressor(SELF);

    error_handler_called = 0;
    bufferlength = clQueryParams(SELF->ob_compressorHdl, 0, 0);
    if (error_handler_called)
        return NULL;

    PVbuffer = PyMem_NEW(int, bufferlength);
    if (PVbuffer == NULL)
        return PyErr_NoMemory();

    bufferlength = clQueryParams(SELF->ob_compressorHdl, PVbuffer,
                                 bufferlength);
    if (error_handler_called) {
        PyMem_DEL(PVbuffer);
        return NULL;
    }

    list = PyList_New(bufferlength);
    if (list == NULL) {
        PyMem_DEL(PVbuffer);
        return NULL;
    }

    for (i = 0; i < bufferlength; i++) {
        if (i & 1)
            PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i]));
        else if (PVbuffer[i] == 0) {
            Py_INCREF(Py_None);
            PyList_SetItem(list, i, Py_None);
        } else
            PyList_SetItem(list, i,
                       PyString_FromString((char *) PVbuffer[i]));
    }

    PyMem_DEL(PVbuffer);

    return list;
}

static PyObject *
clm_GetMinMax(PyObject *self, PyObject *args)
{
    int param, min, max;
    float fmin, fmax;

    CheckCompressor(SELF);

    if (!PyArg_Parse(args, "i", &param))
        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 Py_BuildValue("(ff)", fmin, fmax);
    }

    return Py_BuildValue("(ii)", min, max);
}

static PyObject *
clm_GetName(PyObject *self, PyObject *args)
{
    int param;
    char *name;

    CheckCompressor(SELF);

    if (!PyArg_Parse(args, "i", &param))
        return NULL;

    error_handler_called = 0;
    name = clGetName(SELF->ob_compressorHdl, param);
    if (name == NULL || error_handler_called) {
        if (!error_handler_called)
            PyErr_SetString(ClError, "getname failed");
        return NULL;
    }

    return PyString_FromString(name);
}

static PyObject *
clm_QuerySchemeFromHandle(PyObject *self)
{
    CheckCompressor(SELF);
    return PyInt_FromLong(clQuerySchemeFromHandle(SELF->ob_compressorHdl));
}

static PyObject *
clm_ReadHeader(PyObject *self, PyObject *args)
{
    char *header;
    int headerSize;

    CheckCompressor(SELF);

    if (!PyArg_Parse(args, "s#", &header, &headerSize))
        return NULL;

    return PyInt_FromLong(clReadHeader(SELF->ob_compressorHdl,
                                       headerSize, header));
}

static PyMethodDef compressor_methods[] = {
    {"close",                   clm_CloseCompressor, METH_NOARGS}, /* alias */
    {"CloseCompressor",         clm_CloseCompressor, METH_NOARGS},
    {"Compress",                clm_Compress, METH_OLDARGS},
    {"GetDefault",              clm_GetDefault, METH_OLDARGS},
    {"GetMinMax",               clm_GetMinMax, METH_OLDARGS},
    {"GetName",                 clm_GetName, METH_OLDARGS},
    {"GetParam",                clm_GetParam, METH_OLDARGS},
    {"GetParamID",              clm_GetParamID, METH_OLDARGS},
    {"GetParams",               clm_GetParams, METH_OLDARGS},
    {"QueryParams",             clm_QueryParams, METH_NOARGS},
    {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle, METH_NOARGS},
    {"SetParam",                clm_SetParam, METH_OLDARGS},
    {"SetParams",               clm_SetParams, METH_OLDARGS},
    {NULL,                      NULL}           /* sentinel */
};

static PyMethodDef decompressor_methods[] = {
    {"close",                   clm_CloseDecompressor, METH_NOARGS},    /* alias */
    {"CloseDecompressor",       clm_CloseDecompressor, METH_NOARGS},
    {"Decompress",              clm_Decompress, METH_OLDARGS},
    {"GetDefault",              clm_GetDefault, METH_OLDARGS},
    {"GetMinMax",               clm_GetMinMax, METH_OLDARGS},
    {"GetName",                 clm_GetName, METH_OLDARGS},
    {"GetParam",                clm_GetParam, METH_OLDARGS},
    {"GetParamID",              clm_GetParamID, METH_OLDARGS},
    {"GetParams",               clm_GetParams, METH_OLDARGS},
    {"ReadHeader",              clm_ReadHeader, METH_OLDARGS},
    {"QueryParams",             clm_QueryParams, METH_NOARGS},
    {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle, METH_NOARGS},
    {"SetParam",                clm_SetParam, METH_OLDARGS},
    {"SetParams",               clm_SetParams, METH_OLDARGS},
    {NULL,                      NULL}           /* sentinel */
};

static void
cl_dealloc(PyObject *self)
{
    if (SELF->ob_compressorHdl) {
        if (SELF->ob_isCompressor)
            clCloseCompressor(SELF->ob_compressorHdl);
        else
            clCloseDecompressor(SELF->ob_compressorHdl);
    }
    PyObject_Del(self);
}

static PyObject *
cl_getattr(PyObject *self, char *name)
{
    if (SELF->ob_isCompressor)
        return Py_FindMethod(compressor_methods, self, name);
    else
        return Py_FindMethod(decompressor_methods, self, name);
}

static PyTypeObject Cltype = {
    PyObject_HEAD_INIT(&PyType_Type)
    0,                          /*ob_size*/
    "cl.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 PyObject *
doOpen(PyObject *self, PyObject *args, int (*open_func)(int, CL_Handle *),
       int iscompressor)
{
    int scheme;
    clobject *new;

    if (!PyArg_ParseTuple(args, "i", &scheme))
        return NULL;

    new = PyObject_New(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 ||
        error_handler_called) {
        Py_DECREF(new);
        if (!error_handler_called)
            PyErr_SetString(ClError, "Open(De)Compressor failed");
        return NULL;
    }
    return (PyObject *)new;
}

static PyObject *
cl_OpenCompressor(PyObject *self, PyObject *args)
{
    return doOpen(self, args, clOpenCompressor, 1);
}

static PyObject *
cl_OpenDecompressor(PyObject *self, PyObject *args)
{
    return doOpen(self, args, clOpenDecompressor, 0);
}

static PyObject *
cl_QueryScheme(PyObject *self, PyObject *args)
{
    char *header;
    int headerlen;
    int scheme;

    if (!PyArg_ParseTuple(args, "s#", &header, &headerlen))
        return NULL;

    scheme = clQueryScheme(header);
    if (scheme < 0) {
        PyErr_SetString(ClError, "unknown compression scheme");
        return NULL;
    }

    return PyInt_FromLong(scheme);
}

static PyObject *
cl_QueryMaxHeaderSize(PyObject *self, PyObject *args)
{
    int scheme;

    if (!PyArg_ParseTuple(args, "i", &scheme))
        return NULL;

    return PyInt_FromLong(clQueryMaxHeaderSize(scheme));
}

static PyObject *
cl_QueryAlgorithms(PyObject *self, PyObject *args)
{
    int algorithmMediaType;
    int bufferlength;
    int *PVbuffer;
    PyObject *list;
    int i;

    if (!PyArg_ParseTuple(args, "i", &algorithmMediaType))
        return NULL;

    error_handler_called = 0;
    bufferlength = clQueryAlgorithms(algorithmMediaType, 0, 0);
    if (error_handler_called)
        return NULL;

    PVbuffer = PyMem_NEW(int, bufferlength);
    if (PVbuffer == NULL)
        return PyErr_NoMemory();

    bufferlength = clQueryAlgorithms(algorithmMediaType, PVbuffer,
                                     bufferlength);
    if (error_handler_called) {
        PyMem_DEL(PVbuffer);
        return NULL;
    }

    list = PyList_New(bufferlength);
    if (list == NULL) {
        PyMem_DEL(PVbuffer);
        return NULL;
    }

    for (i = 0; i < bufferlength; i++) {
        if (i & 1)
            PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i]));
        else if (PVbuffer[i] == 0) {
            Py_INCREF(Py_None);
            PyList_SetItem(list, i, Py_None);
        } else
            PyList_SetItem(list, i,
                       PyString_FromString((char *) PVbuffer[i]));
    }

    PyMem_DEL(PVbuffer);

    return list;
}

static PyObject *
cl_QuerySchemeFromName(PyObject *self, PyObject *args)
{
    int algorithmMediaType;
    char *name;
    int scheme;

    if (!PyArg_ParseTuple(args, "is", &algorithmMediaType, &name))
        return NULL;

    error_handler_called = 0;
    scheme = clQuerySchemeFromName(algorithmMediaType, name);
    if (error_handler_called) {
        PyErr_SetString(ClError, "unknown compression scheme");
        return NULL;
    }

    return PyInt_FromLong(scheme);
}

static PyObject *
cl_GetAlgorithmName(PyObject *self, PyObject *args)
{
    int scheme;
    char *name;

    if (!PyArg_ParseTuple(args, "i", &scheme))
        return NULL;

    name = clGetAlgorithmName(scheme);
    if (name == 0) {
        PyErr_SetString(ClError, "unknown compression scheme");
        return NULL;
    }

    return PyString_FromString(name);
}

static PyObject *
do_set(PyObject *self, PyObject *args, int (*func)(int, int, int))
{
    int scheme, paramID, value;
    float fvalue;
    int is_float = 0;

    if (!PyArg_ParseTuple(args, "iii", &scheme, &paramID, &value)) {
        PyErr_Clear();
        if (!PyArg_ParseTuple(args, "iif", &scheme, &paramID, &fvalue)) {
            PyErr_Clear();
            PyErr_SetString(PyExc_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 PyFloat_FromDouble(CL_TypeIsFloat(value));
    else
        return PyInt_FromLong(value);
}

static PyObject *
cl_SetDefault(PyObject *self, PyObject *args)
{
    return do_set(self, args, clSetDefault);
}

static PyObject *
cl_SetMin(PyObject *self, PyObject *args)
{
    return do_set(self, args, clSetMin);
}

static PyObject *
cl_SetMax(PyObject *self, PyObject *args)
{
    return do_set(self, args, clSetMax);
}

#define func(name, handler)     \
static PyObject *cl_##name(PyObject *self, PyObject *args) \
{ \
          int x; \
          if (!PyArg_ParseTuple(args, "i", &x)) return NULL; \
          return Py##handler(CL_##name(x)); \
}

#define func2(name, handler)    \
static PyObject *cl_##name(PyObject *self, PyObject *args) \
{ \
          int a1, a2; \
          if (!PyArg_ParseTuple(args, "ii", &a1, &a2)) return NULL; \
          return Py##handler(CL_##name(a1, a2)); \
}

func(BytesPerSample, Int_FromLong)
func(BytesPerPixel, Int_FromLong)
func(AudioFormatName, String_FromString)
func(VideoFormatName, String_FromString)
func(AlgorithmNumber, Int_FromLong)
func(AlgorithmType, Int_FromLong)
func2(Algorithm, Int_FromLong)
func(ParamNumber, Int_FromLong)
func(ParamType, Int_FromLong)
func2(ParamID, Int_FromLong)

#ifdef CLDEBUG
    static PyObject *
cvt_type(PyObject *self, PyObject *args)
{
    int number;
    float fnumber;

    if (PyArg_Parse(args, "i", &number))
        return PyFloat_FromDouble(CL_TypeIsFloat(number));
    else {
        PyErr_Clear();
        if (PyArg_Parse(args, "f", &fnumber))
            return PyInt_FromLong(CL_TypeIsInt(fnumber));
        return NULL;
    }
}
#endif

static PyMethodDef cl_methods[] = {
    {"CompressImage",           cl_CompressImage, METH_VARARGS},
    {"DecompressImage",         cl_DecompressImage, METH_VARARGS},
    {"GetAlgorithmName",        cl_GetAlgorithmName, METH_VARARGS},
    {"OpenCompressor",          cl_OpenCompressor, METH_VARARGS},
    {"OpenDecompressor",        cl_OpenDecompressor, METH_VARARGS},
    {"QueryAlgorithms",         cl_QueryAlgorithms, METH_VARARGS},
    {"QueryMaxHeaderSize",      cl_QueryMaxHeaderSize, METH_VARARGS},
    {"QueryScheme",             cl_QueryScheme, METH_VARARGS},
    {"QuerySchemeFromName",     cl_QuerySchemeFromName, METH_VARARGS},
    {"SetDefault",              cl_SetDefault, METH_VARARGS},
    {"SetMax",                  cl_SetMax, METH_VARARGS},
    {"SetMin",                  cl_SetMin, METH_VARARGS},
    {"BytesPerSample",          cl_BytesPerSample, METH_VARARGS},
    {"BytesPerPixel",           cl_BytesPerPixel, METH_VARARGS},
    {"AudioFormatName",         cl_AudioFormatName, METH_VARARGS},
    {"VideoFormatName",         cl_VideoFormatName, METH_VARARGS},
    {"AlgorithmNumber",         cl_AlgorithmNumber, METH_VARARGS},
    {"AlgorithmType",           cl_AlgorithmType, METH_VARARGS},
    {"Algorithm",               cl_Algorithm, METH_VARARGS},
    {"ParamNumber",             cl_ParamNumber, METH_VARARGS},
    {"ParamType",               cl_ParamType, METH_VARARGS},
    {"ParamID",                 cl_ParamID, METH_VARARGS},
#ifdef CLDEBUG
    {"cvt_type",                cvt_type, METH_VARARGS},
#endif
    {NULL,                      NULL} /* Sentinel */
};

#ifdef CL_JPEG_SOFTWARE
#define IRIX_5_3_LIBRARY
#endif

void
initcl(void)
{
    PyObject *m, *d, *x;

    if (PyErr_WarnPy3k("the cl module has been removed in "
                       "Python 3.0", 2) < 0)
    return;

    m = Py_InitModule("cl", cl_methods);
    if (m == NULL)
        return;
    d = PyModule_GetDict(m);

    ClError = PyErr_NewException("cl.error", NULL, NULL);
    (void) PyDict_SetItemString(d, "error", ClError);

#ifdef CL_ADDED_ALGORITHM_ERROR
    x = PyInt_FromLong(CL_ADDED_ALGORITHM_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "ADDED_ALGORITHM_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALAW
    x = PyInt_FromLong(CL_ALAW);
    if (x == NULL || PyDict_SetItemString(d, "ALAW", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALGORITHM_ID
    x = PyInt_FromLong(CL_ALGORITHM_ID);
    if (x == NULL || PyDict_SetItemString(d, "ALGORITHM_ID", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALGORITHM_TABLE_FULL
    x = PyInt_FromLong(CL_ALGORITHM_TABLE_FULL);
    if (x == NULL || PyDict_SetItemString(d, "ALGORITHM_TABLE_FULL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALGORITHM_VERSION
    x = PyInt_FromLong(CL_ALGORITHM_VERSION);
    if (x == NULL || PyDict_SetItemString(d, "ALGORITHM_VERSION", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALG_AUDIO
    x = PyInt_FromLong(CL_ALG_AUDIO);
    if (x == NULL || PyDict_SetItemString(d, "ALG_AUDIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ALG_VIDEO
    x = PyInt_FromLong(CL_ALG_VIDEO);
    if (x == NULL || PyDict_SetItemString(d, "ALG_VIDEO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AUDIO
    x = PyInt_FromLong(CL_AUDIO);
    if (x == NULL || PyDict_SetItemString(d, "AUDIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_BITRATE_POLICY
    x = PyInt_FromLong(CL_AWARE_BITRATE_POLICY);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_BITRATE_POLICY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_BITRATE_TARGET
    x = PyInt_FromLong(CL_AWARE_BITRATE_TARGET);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_BITRATE_TARGET", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_CHANNEL_POLICY
    x = PyInt_FromLong(CL_AWARE_CHANNEL_POLICY);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_CHANNEL_POLICY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_CONST_QUAL
    x = PyInt_FromLong(CL_AWARE_CONST_QUAL);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_CONST_QUAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_ERROR
    x = PyInt_FromLong(CL_AWARE_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_FIXED_RATE
    x = PyInt_FromLong(CL_AWARE_FIXED_RATE);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_FIXED_RATE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_INDEPENDENT
    x = PyInt_FromLong(CL_AWARE_INDEPENDENT);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_INDEPENDENT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_JOINT_STEREO
    x = PyInt_FromLong(CL_AWARE_JOINT_STEREO);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_JOINT_STEREO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_LAYER
    x = PyInt_FromLong(CL_AWARE_LAYER);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_LAYER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_LOSSLESS
    x = PyInt_FromLong(CL_AWARE_LOSSLESS);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_LOSSLESS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_MPEG_AUDIO
    x = PyInt_FromLong(CL_AWARE_MPEG_AUDIO);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_MPEG_AUDIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_MPEG_LAYER_I
    x = PyInt_FromLong(CL_AWARE_MPEG_LAYER_I);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_MPEG_LAYER_I", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_MPEG_LAYER_II
    x = PyInt_FromLong(CL_AWARE_MPEG_LAYER_II);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_MPEG_LAYER_II", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_MULTIRATE
    x = PyInt_FromLong(CL_AWARE_MULTIRATE);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_MULTIRATE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_NOISE_MARGIN
    x = PyInt_FromLong(CL_AWARE_NOISE_MARGIN);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_NOISE_MARGIN", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_AWARE_STEREO
    x = PyInt_FromLong(CL_AWARE_STEREO);
    if (x == NULL || PyDict_SetItemString(d, "AWARE_STEREO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_ALGORITHM_NAME
    x = PyInt_FromLong(CL_BAD_ALGORITHM_NAME);
    if (x == NULL || PyDict_SetItemString(d, "BAD_ALGORITHM_NAME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_ALGORITHM_TYPE
    x = PyInt_FromLong(CL_BAD_ALGORITHM_TYPE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_ALGORITHM_TYPE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BLOCK_SIZE
    x = PyInt_FromLong(CL_BAD_BLOCK_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BLOCK_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BOARD
    x = PyInt_FromLong(CL_BAD_BOARD);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BOARD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFERING
    x = PyInt_FromLong(CL_BAD_BUFFERING);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERING", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFERLENGTH_NEG
    x = PyInt_FromLong(CL_BAD_BUFFERLENGTH_NEG);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERLENGTH_NEG", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFERLENGTH_ODD
    x = PyInt_FromLong(CL_BAD_BUFFERLENGTH_ODD);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERLENGTH_ODD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_EXISTS
    x = PyInt_FromLong(CL_BAD_BUFFER_EXISTS);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_EXISTS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_HANDLE
    x = PyInt_FromLong(CL_BAD_BUFFER_HANDLE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_HANDLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_POINTER
    x = PyInt_FromLong(CL_BAD_BUFFER_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_QUERY_SIZE
    x = PyInt_FromLong(CL_BAD_BUFFER_QUERY_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_QUERY_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_SIZE
    x = PyInt_FromLong(CL_BAD_BUFFER_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_SIZE_POINTER
    x = PyInt_FromLong(CL_BAD_BUFFER_SIZE_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_SIZE_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_BUFFER_TYPE
    x = PyInt_FromLong(CL_BAD_BUFFER_TYPE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_TYPE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_COMPRESSION_SCHEME
    x = PyInt_FromLong(CL_BAD_COMPRESSION_SCHEME);
    if (x == NULL || PyDict_SetItemString(d, "BAD_COMPRESSION_SCHEME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_COMPRESSOR_HANDLE
    x = PyInt_FromLong(CL_BAD_COMPRESSOR_HANDLE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_COMPRESSOR_HANDLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_COMPRESSOR_HANDLE_POINTER
    x = PyInt_FromLong(CL_BAD_COMPRESSOR_HANDLE_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_COMPRESSOR_HANDLE_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_FRAME_SIZE
    x = PyInt_FromLong(CL_BAD_FRAME_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_FRAME_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_FUNCTIONALITY
    x = PyInt_FromLong(CL_BAD_FUNCTIONALITY);
    if (x == NULL || PyDict_SetItemString(d, "BAD_FUNCTIONALITY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_FUNCTION_POINTER
    x = PyInt_FromLong(CL_BAD_FUNCTION_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_FUNCTION_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_HEADER_SIZE
    x = PyInt_FromLong(CL_BAD_HEADER_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_HEADER_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_INITIAL_VALUE
    x = PyInt_FromLong(CL_BAD_INITIAL_VALUE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_INITIAL_VALUE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_INTERNAL_FORMAT
    x = PyInt_FromLong(CL_BAD_INTERNAL_FORMAT);
    if (x == NULL || PyDict_SetItemString(d, "BAD_INTERNAL_FORMAT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_LICENSE
    x = PyInt_FromLong(CL_BAD_LICENSE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_LICENSE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_MIN_GT_MAX
    x = PyInt_FromLong(CL_BAD_MIN_GT_MAX);
    if (x == NULL || PyDict_SetItemString(d, "BAD_MIN_GT_MAX", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_NO_BUFFERSPACE
    x = PyInt_FromLong(CL_BAD_NO_BUFFERSPACE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_NO_BUFFERSPACE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_NUMBER_OF_BLOCKS
    x = PyInt_FromLong(CL_BAD_NUMBER_OF_BLOCKS);
    if (x == NULL || PyDict_SetItemString(d, "BAD_NUMBER_OF_BLOCKS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_PARAM
    x = PyInt_FromLong(CL_BAD_PARAM);
    if (x == NULL || PyDict_SetItemString(d, "BAD_PARAM", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_PARAM_ID_POINTER
    x = PyInt_FromLong(CL_BAD_PARAM_ID_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_PARAM_ID_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_PARAM_TYPE
    x = PyInt_FromLong(CL_BAD_PARAM_TYPE);
    if (x == NULL || PyDict_SetItemString(d, "BAD_PARAM_TYPE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_POINTER
    x = PyInt_FromLong(CL_BAD_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_PVBUFFER
    x = PyInt_FromLong(CL_BAD_PVBUFFER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_PVBUFFER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_SCHEME_POINTER
    x = PyInt_FromLong(CL_BAD_SCHEME_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_SCHEME_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_STREAM_HEADER
    x = PyInt_FromLong(CL_BAD_STREAM_HEADER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_STREAM_HEADER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_STRING_POINTER
    x = PyInt_FromLong(CL_BAD_STRING_POINTER);
    if (x == NULL || PyDict_SetItemString(d, "BAD_STRING_POINTER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BAD_TEXT_STRING_PTR
    x = PyInt_FromLong(CL_BAD_TEXT_STRING_PTR);
    if (x == NULL || PyDict_SetItemString(d, "BAD_TEXT_STRING_PTR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BEST_FIT
    x = PyInt_FromLong(CL_BEST_FIT);
    if (x == NULL || PyDict_SetItemString(d, "BEST_FIT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BIDIRECTIONAL
    x = PyInt_FromLong(CL_BIDIRECTIONAL);
    if (x == NULL || PyDict_SetItemString(d, "BIDIRECTIONAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BITRATE
    x = PyInt_FromLong(CL_BITRATE);
    if (x == NULL || PyDict_SetItemString(d, "BITRATE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BITRATE_POLICY
    x = PyInt_FromLong(CL_BITRATE_POLICY);
    if (x == NULL || PyDict_SetItemString(d, "BITRATE_POLICY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BITRATE_TARGET
    x = PyInt_FromLong(CL_BITRATE_TARGET);
    if (x == NULL || PyDict_SetItemString(d, "BITRATE_TARGET", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BITS_PER_COMPONENT
    x = PyInt_FromLong(CL_BITS_PER_COMPONENT);
    if (x == NULL || PyDict_SetItemString(d, "BITS_PER_COMPONENT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BLENDING
    x = PyInt_FromLong(CL_BLENDING);
    if (x == NULL || PyDict_SetItemString(d, "BLENDING", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BLOCK_SIZE
    x = PyInt_FromLong(CL_BLOCK_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "BLOCK_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BOTTOM_UP
    x = PyInt_FromLong(CL_BOTTOM_UP);
    if (x == NULL || PyDict_SetItemString(d, "BOTTOM_UP", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BUFFER_NOT_CREATED
    x = PyInt_FromLong(CL_BUFFER_NOT_CREATED);
    if (x == NULL || PyDict_SetItemString(d, "BUFFER_NOT_CREATED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BUF_COMPRESSED
    x = PyInt_FromLong(CL_BUF_COMPRESSED);
    if (x == NULL || PyDict_SetItemString(d, "BUF_COMPRESSED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BUF_DATA
    x = PyInt_FromLong(CL_BUF_DATA);
    if (x == NULL || PyDict_SetItemString(d, "BUF_DATA", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_BUF_FRAME
    x = PyInt_FromLong(CL_BUF_FRAME);
    if (x == NULL || PyDict_SetItemString(d, "BUF_FRAME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_CHANNEL_POLICY
    x = PyInt_FromLong(CL_CHANNEL_POLICY);
    if (x == NULL || PyDict_SetItemString(d, "CHANNEL_POLICY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_CHROMA_THRESHOLD
    x = PyInt_FromLong(CL_CHROMA_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "CHROMA_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_CODEC
    x = PyInt_FromLong(CL_CODEC);
    if (x == NULL || PyDict_SetItemString(d, "CODEC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COMPONENTS
    x = PyInt_FromLong(CL_COMPONENTS);
    if (x == NULL || PyDict_SetItemString(d, "COMPONENTS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COMPRESSED_BUFFER_SIZE
    x = PyInt_FromLong(CL_COMPRESSED_BUFFER_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "COMPRESSED_BUFFER_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COMPRESSION_RATIO
    x = PyInt_FromLong(CL_COMPRESSION_RATIO);
    if (x == NULL || PyDict_SetItemString(d, "COMPRESSION_RATIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COMPRESSOR
    x = PyInt_FromLong(CL_COMPRESSOR);
    if (x == NULL || PyDict_SetItemString(d, "COMPRESSOR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_CONTINUOUS_BLOCK
    x = PyInt_FromLong(CL_CONTINUOUS_BLOCK);
    if (x == NULL || PyDict_SetItemString(d, "CONTINUOUS_BLOCK", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_CONTINUOUS_NONBLOCK
    x = PyInt_FromLong(CL_CONTINUOUS_NONBLOCK);
    if (x == NULL || PyDict_SetItemString(d, "CONTINUOUS_NONBLOCK", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COSMO_CODEC_CONTROL
    x = PyInt_FromLong(CL_COSMO_CODEC_CONTROL);
    if (x == NULL || PyDict_SetItemString(d, "COSMO_CODEC_CONTROL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COSMO_NUM_PARAMS
    x = PyInt_FromLong(CL_COSMO_NUM_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "COSMO_NUM_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COSMO_VALUE_BASE
    x = PyInt_FromLong(CL_COSMO_VALUE_BASE);
    if (x == NULL || PyDict_SetItemString(d, "COSMO_VALUE_BASE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COSMO_VIDEO_MANUAL_CONTROL
    x = PyInt_FromLong(CL_COSMO_VIDEO_MANUAL_CONTROL);
    if (x == NULL || PyDict_SetItemString(d, "COSMO_VIDEO_MANUAL_CONTROL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_COSMO_VIDEO_TRANSFER_MODE
    x = PyInt_FromLong(CL_COSMO_VIDEO_TRANSFER_MODE);
    if (x == NULL || PyDict_SetItemString(d, "COSMO_VIDEO_TRANSFER_MODE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_DATA
    x = PyInt_FromLong(CL_DATA);
    if (x == NULL || PyDict_SetItemString(d, "DATA", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_DECOMPRESSOR
    x = PyInt_FromLong(CL_DECOMPRESSOR);
    if (x == NULL || PyDict_SetItemString(d, "DECOMPRESSOR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_DSO_ERROR
    x = PyInt_FromLong(CL_DSO_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "DSO_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_EDGE_THRESHOLD
    x = PyInt_FromLong(CL_EDGE_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "EDGE_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ENABLE_IMAGEINFO
    x = PyInt_FromLong(CL_ENABLE_IMAGEINFO);
    if (x == NULL || PyDict_SetItemString(d, "ENABLE_IMAGEINFO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_END_OF_SEQUENCE
    x = PyInt_FromLong(CL_END_OF_SEQUENCE);
    if (x == NULL || PyDict_SetItemString(d, "END_OF_SEQUENCE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ENUM_VALUE
    x = PyInt_FromLong(CL_ENUM_VALUE);
    if (x == NULL || PyDict_SetItemString(d, "ENUM_VALUE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_EXACT_COMPRESSION_RATIO
    x = PyInt_FromLong(CL_EXACT_COMPRESSION_RATIO);
    if (x == NULL || PyDict_SetItemString(d, "EXACT_COMPRESSION_RATIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_EXTERNAL_DEVICE
    x = PyInt_FromLong((long) CL_EXTERNAL_DEVICE);
    if (x == NULL || PyDict_SetItemString(d, "EXTERNAL_DEVICE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FLOATING_ENUM_VALUE
    x = PyInt_FromLong(CL_FLOATING_ENUM_VALUE);
    if (x == NULL || PyDict_SetItemString(d, "FLOATING_ENUM_VALUE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FLOATING_RANGE_VALUE
    x = PyInt_FromLong(CL_FLOATING_RANGE_VALUE);
    if (x == NULL || PyDict_SetItemString(d, "FLOATING_RANGE_VALUE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT
    x = PyInt_FromLong(CL_FORMAT);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_ABGR
    x = PyInt_FromLong(CL_FORMAT_ABGR);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_ABGR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_BGR
    x = PyInt_FromLong(CL_FORMAT_BGR);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_BGR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_BGR233
    x = PyInt_FromLong(CL_FORMAT_BGR233);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_BGR233", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_GRAYSCALE
    x = PyInt_FromLong(CL_FORMAT_GRAYSCALE);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_GRAYSCALE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_MONO
    x = PyInt_FromLong(CL_FORMAT_MONO);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_MONO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_RBG323
    x = PyInt_FromLong(CL_FORMAT_RBG323);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_RBG323", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_STEREO_INTERLEAVED
    x = PyInt_FromLong(CL_FORMAT_STEREO_INTERLEAVED);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_STEREO_INTERLEAVED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_XBGR
    x = PyInt_FromLong(CL_FORMAT_XBGR);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_XBGR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_YCbCr
    x = PyInt_FromLong(CL_FORMAT_YCbCr);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_YCbCr", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_YCbCr422
    x = PyInt_FromLong(CL_FORMAT_YCbCr422);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_YCbCr422", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FORMAT_YCbCr422DC
    x = PyInt_FromLong(CL_FORMAT_YCbCr422DC);
    if (x == NULL || PyDict_SetItemString(d, "FORMAT_YCbCr422DC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME
    x = PyInt_FromLong(CL_FRAME);
    if (x == NULL || PyDict_SetItemString(d, "FRAME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAMES_PER_CHUNK
    x = PyInt_FromLong(CL_FRAMES_PER_CHUNK);
    if (x == NULL || PyDict_SetItemString(d, "FRAMES_PER_CHUNK", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_BUFFER_SIZE
    x = PyInt_FromLong(CL_FRAME_BUFFER_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_BUFFER_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_BUFFER_SIZE_ZERO
    x = PyInt_FromLong(CL_FRAME_BUFFER_SIZE_ZERO);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_BUFFER_SIZE_ZERO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_INDEX
    x = PyInt_FromLong(CL_FRAME_INDEX);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_INDEX", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_RATE
    x = PyInt_FromLong(CL_FRAME_RATE);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_RATE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_SIZE
    x = PyInt_FromLong(CL_FRAME_SIZE);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_SIZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_FRAME_TYPE
    x = PyInt_FromLong(CL_FRAME_TYPE);
    if (x == NULL || PyDict_SetItemString(d, "FRAME_TYPE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_G711_ALAW
    x = PyInt_FromLong(CL_G711_ALAW);
    if (x == NULL || PyDict_SetItemString(d, "G711_ALAW", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_G711_ALAW_SOFTWARE
    x = PyInt_FromLong(CL_G711_ALAW_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "G711_ALAW_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_G711_ULAW
    x = PyInt_FromLong(CL_G711_ULAW);
    if (x == NULL || PyDict_SetItemString(d, "G711_ULAW", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_G711_ULAW_SOFTWARE
    x = PyInt_FromLong(CL_G711_ULAW_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "G711_ULAW_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_GRAYSCALE
    x = PyInt_FromLong(CL_GRAYSCALE);
    if (x == NULL || PyDict_SetItemString(d, "GRAYSCALE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_HDCC
    x = PyInt_FromLong(CL_HDCC);
    if (x == NULL || PyDict_SetItemString(d, "HDCC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_HDCC_SAMPLES_PER_TILE
    x = PyInt_FromLong(CL_HDCC_SAMPLES_PER_TILE);
    if (x == NULL || PyDict_SetItemString(d, "HDCC_SAMPLES_PER_TILE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_HDCC_SOFTWARE
    x = PyInt_FromLong(CL_HDCC_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "HDCC_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_HDCC_TILE_THRESHOLD
    x = PyInt_FromLong(CL_HDCC_TILE_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "HDCC_TILE_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_HEADER_START_CODE
    x = PyInt_FromLong(CL_HEADER_START_CODE);
    if (x == NULL || PyDict_SetItemString(d, "HEADER_START_CODE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGEINFO_FIELDMASK
    x = PyInt_FromLong(CL_IMAGEINFO_FIELDMASK);
    if (x == NULL || PyDict_SetItemString(d, "IMAGEINFO_FIELDMASK", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_CROP_BOTTOM
    x = PyInt_FromLong(CL_IMAGE_CROP_BOTTOM);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_CROP_BOTTOM", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_CROP_LEFT
    x = PyInt_FromLong(CL_IMAGE_CROP_LEFT);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_CROP_LEFT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_CROP_RIGHT
    x = PyInt_FromLong(CL_IMAGE_CROP_RIGHT);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_CROP_RIGHT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_CROP_TOP
    x = PyInt_FromLong(CL_IMAGE_CROP_TOP);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_CROP_TOP", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_HEIGHT
    x = PyInt_FromLong(CL_IMAGE_HEIGHT);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_HEIGHT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMAGE_WIDTH
    x = PyInt_FromLong(CL_IMAGE_WIDTH);
    if (x == NULL || PyDict_SetItemString(d, "IMAGE_WIDTH", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMPACT_CODEC_CONTROL
    x = PyInt_FromLong(CL_IMPACT_CODEC_CONTROL);
    if (x == NULL || PyDict_SetItemString(d, "IMPACT_CODEC_CONTROL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMPACT_FRAME_INTERLEAVE
    x = PyInt_FromLong(CL_IMPACT_FRAME_INTERLEAVE);
    if (x == NULL || PyDict_SetItemString(d, "IMPACT_FRAME_INTERLEAVE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_IMPACT_NUM_PARAMS
    x = PyInt_FromLong(CL_IMPACT_NUM_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "IMPACT_NUM_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_INTERNAL_FORMAT
    x = PyInt_FromLong(CL_INTERNAL_FORMAT);
    if (x == NULL || PyDict_SetItemString(d, "INTERNAL_FORMAT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_INTERNAL_IMAGE_HEIGHT
    x = PyInt_FromLong(CL_INTERNAL_IMAGE_HEIGHT);
    if (x == NULL || PyDict_SetItemString(d, "INTERNAL_IMAGE_HEIGHT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_INTERNAL_IMAGE_WIDTH
    x = PyInt_FromLong(CL_INTERNAL_IMAGE_WIDTH);
    if (x == NULL || PyDict_SetItemString(d, "INTERNAL_IMAGE_WIDTH", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_INTRA
    x = PyInt_FromLong(CL_INTRA);
    if (x == NULL || PyDict_SetItemString(d, "INTRA", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG
    x = PyInt_FromLong(CL_JPEG);
    if (x == NULL || PyDict_SetItemString(d, "JPEG", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_COSMO
    x = PyInt_FromLong(CL_JPEG_COSMO);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_COSMO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_ERROR
    x = PyInt_FromLong(CL_JPEG_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_IMPACT
    x = PyInt_FromLong(CL_JPEG_IMPACT);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_IMPACT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_NUM_PARAMS
    x = PyInt_FromLong(CL_JPEG_NUM_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_NUM_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_QUALITY_FACTOR
    x = PyInt_FromLong(CL_JPEG_QUALITY_FACTOR);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_QUALITY_FACTOR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_QUANTIZATION_TABLES
    x = PyInt_FromLong(CL_JPEG_QUANTIZATION_TABLES);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_QUANTIZATION_TABLES", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_SOFTWARE
    x = PyInt_FromLong(CL_JPEG_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_JPEG_STREAM_HEADERS
    x = PyInt_FromLong(CL_JPEG_STREAM_HEADERS);
    if (x == NULL || PyDict_SetItemString(d, "JPEG_STREAM_HEADERS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_KEYFRAME
    x = PyInt_FromLong(CL_KEYFRAME);
    if (x == NULL || PyDict_SetItemString(d, "KEYFRAME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_KEYFRAME_DISTANCE
    x = PyInt_FromLong(CL_KEYFRAME_DISTANCE);
    if (x == NULL || PyDict_SetItemString(d, "KEYFRAME_DISTANCE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_LAST_FRAME_INDEX
    x = PyInt_FromLong(CL_LAST_FRAME_INDEX);
    if (x == NULL || PyDict_SetItemString(d, "LAST_FRAME_INDEX", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_LAYER
    x = PyInt_FromLong(CL_LAYER);
    if (x == NULL || PyDict_SetItemString(d, "LAYER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_LUMA_THRESHOLD
    x = PyInt_FromLong(CL_LUMA_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "LUMA_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MAX_NUMBER_OF_AUDIO_ALGORITHMS
    x = PyInt_FromLong(CL_MAX_NUMBER_OF_AUDIO_ALGORITHMS);
    if (x == NULL || PyDict_SetItemString(d, "MAX_NUMBER_OF_AUDIO_ALGORITHMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MAX_NUMBER_OF_FORMATS
    x = PyInt_FromLong(CL_MAX_NUMBER_OF_FORMATS);
    if (x == NULL || PyDict_SetItemString(d, "MAX_NUMBER_OF_FORMATS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MAX_NUMBER_OF_ORIGINAL_FORMATS
    x = PyInt_FromLong(CL_MAX_NUMBER_OF_ORIGINAL_FORMATS);
    if (x == NULL || PyDict_SetItemString(d, "MAX_NUMBER_OF_ORIGINAL_FORMATS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MAX_NUMBER_OF_PARAMS
    x = PyInt_FromLong(CL_MAX_NUMBER_OF_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "MAX_NUMBER_OF_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MAX_NUMBER_OF_VIDEO_ALGORITHMS
    x = PyInt_FromLong(CL_MAX_NUMBER_OF_VIDEO_ALGORITHMS);
    if (x == NULL || PyDict_SetItemString(d, "MAX_NUMBER_OF_VIDEO_ALGORITHMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MONO
    x = PyInt_FromLong(CL_MONO);
    if (x == NULL || PyDict_SetItemString(d, "MONO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_AWARE
    x = PyInt_FromLong(CL_MPEG1_AUDIO_AWARE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_AWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_LAYER
    x = PyInt_FromLong(CL_MPEG1_AUDIO_LAYER);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_LAYER", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_LAYER_I
    x = PyInt_FromLong(CL_MPEG1_AUDIO_LAYER_I);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_LAYER_I", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_LAYER_II
    x = PyInt_FromLong(CL_MPEG1_AUDIO_LAYER_II);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_LAYER_II", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_MODE
    x = PyInt_FromLong(CL_MPEG1_AUDIO_MODE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_MODE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_MODE_DUAL
    x = PyInt_FromLong(CL_MPEG1_AUDIO_MODE_DUAL);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_MODE_DUAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_MODE_JOINT
    x = PyInt_FromLong(CL_MPEG1_AUDIO_MODE_JOINT);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_MODE_JOINT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_MODE_SINGLE
    x = PyInt_FromLong(CL_MPEG1_AUDIO_MODE_SINGLE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_MODE_SINGLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_MODE_STEREO
    x = PyInt_FromLong(CL_MPEG1_AUDIO_MODE_STEREO);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_MODE_STEREO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_AUDIO_SOFTWARE
    x = PyInt_FromLong(CL_MPEG1_AUDIO_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_AUDIO_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_END_OF_STREAM
    x = PyInt_FromLong(CL_MPEG1_END_OF_STREAM);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_END_OF_STREAM", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_ERROR
    x = PyInt_FromLong(CL_MPEG1_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_NUM_PARAMS
    x = PyInt_FromLong(CL_MPEG1_NUM_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_NUM_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_M
    x = PyInt_FromLong(CL_MPEG1_VIDEO_M);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_M", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_X
    x = PyInt_FromLong(CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_X);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_X", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_Y
    x = PyInt_FromLong(CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_Y);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_B_Y", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_X
    x = PyInt_FromLong(CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_X);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_X", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_Y
    x = PyInt_FromLong(CL_MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_Y);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_MAX_MOTION_VECTOR_LENGTH_P_Y", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_N
    x = PyInt_FromLong(CL_MPEG1_VIDEO_N);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_N", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_SOFTNESS
    x = PyInt_FromLong(CL_MPEG1_VIDEO_SOFTNESS);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_SOFTNESS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_SOFTNESS_MAXIMUM
    x = PyInt_FromLong(CL_MPEG1_VIDEO_SOFTNESS_MAXIMUM);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_SOFTNESS_MAXIMUM", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_SOFTNESS_MEDIUM
    x = PyInt_FromLong(CL_MPEG1_VIDEO_SOFTNESS_MEDIUM);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_SOFTNESS_MEDIUM", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_SOFTNESS_NONE
    x = PyInt_FromLong(CL_MPEG1_VIDEO_SOFTNESS_NONE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_SOFTNESS_NONE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG1_VIDEO_SOFTWARE
    x = PyInt_FromLong(CL_MPEG1_VIDEO_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "MPEG1_VIDEO_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MPEG_VIDEO
    x = PyInt_FromLong(CL_MPEG_VIDEO);
    if (x == NULL || PyDict_SetItemString(d, "MPEG_VIDEO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MULTIRATE_AWARE
    x = PyInt_FromLong(CL_MULTIRATE_AWARE);
    if (x == NULL || PyDict_SetItemString(d, "MULTIRATE_AWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC1
    x = PyInt_FromLong(CL_MVC1);
    if (x == NULL || PyDict_SetItemString(d, "MVC1", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC1_SOFTWARE
    x = PyInt_FromLong(CL_MVC1_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "MVC1_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2
    x = PyInt_FromLong(CL_MVC2);
    if (x == NULL || PyDict_SetItemString(d, "MVC2", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_BLENDING
    x = PyInt_FromLong(CL_MVC2_BLENDING);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_BLENDING", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_BLENDING_OFF
    x = PyInt_FromLong(CL_MVC2_BLENDING_OFF);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_BLENDING_OFF", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_BLENDING_ON
    x = PyInt_FromLong(CL_MVC2_BLENDING_ON);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_BLENDING_ON", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_CHROMA_THRESHOLD
    x = PyInt_FromLong(CL_MVC2_CHROMA_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_CHROMA_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_EDGE_THRESHOLD
    x = PyInt_FromLong(CL_MVC2_EDGE_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_EDGE_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_ERROR
    x = PyInt_FromLong(CL_MVC2_ERROR);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_ERROR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_LUMA_THRESHOLD
    x = PyInt_FromLong(CL_MVC2_LUMA_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_LUMA_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC2_SOFTWARE
    x = PyInt_FromLong(CL_MVC2_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "MVC2_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC3_QUALITY_LEVEL
    x = PyInt_FromLong(CL_MVC3_QUALITY_LEVEL);
    if (x == NULL || PyDict_SetItemString(d, "MVC3_QUALITY_LEVEL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_MVC3_SOFTWARE
    x = PyInt_FromLong(CL_MVC3_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "MVC3_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NEXT_NOT_AVAILABLE
    x = PyInt_FromLong(CL_NEXT_NOT_AVAILABLE);
    if (x == NULL || PyDict_SetItemString(d, "NEXT_NOT_AVAILABLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NOISE_MARGIN
    x = PyInt_FromLong(CL_NOISE_MARGIN);
    if (x == NULL || PyDict_SetItemString(d, "NOISE_MARGIN", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NONE
    x = PyInt_FromLong(CL_NONE);
    if (x == NULL || PyDict_SetItemString(d, "NONE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NUMBER_OF_FORMATS
    x = PyInt_FromLong(CL_NUMBER_OF_FORMATS);
    if (x == NULL || PyDict_SetItemString(d, "NUMBER_OF_FORMATS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NUMBER_OF_FRAMES
    x = PyInt_FromLong(CL_NUMBER_OF_FRAMES);
    if (x == NULL || PyDict_SetItemString(d, "NUMBER_OF_FRAMES", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NUMBER_OF_PARAMS
    x = PyInt_FromLong(CL_NUMBER_OF_PARAMS);
    if (x == NULL || PyDict_SetItemString(d, "NUMBER_OF_PARAMS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NUMBER_OF_PARAMS_FREEZE
    x = PyInt_FromLong(CL_NUMBER_OF_PARAMS_FREEZE);
    if (x == NULL || PyDict_SetItemString(d, "NUMBER_OF_PARAMS_FREEZE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_NUMBER_OF_VIDEO_FORMATS
    x = PyInt_FromLong(CL_NUMBER_OF_VIDEO_FORMATS);
    if (x == NULL || PyDict_SetItemString(d, "NUMBER_OF_VIDEO_FORMATS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ORIENTATION
    x = PyInt_FromLong(CL_ORIENTATION);
    if (x == NULL || PyDict_SetItemString(d, "ORIENTATION", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ORIGINAL_FORMAT
    x = PyInt_FromLong(CL_ORIGINAL_FORMAT);
    if (x == NULL || PyDict_SetItemString(d, "ORIGINAL_FORMAT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_PARAM_OUT_OF_RANGE
    x = PyInt_FromLong(CL_PARAM_OUT_OF_RANGE);
    if (x == NULL || PyDict_SetItemString(d, "PARAM_OUT_OF_RANGE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_PIXEL_ASPECT
    x = PyInt_FromLong(CL_PIXEL_ASPECT);
    if (x == NULL || PyDict_SetItemString(d, "PIXEL_ASPECT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_PREDICTED
    x = PyInt_FromLong(CL_PREDICTED);
    if (x == NULL || PyDict_SetItemString(d, "PREDICTED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_PREROLL
    x = PyInt_FromLong(CL_PREROLL);
    if (x == NULL || PyDict_SetItemString(d, "PREROLL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_QUALITY_FACTOR
    x = PyInt_FromLong(CL_QUALITY_FACTOR);
    if (x == NULL || PyDict_SetItemString(d, "QUALITY_FACTOR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_QUALITY_LEVEL
    x = PyInt_FromLong(CL_QUALITY_LEVEL);
    if (x == NULL || PyDict_SetItemString(d, "QUALITY_LEVEL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_QUALITY_SPATIAL
    x = PyInt_FromLong(CL_QUALITY_SPATIAL);
    if (x == NULL || PyDict_SetItemString(d, "QUALITY_SPATIAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_QUALITY_TEMPORAL
    x = PyInt_FromLong(CL_QUALITY_TEMPORAL);
    if (x == NULL || PyDict_SetItemString(d, "QUALITY_TEMPORAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_QUANTIZATION_TABLES
    x = PyInt_FromLong(CL_QUANTIZATION_TABLES);
    if (x == NULL || PyDict_SetItemString(d, "QUANTIZATION_TABLES", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RANGE_VALUE
    x = PyInt_FromLong(CL_RANGE_VALUE);
    if (x == NULL || PyDict_SetItemString(d, "RANGE_VALUE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RGB
    x = PyInt_FromLong(CL_RGB);
    if (x == NULL || PyDict_SetItemString(d, "RGB", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RGB332
    x = PyInt_FromLong(CL_RGB332);
    if (x == NULL || PyDict_SetItemString(d, "RGB332", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RGB8
    x = PyInt_FromLong(CL_RGB8);
    if (x == NULL || PyDict_SetItemString(d, "RGB8", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RGBA
    x = PyInt_FromLong(CL_RGBA);
    if (x == NULL || PyDict_SetItemString(d, "RGBA", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RGBX
    x = PyInt_FromLong(CL_RGBX);
    if (x == NULL || PyDict_SetItemString(d, "RGBX", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RLE
    x = PyInt_FromLong(CL_RLE);
    if (x == NULL || PyDict_SetItemString(d, "RLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RLE24
    x = PyInt_FromLong(CL_RLE24);
    if (x == NULL || PyDict_SetItemString(d, "RLE24", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RLE24_SOFTWARE
    x = PyInt_FromLong(CL_RLE24_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "RLE24_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RLE_SOFTWARE
    x = PyInt_FromLong(CL_RLE_SOFTWARE);
    if (x == NULL || PyDict_SetItemString(d, "RLE_SOFTWARE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RTR
    x = PyInt_FromLong(CL_RTR);
    if (x == NULL || PyDict_SetItemString(d, "RTR", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RTR1
    x = PyInt_FromLong(CL_RTR1);
    if (x == NULL || PyDict_SetItemString(d, "RTR1", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_RTR_QUALITY_LEVEL
    x = PyInt_FromLong(CL_RTR_QUALITY_LEVEL);
    if (x == NULL || PyDict_SetItemString(d, "RTR_QUALITY_LEVEL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_SAMPLES_PER_TILE
    x = PyInt_FromLong(CL_SAMPLES_PER_TILE);
    if (x == NULL || PyDict_SetItemString(d, "SAMPLES_PER_TILE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_SCHEME_BUSY
    x = PyInt_FromLong(CL_SCHEME_BUSY);
    if (x == NULL || PyDict_SetItemString(d, "SCHEME_BUSY", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_SCHEME_NOT_AVAILABLE
    x = PyInt_FromLong(CL_SCHEME_NOT_AVAILABLE);
    if (x == NULL || PyDict_SetItemString(d, "SCHEME_NOT_AVAILABLE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_SPEED
    x = PyInt_FromLong(CL_SPEED);
    if (x == NULL || PyDict_SetItemString(d, "SPEED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_STEREO_INTERLEAVED
    x = PyInt_FromLong(CL_STEREO_INTERLEAVED);
    if (x == NULL || PyDict_SetItemString(d, "STEREO_INTERLEAVED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_STREAM_HEADERS
    x = PyInt_FromLong(CL_STREAM_HEADERS);
    if (x == NULL || PyDict_SetItemString(d, "STREAM_HEADERS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_TILE_THRESHOLD
    x = PyInt_FromLong(CL_TILE_THRESHOLD);
    if (x == NULL || PyDict_SetItemString(d, "TILE_THRESHOLD", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_TOP_DOWN
    x = PyInt_FromLong(CL_TOP_DOWN);
    if (x == NULL || PyDict_SetItemString(d, "TOP_DOWN", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_ULAW
    x = PyInt_FromLong(CL_ULAW);
    if (x == NULL || PyDict_SetItemString(d, "ULAW", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_UNCOMPRESSED
    x = PyInt_FromLong(CL_UNCOMPRESSED);
    if (x == NULL || PyDict_SetItemString(d, "UNCOMPRESSED", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_UNCOMPRESSED_AUDIO
    x = PyInt_FromLong(CL_UNCOMPRESSED_AUDIO);
    if (x == NULL || PyDict_SetItemString(d, "UNCOMPRESSED_AUDIO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_UNCOMPRESSED_VIDEO
    x = PyInt_FromLong(CL_UNCOMPRESSED_VIDEO);
    if (x == NULL || PyDict_SetItemString(d, "UNCOMPRESSED_VIDEO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_UNKNOWN_SCHEME
    x = PyInt_FromLong(CL_UNKNOWN_SCHEME);
    if (x == NULL || PyDict_SetItemString(d, "UNKNOWN_SCHEME", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_VIDEO
    x = PyInt_FromLong(CL_VIDEO);
    if (x == NULL || PyDict_SetItemString(d, "VIDEO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_Y
    x = PyInt_FromLong(CL_Y);
    if (x == NULL || PyDict_SetItemString(d, "Y", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YCbCr
    x = PyInt_FromLong(CL_YCbCr);
    if (x == NULL || PyDict_SetItemString(d, "YCbCr", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YCbCr422
    x = PyInt_FromLong(CL_YCbCr422);
    if (x == NULL || PyDict_SetItemString(d, "YCbCr422", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YCbCr422DC
    x = PyInt_FromLong(CL_YCbCr422DC);
    if (x == NULL || PyDict_SetItemString(d, "YCbCr422DC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YCbCr422HC
    x = PyInt_FromLong(CL_YCbCr422HC);
    if (x == NULL || PyDict_SetItemString(d, "YCbCr422HC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YUV
    x = PyInt_FromLong(CL_YUV);
    if (x == NULL || PyDict_SetItemString(d, "YUV", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YUV422
    x = PyInt_FromLong(CL_YUV422);
    if (x == NULL || PyDict_SetItemString(d, "YUV422", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YUV422DC
    x = PyInt_FromLong(CL_YUV422DC);
    if (x == NULL || PyDict_SetItemString(d, "YUV422DC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef CL_YUV422HC
    x = PyInt_FromLong(CL_YUV422HC);
    if (x == NULL || PyDict_SetItemString(d, "YUV422HC", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_STEREO
    x = PyInt_FromLong(AWCMP_STEREO);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_STEREO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_JOINT_STEREO
    x = PyInt_FromLong(AWCMP_JOINT_STEREO);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_JOINT_STEREO", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_INDEPENDENT
    x = PyInt_FromLong(AWCMP_INDEPENDENT);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_INDEPENDENT", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_FIXED_RATE
    x = PyInt_FromLong(AWCMP_FIXED_RATE);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_FIXED_RATE", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_CONST_QUAL
    x = PyInt_FromLong(AWCMP_CONST_QUAL);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_CONST_QUAL", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_LOSSLESS
    x = PyInt_FromLong(AWCMP_LOSSLESS);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_LOSSLESS", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_MPEG_LAYER_I
    x = PyInt_FromLong(AWCMP_MPEG_LAYER_I);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_MPEG_LAYER_I", x) < 0)
        return;
    Py_DECREF(x);
#endif
#ifdef AWCMP_MPEG_LAYER_II
    x = PyInt_FromLong(AWCMP_MPEG_LAYER_II);
    if (x == NULL || PyDict_SetItemString(d, "AWCMP_MPEG_LAYER_II", x) < 0)
        return;
    Py_DECREF(x);
#endif

    (void) clSetErrorHandler(cl_ErrorHandler);
}
