comparison fft/cross/Crosswrap.js @ 6:91d77df352fa

Make an object (& put allocation in it)
author Chris Cannam
date Mon, 05 Oct 2015 11:54:32 +0100
parents b4ab69bdb4c8
children
comparison
equal deleted inserted replaced
5:b4ab69bdb4c8 6:91d77df352fa
1 "use strict";
1 2
2 document.write("<p>start</p>"); 3 document.write("<p>start</p>");
3 4
4 fftCross = Module.cwrap( 5 var fftCross = Module.cwrap(
5 'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ] 6 'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ]
6 ); 7 );
7 8
8 var data = new Float64Array([1,1,1,1,1,1,1,1]); 9 function FFTCross(size) {
9 var n = data.length * data.BYTES_PER_ELEMENT; 10 this.size = size;
10 var ptr = Module._malloc(n * 4); 11 this.n = size * 8;
11 var h1 = new Uint8Array(Module.HEAPU8.buffer, ptr, n); 12 this.ptr = Module._malloc(this.n * 4);
12 var h2 = new Uint8Array(Module.HEAPU8.buffer, ptr + n, n); 13 this.ri = new Uint8Array(Module.HEAPU8.buffer, this.ptr, this.n);
13 document.write("ptr = " + ptr + ", h1 = " + h1 + "<br>"); 14 this.ii = new Uint8Array(Module.HEAPU8.buffer, this.ptr + this.n, this.n);
14 h1.set(new Uint8Array(data.buffer)); 15 this.transform = function(real, imag, inverse) {
15 h2.set(new Uint8Array(data.buffer)); 16 var ptr = this.ptr;
16 var result = fftCross(8, 0, ptr, ptr + n, ptr + 2*n, ptr + 3*n); 17 var n = this.n;
17 var real = new Float64Array(Module.HEAPU8.buffer, ptr + 2*n, 8); 18 this.ri.set(new Uint8Array(real.buffer));
18 var imag = new Float64Array(Module.HEAPU8.buffer, ptr + 3*n, 8); 19 this.ii.set(new Uint8Array(imag.buffer));
19 document.write("result: " + result + "<br>"); 20 fftCross(this.size, inverse,
21 ptr, ptr + n, ptr + n * 2, ptr + n * 3);
22 var ro = new Float64Array(Module.HEAPU8.buffer,
23 ptr + n * 2, this.size);
24 var io = new Float64Array(Module.HEAPU8.buffer,
25 ptr + n * 2, this.size);
26 return { real: ro, imag: io };
27 }
28 this.discard = function() {
29 Module._free(this.ptr);
30 }
31 }
32
33 var f = new FFTCross(8);
34 var real = new Float64Array([1,1,1,1,1,1,1,1]);
35 var imag = new Float64Array([0,0,0,0,0,0,0,0]);
36 var out = f.transform(real, imag, false);
20 document.write("output: "); 37 document.write("output: ");
21 for (var i = 0; i < 8; ++i) { 38 for (var i = 0; i < 8; ++i) {
22 document.write(real[i] + "," + imag[i] + " "); 39 document.write(out.real[i] + "," + out.imag[i] + " ");
23 } 40 }
24 Module._free(ptr);
25 41
26 42
27 document.write("<p>end</p>"); 43 document.write("<p>end</p>");