Merge "Merge "Mark EUICC_PROVISIONED as @SystemApi." am: 4b5680b6fa am: 41fa5ff101 am: a64db1336d -s ours"
diff --git a/core/jni/android/graphics/YuvToJpegEncoder.cpp b/core/jni/android/graphics/YuvToJpegEncoder.cpp
index 5eecd9c..09adc82 100644
--- a/core/jni/android/graphics/YuvToJpegEncoder.cpp
+++ b/core/jni/android/graphics/YuvToJpegEncoder.cpp
@@ -23,16 +23,28 @@
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);
@@ -47,6 +59,8 @@
jpeg_finish_compress(&cinfo);
+ jpeg_destroy_compress(&cinfo);
+
return true;
}