使用const int16_t指针的Swig + Numpy.i

时间:2015-11-10 09:20:11

标签: python numpy swig

我试图用SWIG包装以下函数,所以我可以用Python调用它。签名是:

    int WebRtcVad_Process(VadInst* handle, int fs, const int16_t* audio_frame,
                  size_t frame_length);

我有以下SWIG文件:

    %module webrtc_vad

    %{
    #define SWIG_FILE_WITH_INIT
    #include "webrtc/common_audio/vad/include/webrtc_vad.h"
    %}

    %{
      /* Include in the generated wrapper file */
      typedef unsigned int size_t;
    %}

    %include "stdint.i"
    %include "numpy.i"

    %init %{
      import_array();
    %}

    typedef unsigned int size_t;

    %apply (const int16_t* IN_ARRAY1, unsigned int DIM1) {(const int16_t* audio_frame, size_t frame_length)};
    %include "webrtc/common_audio/vad/include/webrtc_vad.h"

最后,我收到以下错误:webrtc_vad.i:22: Warning 453: Can't apply (int16_t const *IN_ARRAY1,unsigned int DIM1). No typemaps are defined.

如果我删除签名中的unsigned位,那么它编译得很好,但函数签名按原样进行(即函数需要一个int指针和所有业务)。

有没有人有解决方案?非常感谢你。

1 个答案:

答案 0 :(得分:0)

我没有完整的答案,但我有类似的问题,可能会有所帮助。

我不知道为什么swig不会将unsigned int识别为大小,因为根据文档"每个类似int的类型"应该管用。使用int应该会很好。

我的问题是使用<stdint.h>类型的数组(例如int16_t),我已经通过编辑numpy.i使其工作了:

另请参阅以下内容:using stdint with swig and numpy