annotate swig/xtract.i @ 133:15bc88384ecd

Java SWIG bindings improvements
author Jamie Bullock <jamie@postlude.co.uk>
date Wed, 13 Jun 2012 15:08:11 +0100
parents c8502708853b
children 5810fb03cacc
rev   line source
jamie@87 1 %module xtract
jamie@133 2 %include typemaps.i
jamie@87 3 %include carrays.i
jamie@87 4
jamie@87 5 %{
jamie@87 6 #include "xtract/xtract_scalar.h"
jamie@103 7 #include "xtract/xtract_vector.h"
jamie@107 8 #include "xtract/xtract_helper.h"
jamie@110 9 #include "xtract/xtract_macros.h"
jamie@110 10 #include "xtract/xtract_delta.h"
jamie@103 11 #include "xtract/libxtract.h"
jamie@87 12 %}
jamie@87 13
jamie@110 14 /* Ensure filterbank gets freed */
jamie@110 15 /** FIX: This doesn't work, or I'm not using properly. For now just add an explicit call to destroy_filterbank() in the target code */
jamie@110 16 %newobject create_filterbank;
jamie@110 17 %delobject destroy_filterbank;
jamie@110 18
jamie@110 19
jamie@133 20 %typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
jamie@133 21 SWIGTYPE (CLASS::*) "SWIG"
jamie@133 22
jamie@133 23 %typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
jamie@133 24 SWIGTYPE (CLASS::*) %{
jamie@133 25 protected long getPointer() {
jamie@133 26 return swigCPtr;
jamie@133 27 }
jamie@133 28 %}
jamie@133 29
jamie@110 30 /* Helper functions */
jamie@110 31 %inline %{
jamie@110 32
jamie@133 33 void *floata_to_voidp(float f[])
jamie@133 34 {
jamie@133 35 return (void *)f;
jamie@133 36 }
jamie@133 37
jamie@110 38 xtract_function_descriptor_t
jamie@110 39 *get_descriptor(xtract_function_descriptor_t *fd, int i){
jamie@110 40
jamie@110 41 return &fd[i];
jamie@110 42 }
jamie@110 43
jamie@110 44 /* Return a pointer to memory allocated for a mel filterbank */
jamie@110 45 xtract_mel_filter *create_filterbank(int n_filters, int blocksize){
jamie@110 46
jamie@110 47 float **filters;
jamie@110 48 xtract_mel_filter *mf;
jamie@110 49 int n, N;
jamie@110 50
jamie@110 51 N = blocksize;
jamie@110 52
jamie@110 53 mf = malloc(sizeof(xtract_mel_filter));
jamie@110 54 mf->n_filters = n_filters;
jamie@110 55
jamie@110 56 filters = (float **)malloc(n_filters * sizeof(float *));
jamie@110 57
jamie@110 58 for(n = 0; n < n_filters; n++)
jamie@110 59 filters[n] = (float *)malloc(N * sizeof(float));
jamie@110 60
jamie@110 61 mf->filters = filters;
jamie@110 62
jamie@110 63 return mf;
jamie@110 64
jamie@110 65 }
jamie@110 66
jamie@110 67 /* Free a mel filterbank */
jamie@110 68 void destroy_filterbank(xtract_mel_filter *filterbank){
jamie@110 69
jamie@110 70 int i = filterbank->n_filters;
jamie@110 71 float **filters;
jamie@110 72
jamie@110 73 filters = filterbank->filters;
jamie@110 74
jamie@110 75 while(i--)
jamie@110 76 free(filters[i]);
jamie@110 77
jamie@110 78 free(filters);
jamie@110 79
jamie@110 80 free(filterbank);
jamie@110 81
jamie@110 82 }
jamie@110 83
jamie@110 84 /* Eventually this should be deprecated */
jamie@110 85 /* void destroy_filterbank_explicit(float **filterbank, int n_filters){
jamie@110 86
jamie@110 87 int i = n_filters;
jamie@110 88
jamie@110 89 while(i--)
jamie@110 90 free(filterbank[i]);
jamie@110 91
jamie@110 92 free(filterbank);
jamie@110 93 }
jamie@110 94 */
jamie@110 95
jamie@110 96
jamie@110 97
jamie@110 98 %}
jamie@110 99
jamie@110 100
jamie@88 101 %array_class(float, floatArray);
jamie@110 102 %array_class(int, intArray);
jamie@87 103 %apply float *OUTPUT { float *result };
jamie@133 104 %apply float[] {const float *data};
jamie@133 105
jamie@87 106
jamie@103 107 %ignore xtract;
jamie@103 108
jamie@87 109 %include "xtract/xtract_scalar.h"
jamie@103 110
jamie@110 111 /* We have to put xtract_delta declarations inline because it contains a mixture of vector and scalar functions */
jamie@110 112 %inline %{
jamie@110 113
jamie@110 114 int xtract_flux(const float *data, const int N, const void *argv , float *result);
jamie@110 115 int xtract_lnorm(const float *data, const int N, const void *argv , float *result);
jamie@110 116
jamie@110 117 %}
jamie@110 118
jamie@103 119 %clear float *result;
jamie@103 120
jamie@110 121 %inline %{
jamie@110 122
jamie@110 123 int xtract_difference_vector(const float *data, const int N, const void *argv, float *result);
jamie@110 124
jamie@110 125 %}
jamie@110 126
jamie@103 127 %include "xtract/xtract_vector.h"
jamie@107 128 %include "xtract/xtract_helper.h"
jamie@110 129 %include "xtract/xtract_macros.h"
jamie@103 130 %include "xtract/libxtract.h"
jamie@110 131
jamie@110 132