|
| 1 | +#include <stdio.h> |
| 2 | +#include <Python.h> |
| 3 | + |
| 4 | +#include <opus/opus.h> |
| 5 | + |
| 6 | +#include <vpx/vpx_decoder.h> |
| 7 | +#include <vpx/vp8dx.h> |
| 8 | + |
| 9 | + |
| 10 | +#define MODULE_NAME "dummy.binding" |
| 11 | + |
| 12 | +static PyObject* |
| 13 | +test(PyObject *args) |
| 14 | +{ |
| 15 | + OpusDecoder *opus_decoder; |
| 16 | + int opus_error; |
| 17 | + vpx_codec_ctx_t vpx_decoder; |
| 18 | + vpx_codec_err_t vpx_error; |
| 19 | + |
| 20 | + // check opus |
| 21 | + opus_decoder = opus_decoder_create(48000, 2, &opus_error); |
| 22 | + if (opus_error != OPUS_OK) { |
| 23 | + PyErr_SetString(PyExc_RuntimeError, "opus_decoder_create failed"); |
| 24 | + return NULL; |
| 25 | + } |
| 26 | + opus_decoder_destroy(opus_decoder); |
| 27 | + |
| 28 | + // check vpx |
| 29 | + vpx_error = vpx_codec_dec_init(&vpx_decoder, vpx_codec_vp8_dx(), NULL, 0); |
| 30 | + if (vpx_error != VPX_CODEC_OK) { |
| 31 | + PyErr_SetString(PyExc_RuntimeError, "vpx_codec_dec_init failed"); |
| 32 | + return NULL; |
| 33 | + } |
| 34 | + vpx_codec_destroy(&vpx_decoder); |
| 35 | + |
| 36 | + fprintf(stderr, "Codecs are OK\n"); |
| 37 | + |
| 38 | + Py_RETURN_NONE; |
| 39 | +} |
| 40 | + |
| 41 | +static PyMethodDef module_methods[] = { |
| 42 | + {"test", (PyCFunction)test, METH_NOARGS, ""}, |
| 43 | + {NULL} |
| 44 | +}; |
| 45 | + |
| 46 | +static struct PyModuleDef moduledef = { |
| 47 | + PyModuleDef_HEAD_INIT, |
| 48 | + MODULE_NAME, /* m_name */ |
| 49 | + "Dummy bindings for opus and vpx.", /* m_doc */ |
| 50 | + -1, /* m_size */ |
| 51 | + module_methods, /* m_methods */ |
| 52 | + NULL, /* m_reload */ |
| 53 | + NULL, /* m_traverse */ |
| 54 | + NULL, /* m_clear */ |
| 55 | + NULL, /* m_free */ |
| 56 | +}; |
| 57 | + |
| 58 | +PyMODINIT_FUNC |
| 59 | +PyInit_binding(void) |
| 60 | +{ |
| 61 | + PyObject* m; |
| 62 | + |
| 63 | + m = PyModule_Create(&moduledef); |
| 64 | + if (m == NULL) |
| 65 | + return NULL; |
| 66 | + |
| 67 | + return m; |
| 68 | +} |
0 commit comments