私はいくつかのC++コード用にいくつかのSWIG/Pythonバインディングを書いています。これは、Kinect Accidental APIと呼ばれるもので、モーターとLEDの機能が動作しています。RGBバッファとDepthバッファを解析して設定するListenerクラスへのコールバックは、SWIGから呼び出されていないようです。データキャプチャスレッドは明らかに起動してCPUを占有し始めますが、コールバックからのデバッグラインは通過しません。データバッファにデータを入力し、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) {};
};
これが仮想メソッドを持つリスナークラスです。このクラスのPythonラップバージョンを使用して、c ++クラスのリスナーを継承できますか?C ++で最小限のリスナーを追加しましたが、残りの作業は、タイプマップを使用して配列に効率的にアクセスすることです。現在、私はこの素朴なタイプマップを使用しています
%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);
}
}
より良いオプション?