Question

Je suis en train d'écrire quelques liaisons SWIG / Python pour un code C ++. Ceci est pour ce qu'on appelle l'API Accidental Kinect, je le moteur et les fonctions conduit travail . Les callbacks à la classe Listener qui Parse et remplir les tampons RVB et profondeur ne semblent pas s'appellent de SWIG. Les fils de capture de données commencent évidemment et commencent monopolisant le CPU, mais pas de lignes de débogage du rappel viennent à travers. Quelle serait une meilleure façon de tampons de données enrichissez et y accéder facilement à partir de Python?

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) {};
};

Voici la classe d'écoute avec les méthodes virtuelles, peut la version Python enveloppé de cette classe est utilisée pour les auditeurs Hériter pour la classe C ++? J'ai ajouté un écouteur minimal en C ++ et maintenant le travail restant est d'accéder aux tableaux efficacement avec typemaps. Actuellement, je me sers de ce typemap naïf

%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);
  }
}

Options mieux?

Était-ce utile?

La solution

Il y a une façon d'utiliser la fonction d'administration. Activez-le pour votre proxy KinectListener, une ligne de code:

%feature("director") KinectListener

Ensuite, vous pouvez hériter de la classe KinectListener dans le code python et définir vos fonctions.

Autres conseils

Par hasard, je suis d'être à la recherche dans les callbacks avec SWIG pour le moment.

Le documentation SWIG 2.0 dit ceci :

  

SWIG fournit un support complet pour les pointeurs de fonction, à condition que les fonctions de rappel sont définies dans C et non pas dans la langue cible. ... Cependant, les fonctions existantes de C peuvent être utilisés comme arguments à condition de les installer comme des constantes. Une façon de faire est d'utiliser la directive constante% comme ça ...

Je prévois d'écrire un rappel C avec JNI écrit à la main pour appeler en Java. S'il y a une autre façon, j'aimerais aussi l'entendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top