blob: 0442adcd5cc83990d82d15e511759b53ae4966de [file] [log] [blame]
#include <Python.h>
#include "g722_enc_dec.h"
#include "g722_typedefs.h"
static PyObject* g722_dec (PyObject* self, PyObject* args) {
g722_decode_state_t s;
int opts = 0;
uint16_t gain = 0xFFFF;
int ratio = 4;
PyObject* obj0 = NULL;
PyObject* obj1 = NULL;
PyObject* resultobj = NULL;
if (!PyArg_ParseTuple(args,(char *)"OO:decode", &obj0, &obj1)) {
return 0;
}
int rate = PyInt_AsLong(obj0);
char* in = PyString_AsString(obj1);
int len = PyString_Size(obj1);
g722_decode_init(&s, rate, opts);
void* out = malloc(len*ratio);
g722_decode(&s, out, (uint8_t*)in, len, gain);
resultobj = PyString_FromStringAndSize(out, len*ratio);
free(out);
return resultobj;
}
static PyObject* g722_enc (PyObject* self, PyObject* args) {
g722_encode_state_t s;
int opts = 0;
int ratio = 4;
PyObject* obj0 = NULL;
PyObject* obj1 = NULL;
PyObject* resultobj = NULL;
if (!PyArg_ParseTuple(args, (char *)"OO:encode", &obj0, &obj1)) {
return 0;
}
memset(&s, 0, sizeof(s));
int rate = PyInt_AsLong(obj0);
char* in = PyString_AsString(obj1);
int len = PyString_Size(obj1);
g722_encode_init(&s, rate, opts);
void* out = calloc(len/ratio + 1, 1);
int res = g722_encode(&s, out, (int16_t*)in, (len/4)*2);
resultobj = PyString_FromStringAndSize(out, res);
free(out);
return resultobj;
}
static PyMethodDef g722Methods[] = {
{ (char *)"decode", g722_dec, METH_VARARGS, "decode g722 to PCM"},
{ (char *)"encode", g722_enc, METH_VARARGS, "encode PCM data to g722"},
{ NULL, NULL, 0, NULL }
};
PyMODINIT_FUNC
initg722(void)
{
(void) Py_InitModule("g722", g722Methods);
}