Loading core/jni/android/graphics/YuvToJpegEncoder.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -23,16 +23,28 @@ YuvToJpegEncoder* YuvToJpegEncoder::create(int format, int* strides) { YuvToJpegEncoder::YuvToJpegEncoder(int* strides) : fStrides(strides) { } struct ErrorMgr { struct jpeg_error_mgr pub; jmp_buf jmp; }; void error_exit(j_common_ptr cinfo) { ErrorMgr* err = (ErrorMgr*) cinfo->err; (*cinfo->err->output_message) (cinfo); longjmp(err->jmp, 1); } bool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv, int width, int height, int* offsets, int jpegQuality) { jpeg_compress_struct cinfo; jpeg_error_mgr err; ErrorMgr err; skjpeg_destination_mgr sk_wstream(stream); cinfo.err = jpeg_std_error(&err); err.error_exit = skjpeg_error_exit; jmp_buf jmp; if (setjmp(jmp)) { cinfo.err = jpeg_std_error(&err.pub); err.pub.error_exit = error_exit; if (setjmp(err.jmp)) { jpeg_destroy_compress(&cinfo); return false; } jpeg_create_compress(&cinfo); Loading @@ -47,6 +59,8 @@ bool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv, int width, jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); return true; } Loading Loading
core/jni/android/graphics/YuvToJpegEncoder.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -23,16 +23,28 @@ YuvToJpegEncoder* YuvToJpegEncoder::create(int format, int* strides) { YuvToJpegEncoder::YuvToJpegEncoder(int* strides) : fStrides(strides) { } struct ErrorMgr { struct jpeg_error_mgr pub; jmp_buf jmp; }; void error_exit(j_common_ptr cinfo) { ErrorMgr* err = (ErrorMgr*) cinfo->err; (*cinfo->err->output_message) (cinfo); longjmp(err->jmp, 1); } bool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv, int width, int height, int* offsets, int jpegQuality) { jpeg_compress_struct cinfo; jpeg_error_mgr err; ErrorMgr err; skjpeg_destination_mgr sk_wstream(stream); cinfo.err = jpeg_std_error(&err); err.error_exit = skjpeg_error_exit; jmp_buf jmp; if (setjmp(jmp)) { cinfo.err = jpeg_std_error(&err.pub); err.pub.error_exit = error_exit; if (setjmp(err.jmp)) { jpeg_destroy_compress(&cinfo); return false; } jpeg_create_compress(&cinfo); Loading @@ -47,6 +59,8 @@ bool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv, int width, jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); return true; } Loading