Pregunta

Estoy escribiendo algunos enlaces SWIG / Python para algo de código C ++. Esto es lo que se llama la API de Kinect accidental, tengo el motor y funciones dirigidas de trabajo . Las devoluciones de llamada a la clase de escucha de los cuales de análisis y poblar no parecen del RGB y tampones de profundidad para conseguir llamados desde el TRAGO. Los hilos de captura de datos, evidentemente, puesta en marcha y empiezan acaparando la CPU, pero no hay líneas de depuración de la devolución de llamada vienen a través. ¿Cuál sería una mejor manera de memorias intermedias de datos poblar y fácilmente acceder desde pitón?

class KinectListener
{
     public:
        virtual ~KinectListener(){};
        virtual void KinectDisconnected(Kinect *K) {};
        virtual void DepthReceived(Kinect *K) {};
        virtual void ColorReceived(Kinect *K) {};
        virtual void AudioReceived(Kinect *K) {};
};

Esta es la clase de escucha con los métodos virtuales, puede envuelta la versión Python de esta clase se utiliza para los oyentes heredan de la clase de C ++? Añadí un oyente mínima en C ++ y ahora el trabajo restante es acceder a la arrays de manera eficiente con typemaps. Actualmente estoy usando este typemap ingenua

%typemap(out) unsigned short [ANY] {
  int i;
  $result = PyList_New($1_dim0);
  for (i = 0; i < $1_dim0; i++) {
    PyObject *o = PyInt_FromLong((long)$1[i]);
    PyList_SetItem($result,i,o);
  }
}

opciones mejor?

¿Fue útil?

Solución

Hay una manera de utilizar la función de directores. Habilitarlo para su proxy KinectListener, una línea de código:

%feature("director") KinectListener

A continuación, puede heredar de la clase KinectListener en el código python y definir sus funciones.

Otros consejos

Por coincidencia, sucede que se busca en las devoluciones de llamada con el TRAGO en este momento.

El TRAGO documentación 2.0 dice que esto :

  

SWIG proporciona soporte completo para los punteros de función, siempre que las funciones de devolución de llamada se definen en C y no en el idioma de destino. ... Sin embargo, las funciones de C existentes se pueden utilizar como argumentos siempre se instalan como constantes. Una forma de hacer esto es usar la directiva% constante como este ...

tengo la intención de escribir una devolución de llamada C con JNI escrita a mano para poner en Java. Si hay otra manera, también me encantaría escucharlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top