Hello,

I wonder if someone could help me with a tricky conversion between c++ and python types (well, tricky for me!)

I have a c++ library that I would like to use in python via Boost::Python

One function fills a c++ unsigned char* buffer. It has two overloads:

       unsigned char * getPixels(int deviceID);
       bool getPixels(int id, unsigned char * pixels);

How would I go about getting that data into a python object, a string in particular? I seem to face several problems:
/////////////////////////
1) unsigned char* does not have a to_python converter to Py_String.

I tried this:

struct uchar_ptr_to_str
{
   static PyObject* convert(unsigned char* p)
   {
        return incref( str(p).ptr());
   }
   static PyTypeObject const *get_pytype () {return &PyString_Type; }
};
struct uchar_to_str
{
   static PyObject* convert(unsigned char& p)
   {
        return incref( str(p).ptr());
   }
   static PyTypeObject const *get_pytype () {return &PyString_Type; }
};

BOOST_PYTHON_MODULE(pyVideoInput)
{
to_python_converter< unsigned char*, uchar_ptr_to_str, true >(); to_python_converter< unsigned char, uchar_to_str, true >();

   class_<videoInput>("videoInput")
.def("getPixels", &videoInput::getPixels, return_value_policy<manage_new_object>())
      ;
}


/////////////////////////
2) How do I allocate memory in a python string and then pass the pointer through boost python, to be filled by the c++ function?

In c++, the library would be used like this:

   videoInput vi;
   ....
   unsigned char * buffer = new unsigned char[size];
   vi.getPixels(device, buffer);

The buffer could be pretty big so I want to pass by pointer, not by value

The alternative would be to use the overload which returns the pointer, but I can't get that to compile with bjam. I get the dreaded:

make_instance.hpp(24) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>

when I try to return a pointer...

Thanks for any help freeing me from my confusion!

Regards

Si





_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to