PyObject* encode_wrapper(WebPEncodeFunc encode_func, PyObject* self, PyObject* args) { PyStringObject *data_string; int width; int height; int stride; float quality_factor; if (!PyArg_ParseTuple(args, "Siiif", &data_string, &width, &height, &stride, &quality_factor)) { Py_INCREF(Py_None); return Py_None; } uint8_t *data; Py_ssize_t size; PyString_AsStringAndSize((struct PyObject *) data_string, &data, &size); if (stride * height > size) { Py_INCREF(Py_None); return Py_None; } uint8_t *output; size_t ret_size = encode_func(data, width, height, stride, quality_factor, &output); if (ret_size > 0) { PyObject *ret = PyString_FromStringAndSize(output, ret_size); free(output); return ret; } Py_INCREF(Py_None); return Py_None; }
void encode_funcs( func_node *func_list ) { func_node *walk = func_list; while (walk) { encode_func( walk ); walk = walk->link; } }
static char * stringEncode( const char *src, MODPCodecType codec) { size_t srclen; char *dest, *fdest, *result; int d = -1; int (*encode_func)(char*, const char*,int); size_t (*encode_len_func)(size_t); if(src == NULL) return NULL; switch (codec) { case MODPCodecBase64: encode_func = modp_b64_encode; encode_len_func = b64_encode_len; break; case MODPCodecBase64W: encode_func = modp_b64w_encode; encode_len_func = b64w_encode_len; break; case MODPCodecBase16: encode_func = modp_b16_encode; encode_len_func = b16_encode_len; break; case MODPCodecBase2: encode_func = modp_b2_encode; encode_len_func = b2_encode_len; break; default: return NULL; } result = NULL; srclen = strlen(src); if (srclen) { if (NULL != (dest = malloc(encode_len_func(srclen) +1))) { if ( 0 < (d = encode_func(dest, src, srclen))) { if (NULL != (fdest = str_resize(dest, d))) { result = fdest; } } free(dest); } } return result; }