Ejemplo n.º 1
0
PyObject *
_VGA_Init(void)
{
	PyObject *mod, *dict;
	mod = Py_InitModule4("vga", NULL,
			     NULL/*doc*/, (PyObject *)NULL,
			     PYTHON_API_VERSION);

	dict = PyModule_GetDict(mod);

	#define SETBUILTIN(NAME, OBJECT) \
	if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)	\
		return NULL;

	SETBUILTIN("framebuffer",
		PyBuffer_FromReadWriteMemory((void *)0xa0000, 0x10000));
	SETBUILTIN("textbuffer",
		PyBuffer_FromReadWriteMemory((void *)0xb8000, 80*25*2));
	SETBUILTIN("savebuffer",
		PyBuffer_FromReadWriteMemory((void *)savebuffer, 80*25*2));
	SETBUILTIN("splashscreen",
		PyBuffer_FromMemory(bootscreen, 0x10000));
	SETBUILTIN("font0",
		PyBuffer_FromReadWriteMemory((void *)font0, 8192));

	init_screen();

	return mod;
}
static PyObject *
image_fate_buffer(PyObject *self, PyObject *args)
{
    PyObject *pyim;
    PyObject *pybuf;

    int x=0,y=0;
    if(!PyArg_ParseTuple(args,"O|ii",&pyim,&x,&y))
    {
	return NULL;
    }

    image *i = (image *)PyCObject_AsVoidPtr(pyim);

#ifdef DEBUG_CREATION
    printf("%p : IM : BUF\n",i);
#endif

    if(x < 0 || x >= i->Xres() || y < 0 || y >= i->Yres())
    {
	PyErr_SetString(PyExc_ValueError,"request for buffer outside image bounds");
	return NULL;
    }
    int index = i->index_of_subpixel(x,y,0);
    int last_index = i->index_of_sentinel_subpixel();
    assert(index > -1 && index < last_index);

    pybuf = PyBuffer_FromReadWriteMemory(
	i->getFateBuffer()+index,
	(last_index - index)  * sizeof(fate_t));

    Py_XINCREF(pybuf);

    return pybuf;
}
Ejemplo n.º 3
0
static PyObject *PyRendererAgg_buffer_rgba(PyRendererAgg *self, PyObject *args, PyObject *kwds)
{
#if PY3K
    return PyBytes_FromStringAndSize((const char *)self->x->pixBuffer,
                                     self->x->get_width() * self->x->get_height() * 4);
#else
    return PyBuffer_FromReadWriteMemory(self->x->pixBuffer,
                                        self->x->get_width() * self->x->get_height() * 4);
#endif
}
Ejemplo n.º 4
0
PyObject *engine_buffer_setup(Evas_PyObject *o, PyObject *kwargs)
{
    Evas_Engine_Info_Buffer *einfo;
    int buflen, w, h;
    PyObject *value, *buffer;

    BENCH_START
    evas_output_method_set(o->evas, evas_render_method_lookup("buffer"));
    BENCH_END

    einfo = (Evas_Engine_Info_Buffer *) evas_engine_info_get(o->evas);
    if (!einfo) {
        PyErr_Format(PyExc_SystemError, "Evas is not built with buffer engine support.");
        return NULL;
    }

    einfo->info.func.new_update_region = NULL;
    einfo->info.func.free_update_region = NULL;
    einfo->info.use_color_key = 0;
    einfo->info.alpha_threshold = 0;

    // Class wrapper ensures these kwargs exist.
    if (!PyArg_ParseTuple(PyDict_GetItemString(kwargs, "size"), "ii", &w, &h))
        return 0;

    einfo->info.depth_type = PyLong_AsLong(PyDict_GetItemString(kwargs, "depth"));
    einfo->info.dest_buffer_row_bytes = PyLong_AsLong(PyDict_GetItemString(kwargs, "stride"));
    einfo->info.dest_buffer = 0;
    value = PyDict_GetItemString(kwargs, "buffer");
    if (!value || value == Py_None) {
        buffer = PyBuffer_New(einfo->info.dest_buffer_row_bytes * h);
        if (PyObject_AsWriteBuffer(buffer, &einfo->info.dest_buffer, &buflen) == -1)
            return 0;
    } else {
        if (PyNumber_Check(value)) {
            einfo->info.dest_buffer = (void *) PyLong_AsLong(value);
            buffer = PyBuffer_FromReadWriteMemory(einfo->info.dest_buffer, 
                                                  einfo->info.dest_buffer_row_bytes * h);
        } else {
            if (PyObject_AsWriteBuffer(value, &einfo->info.dest_buffer, &buflen) == -1)
                return 0;
            if (buflen < einfo->info.dest_buffer_row_bytes * h) {
                PyErr_SetString(PyExc_AttributeError, "Buffer not big enough");
                return 0;
            }
            buffer = value;
            Py_INCREF(buffer);
        }
    }

    BENCH_START
    evas_engine_info_set(o->evas, (Evas_Engine_Info *) einfo);
    BENCH_END
    return buffer;
}
Ejemplo n.º 5
0
static PyObject *
builtin_textbuffer(PyObject *self, PyObject *args)
{
	static PyObject *tb = NULL;

	if(!tb)	{
		tb = PyBuffer_FromReadWriteMemory((void *)0xb8000, 80*25*2);
	}
	Py_INCREF(tb);
	return tb;
}
Ejemplo n.º 6
0
    static int callback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
        double streamTime, RtAudioStreamStatus status, void *data )
    {
        PyRtAudio* self = (PyRtAudio*) data;

        if (status == RTAUDIO_OUTPUT_UNDERFLOW)
            printf("underflow.\n");

        if (self == NULL) return -1;

        float* in = (float *) inputBuffer;
        float* out = (float *) outputBuffer;

        PyObject *py_callback_func = self->callback_func;

        int retval = 0;

        if (py_callback_func) {
            PyGILState_STATE gstate = PyGILState_Ensure();

            PyObject* iBuffer = PyBuffer_FromMemory(in, sizeof(float) * self->inputChannels * nBufferFrames);
            PyObject* oBuffer = PyBuffer_FromReadWriteMemory(out, sizeof(float) * nBufferFrames);
            PyObject *arglist =  Py_BuildValue("(O,O)", oBuffer, iBuffer);

            if (arglist == NULL) {
                printf("error.\n");
                PyErr_Print();
                PyGILState_Release(gstate);
                return 2;
            }

            // Calling the callback
            PyObject *result = PyEval_CallObject(py_callback_func, arglist);

            if (PyErr_Occurred() != NULL) {
                PyErr_Print();
            }
            else if PyInt_Check(result) {
              retval = PyInt_AsLong(result);
            }
            
            Py_DECREF(arglist);
            Py_DECREF(oBuffer);
            Py_DECREF(iBuffer);
            Py_XDECREF(result);

            PyGILState_Release(gstate);            
        }

        return retval;
    }
Ejemplo n.º 7
0
static PyObject *
metalmem_membuf(PyObject *self, PyObject *args)
{
    unsigned addr;
    Py_ssize_t len;
    int writable = 0;

    if (!PyArg_ParseTuple(args, "In|i", &addr, &len, &writable))
        return NULL;
    if (writable)
        return PyBuffer_FromReadWriteMemory((void*)addr, len);
    else
        return PyBuffer_FromMemory((void*)addr, len);
}
Ejemplo n.º 8
0
static PyObject *
buf_bss(PyObject *self, PyObject *args)
{
	PyObject *olen;
	int len;

	if(!PyArg_UnpackTuple(args, "bss", 1, 1, &olen))
		return NULL;
	if(!PyInt_CheckExact(olen))
		return NULL;

	len = PyInt_AS_LONG(olen);

	return PyBuffer_FromReadWriteMemory(malloc(len), len);
}
Ejemplo n.º 9
0
  bool exec( const void* in, size_t in_sz, void* out, size_t out_sz ){
    if (!func){
    //std::cerr << "Error state" << std::endl;
      return  false;
    }

    PyObject* args = PyTuple_New( 2 );
    if (!args){
    //PyErr_Print();
    //std::cerr << "Error building args tuple" << std::endl;
      return false;
    }

    PyObject* in_buff = PyBuffer_FromMemory( (void*)in, in_sz );
    if(!in_buff){
      Py_DECREF(args);
    //PyErr_Print();
    //std::cerr << "Error building in buff" << std::endl;
      return false;
    }

    PyObject* out_buff = PyBuffer_FromReadWriteMemory( out, out_sz );
    if(!out_buff){
      Py_DECREF(in_buff);
      Py_DECREF(args);
    //PyErr_Print();
    //std::cerr << "Error building out buff" << std::endl;
      return false;
    }

    PyTuple_SetItem(args, 0, in_buff);
    PyTuple_SetItem(args, 1, out_buff);

    PyObject* result = PyObject_CallObject(func, args);
//  Py_DECREF(in_buff);
//  Py_DECREF(out_buff);
    Py_DECREF(args);
    if (!result || result != Py_True ){
    //PyErr_Print();
    //std::cerr << "Error invoking function" << std::endl;
      return false;
    }

    Py_DECREF(result);
    return true;
  }
Ejemplo n.º 10
0
void call_rule_engine(
    bp::object&        _rc,
    const std::string& _name,
    std::vector< serialized_t >& _data ) {

    bp::list rule_arguments;
    for( size_t i = 0; i < _data.size(); ++i ) {
        PyObject* py_buf = PyBuffer_FromReadWriteMemory(
                               &_data[i]->front(),
                               _data[i]->size() * sizeof( uint8_t ) );
        rule_arguments.append( bp::object(bp::handle<>(py_buf)) );

    }

    bp::object rf = _rc.attr(_name.c_str());
    rf( rule_arguments );
}
Ejemplo n.º 11
0
static PyObject *
buf_abs(PyObject *self, PyObject *args)
{
	PyObject *oaddr, *olen;
	int addr, len;

	if(!PyArg_UnpackTuple(args, "abs", 2, 2, &oaddr, &olen))
		return NULL;
	if(!PyInt_CheckExact(oaddr) ||
	   !PyInt_CheckExact(olen))
		return NULL;

	addr = PyInt_AS_LONG(oaddr);
	len  = PyInt_AS_LONG(olen);

	return PyBuffer_FromReadWriteMemory((void *)addr, len);
}
Ejemplo n.º 12
0
static PyObject *PyImage_buffer_rgba(PyImage *self, PyObject *args, PyObject *kwds)
{
#if PY3K
    return Py_BuildValue("nny#",
                         self->x->rowsOut,
                         self->x->colsOut,
                         self->x->rbufOut,
                         self->x->rowsOut * self->x->colsOut * 4);
#else
    PyObject *buffer =
        PyBuffer_FromReadWriteMemory(self->x->rbufOut, self->x->rowsOut * self->x->colsOut * 4);
    if (buffer == NULL) {
        return NULL;
    }

    return Py_BuildValue("nnN", self->x->rowsOut, self->x->colsOut, buffer);
#endif
}
Ejemplo n.º 13
0
PyObject *
_PyBuiltin_Init(void)
{
	PyObject *mod, *dict;
	mod = Py_InitModule4("__builtin__", builtin_methods,
			     NULL/*doc*/, (PyObject *)NULL,
			     PYTHON_API_VERSION);

	dict = PyModule_GetDict(mod);

	#define SETBUILTIN(NAME, OBJECT) \
	if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)	\
		return NULL;

	SETBUILTIN("None",		Py_None);
	SETBUILTIN("framebuffer",
		PyBuffer_FromReadWriteMemory((void *)0xa0000, 0x10000));

	return mod;
}
static PyObject *
image_buffer(PyObject *self, PyObject *args)
{
    PyObject *pyim;
    PyObject *pybuf;

    int x=0,y=0;
    if(!PyArg_ParseTuple(args,"O|ii",&pyim,&x,&y))
    {
	return NULL;
    }

    image *i = (image *)PyCObject_AsVoidPtr(pyim);

#ifdef DEBUG_CREATION
    printf("%p : IM : BUF\n",i);
#endif

    if(! i->ok())
    {
	PyErr_SetString(PyExc_MemoryError, "image not allocated");
	return NULL;
    }

    if(x < 0 || x >= i->Xres() || y < 0 || y >= i->Yres())
    {
	PyErr_SetString(PyExc_ValueError,"request for buffer outside image bounds");
	return NULL;
    }
    int offset = 3 * (y * i->Xres() + x);
    assert(offset > -1 && offset < i->bytes());
    pybuf = PyBuffer_FromReadWriteMemory(i->getBuffer()+offset,i->bytes()-offset);
    Py_XINCREF(pybuf);
    //Py_XINCREF(pyim);

    return pybuf;
}
Ejemplo n.º 15
0
static PyObject *
buf_sym(PyObject *self, PyObject *args)
{
	PyObject *oname;
	char *name;
	int i;

	if(!PyArg_UnpackTuple(args, "res", 1, 1, &oname))
		return NULL;
	if(!PyString_Check(oname))
		return NULL;

	name = PyString_AsString(oname);

	for(i = 0;; ++i)	{
		if(!symtab[i].name)	{
			printf("unknown symbol: %s\n", name);
			return NULL;
		}
		if(strcmp(symtab[i].name, name) == 0)
			break;
	}
	return PyBuffer_FromReadWriteMemory(symtab[i].ptr, symtab[i].len);
}