Skip to content

Commit

Permalink
Revert "DynamicPngStack now returns Buffer instead of binary string"
Browse files Browse the repository at this point in the history
This reverts commit 339c531.
  • Loading branch information
pkrumins committed Aug 18, 2010
1 parent 339c531 commit e0cc940
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/common.h
Expand Up @@ -2,7 +2,6 @@
#define COMMON_H #define COMMON_H


#include <node.h> #include <node.h>
#include <node_buffer.h>
#include <cstring> #include <cstring>


v8::Handle<v8::Value> ErrorException(const char *msg); v8::Handle<v8::Value> ErrorException(const char *msg);
Expand All @@ -28,7 +27,8 @@ typedef enum { BUF_RGB, BUF_BGR, BUF_RGBA, BUF_BGRA } buffer_type;
struct encode_request { struct encode_request {
v8::Persistent<v8::Function> callback; v8::Persistent<v8::Function> callback;
void *png_obj; void *png_obj;
node::Buffer *png_buf; char *png;
int png_len;
char *error; char *error;
}; };


Expand Down
30 changes: 18 additions & 12 deletions src/dynamic_png_stack.cpp
Expand Up @@ -106,13 +106,10 @@ DynamicPngStack::PngEncodeSync()
buffer_type pbt = (buf_type == BUF_BGR || buf_type == BUF_BGRA) ? BUF_BGRA : BUF_RGBA; buffer_type pbt = (buf_type == BUF_BGR || buf_type == BUF_BGRA) ? BUF_BGRA : BUF_RGBA;


try { try {
PngEncoder encoder(data, width, height, pbt); PngEncoder p(data, width, height, pbt);
encoder.encode(); p.encode();
free(data); free(data);
int png_len = encoder.get_png_len(); return scope.Close(Encode((char *)p.get_png(), p.get_png_len(), BINARY));
Buffer *retbuf = Buffer::New(png_len);
memcpy(retbuf->data(), encoder.get_png(), png_len);
return scope.Close(retbuf->handle_);
} }
catch (const char *err) { catch (const char *err) {
return VException(err); return VException(err);
Expand Down Expand Up @@ -248,12 +245,18 @@ DynamicPngStack::EIO_PngEncode(eio_req *req)
BUF_BGRA : BUF_RGBA; BUF_BGRA : BUF_RGBA;


try { try {
PngEncoder encoder(data, png->width, png->height, pbt); PngEncoder p(data, png->width, png->height, pbt);
encoder.encode(); p.encode();
free(data); free(data);
int png_len = encoder.get_png_len(); enc_req->png_len = p.get_png_len();
enc_req->png_buf = Buffer::New(png_len); enc_req->png = (char *)malloc(sizeof(*enc_req->png)*enc_req->png_len);
memcpy(enc_req->png_buf->data(), encoder.get_png(), png_len); if (!enc_req->png) {
enc_req->error = strdup("malloc in DynamicPngStack::EIO_PngEncode failed.");
return 0;
}
else {
memcpy(enc_req->png, p.get_png(), enc_req->png_len);
}
} }
catch (const char *err) { catch (const char *err) {
enc_req->error = strdup(err); enc_req->error = strdup(err);
Expand All @@ -279,7 +282,7 @@ DynamicPngStack::EIO_PngEncodeAfter(eio_req *req)
argv[2] = ErrorException(enc_req->error); argv[2] = ErrorException(enc_req->error);
} }
else { else {
argv[0] = enc_req->png_buf->handle_; argv[0] = Local<Value>::New(Encode(enc_req->png, enc_req->png_len, BINARY));
argv[1] = png->Dimensions(); argv[1] = png->Dimensions();
argv[2] = Undefined(); argv[2] = Undefined();
} }
Expand All @@ -292,6 +295,7 @@ DynamicPngStack::EIO_PngEncodeAfter(eio_req *req)
FatalException(try_catch); FatalException(try_catch);


enc_req->callback.Dispose(); enc_req->callback.Dispose();
free(enc_req->png);
free(enc_req->error); free(enc_req->error);


png->Unref(); png->Unref();
Expand Down Expand Up @@ -320,6 +324,8 @@ DynamicPngStack::PngEncodeAsync(const Arguments &args)


enc_req->callback = Persistent<Function>::New(callback); enc_req->callback = Persistent<Function>::New(callback);
enc_req->png_obj = png; enc_req->png_obj = png;
enc_req->png = NULL;
enc_req->png_len = 0;
enc_req->error = NULL; enc_req->error = NULL;


eio_custom(EIO_PngEncode, EIO_PRI_DEFAULT, EIO_PngEncodeAfter, enc_req); eio_custom(EIO_PngEncode, EIO_PRI_DEFAULT, EIO_PngEncodeAfter, enc_req);
Expand Down

0 comments on commit e0cc940

Please sign in to comment.