Skip to content

Commit

Permalink
Using embing instead of cwrap
Browse files Browse the repository at this point in the history
  • Loading branch information
nfroidure committed Nov 20, 2015
1 parent 1d7ea63 commit 24ec907
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 45 deletions.
52 changes: 35 additions & 17 deletions csrc/fallback.cc
@@ -1,33 +1,51 @@
// Emscripten wrapper

#include <emscripten/bind.h>
#include <stdlib.h>
#include "./woff2/woff2_enc.h"

using namespace emscripten;
using std::string;

extern "C"
{
int getSizePtr() {
int* sizePtr = reinterpret_cast<int*>(calloc(1, sizeof(int)));
return reinterpret_cast<int>(sizePtr);
}

char * convertTTFToWOFF2(char * input, int length, int * outputLength) {
int convert(int inputDataAddress, int inputLength, int outputSizePtrAddress) {
int* outputSizePtr = reinterpret_cast<int*>(outputSizePtrAddress);
char* inputData = reinterpret_cast<char*>(inputDataAddress);

const uint8_t* input_data = reinterpret_cast<const uint8_t*>(input);
size_t output_size = woff2::MaxWOFF2CompressedSize(input_data, length);
size_t outputSize = woff2::MaxWOFF2CompressedSize(
reinterpret_cast<const uint8_t*>(inputData),
inputLength
);

uint8_t* output_data = reinterpret_cast<uint8_t*>(malloc(output_size));
uint8_t* outputData = reinterpret_cast<uint8_t*>(calloc(outputSize, sizeof(uint8_t)));


if (woff2::ConvertTTFToWOFF2(input_data, length,
output_data, &output_size)) {
//output.resize(output_size);
}
if(!woff2::ConvertTTFToWOFF2(
reinterpret_cast<const uint8_t*>(inputData),
inputLength,
outputData,
&outputSize
)) {
// throw an error
}

*outputLength = output_size;
*outputSizePtr = outputSize;

return (char *) output_data;
}
return reinterpret_cast<int>(outputData);
}

void freeTTFToWOFF2(char * output_data) {
free(output_data);
}
void freePtrs(int outputDataAddress, int sizePtrAddress) {
int* sizePtr = reinterpret_cast<int*>(sizePtrAddress);
char* outputData = reinterpret_cast<char*>(outputDataAddress);
free(outputData);
free(sizePtr);
}

EMSCRIPTEN_BINDINGS(ttf2woff2_fallback) {
function("getSizePtr", &getSizePtr, allow_raw_pointers());
function("convert", &convert, allow_raw_pointers());
function("freePtrs", &freePtrs, allow_raw_pointers());
}
31 changes: 13 additions & 18 deletions jssrc/index.js
Expand Up @@ -3,33 +3,28 @@
var theTTFToWOFF2Module = require('./ttf2woff2');

module.exports = function ttf2woff2(inputContent) {
var outputSize;
var outputContent;
var outputBufferPtr;
var i;

// Prepare input
var inputBuffer = theTTFToWOFF2Module._malloc(inputContent.length + 1);
var outputSizePtr = theTTFToWOFF2Module._malloc(4);

theTTFToWOFF2Module.writeArrayToMemory(inputContent, inputBuffer);

// Run
outputBufferPtr = theTTFToWOFF2Module._convertTTFToWOFF2(
inputBuffer, inputContent.length + 1, outputSizePtr
);

// Retrieve output
outputSize = theTTFToWOFF2Module.getValue(outputSizePtr, 'i32');
outputContent = new Buffer(outputSize);
// Run
var outputBufferPtr = theTTFToWOFF2Module.convert(
inputBuffer, inputContent.length, outputSizePtr
);

for(i = 0; i < outputSize; i++) {
outputContent[i] = theTTFToWOFF2Module.getValue(outputBufferPtr + i, 'i8');
}
// Retrieve output
var outputSize = theTTFToWOFF2Module.getValue(outputSizePtr, 'i32');
var outputContent = new Buffer(outputSize);

theTTFToWOFF2Module._free(inputBuffer);
theTTFToWOFF2Module._free(outputSizePtr);
theTTFToWOFF2Module._freeTTFToWOFF2(outputBufferPtr);
for(var i = 0; i < outputSize; i++) {
outputContent[i] = theTTFToWOFF2Module.getValue(outputBufferPtr + i, 'i8');
}

return outputContent;
theTTFToWOFF2Module.freePtrs(outputBufferPtr, outputSizePtr);

return outputContent;
};
16 changes: 8 additions & 8 deletions jssrc/ttf2woff2.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -19,8 +19,8 @@
"lint": "eslint src/*.js tests/*.src jssrc/index.js",
"preversion": "npm run lint && npm test",
"make": "node-gyp build",
"emcc": "miniquery -p \"targets.#.sources.#\" ./binding.gyp | grep -v \"csrc/addon.cc\" | xargs emcc -o jssrc/ttf2woff2.js -O3 --memory-init-file 0 -s EXPORTED_FUNCTIONS=\"['_convertTTFToWOFF2','_freeTTFToWOFF2']\" -s \"TOTAL_MEMORY=536870912\" -s \"ALLOW_MEMORY_GROWTH=1\" --post-js jssrc/post.js csrc/fallback.cc",
"emcc-debug": "miniquery -p \"targets.#.sources.#\" ./binding.gyp | grep -v \"csrc/addon.cc\" | xargs emcc -o jssrc/ttf2woff2.js -s EXPORTED_FUNCTIONS=\"['_convertTTFToWOFF2','_freeTTFToWOFF2']\" -s \"ALLOW_MEMORY_GROWTH=1\" -s \"ASSERTIONS=1\" --post-js jssrc/post.js csrc/fallback.cc",
"emcc": "miniquery -p \"targets.#.sources.#\" ./binding.gyp | grep -v \"csrc/addon.cc\" | xargs emcc --bind -o jssrc/ttf2woff2.js -O3 --memory-init-file 0 -s \"TOTAL_MEMORY=536870912\" -s \"ALLOW_MEMORY_GROWTH=1\" --post-js jssrc/post.js csrc/fallback.cc",
"emcc-debug": "miniquery -p \"targets.#.sources.#\" ./binding.gyp | grep -v \"csrc/addon.cc\" | xargs emcc --bind -o jssrc/ttf2woff2.js -s \"ALLOW_MEMORY_GROWTH=1\" -s \"ASSERTIONS=1\" --post-js jssrc/post.js csrc/fallback.cc",
"install": "(node-gyp rebuild > builderror.log) || (exit 0)"
},
"repository": {
Expand Down

0 comments on commit 24ec907

Please sign in to comment.