| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2007 The Android Open Source Project | 3 * Copyright 2007 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkImageDecoder.h" | 10 #include "SkImageDecoder.h" |
| (...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 } | 910 } |
| 911 } | 911 } |
| 912 | 912 |
| 913 class SkJPEGImageEncoder : public SkImageEncoder { | 913 class SkJPEGImageEncoder : public SkImageEncoder { |
| 914 protected: | 914 protected: |
| 915 virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) { | 915 virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) { |
| 916 #ifdef TIME_ENCODE | 916 #ifdef TIME_ENCODE |
| 917 SkAutoTime atm("JPEG Encode"); | 917 SkAutoTime atm("JPEG Encode"); |
| 918 #endif | 918 #endif |
| 919 | 919 |
| 920 const WriteScanline writer = ChooseWriter(bm); | |
| 921 if (NULL == writer) { | |
| 922 return false; | |
| 923 } | |
| 924 | |
| 925 SkAutoLockPixels alp(bm); | 920 SkAutoLockPixels alp(bm); |
| 926 if (NULL == bm.getPixels()) { | 921 if (NULL == bm.getPixels()) { |
| 927 return false; | 922 return false; |
| 928 } | 923 } |
| 929 | 924 |
| 930 jpeg_compress_struct cinfo; | 925 jpeg_compress_struct cinfo; |
| 931 skjpeg_error_mgr sk_err; | 926 skjpeg_error_mgr sk_err; |
| 932 skjpeg_destination_mgr sk_wstream(stream); | 927 skjpeg_destination_mgr sk_wstream(stream); |
| 933 | 928 |
| 934 // allocate these before set call setjmp | 929 // allocate these before set call setjmp |
| 935 SkAutoMalloc oneRow; | 930 SkAutoMalloc oneRow; |
| 936 SkAutoLockColors ctLocker; | 931 SkAutoLockColors ctLocker; |
| 937 | 932 |
| 938 cinfo.err = jpeg_std_error(&sk_err); | 933 cinfo.err = jpeg_std_error(&sk_err); |
| 939 sk_err.error_exit = skjpeg_error_exit; | 934 sk_err.error_exit = skjpeg_error_exit; |
| 940 if (setjmp(sk_err.fJmpBuf)) { | 935 if (setjmp(sk_err.fJmpBuf)) { |
| 941 return false; | 936 return false; |
| 942 } | 937 } |
| 938 |
| 939 // Keep after setjmp or mark volatile. |
| 940 const WriteScanline writer = ChooseWriter(bm); |
| 941 if (NULL == writer) { |
| 942 return false; |
| 943 } |
| 944 |
| 943 jpeg_create_compress(&cinfo); | 945 jpeg_create_compress(&cinfo); |
| 944 | |
| 945 cinfo.dest = &sk_wstream; | 946 cinfo.dest = &sk_wstream; |
| 946 cinfo.image_width = bm.width(); | 947 cinfo.image_width = bm.width(); |
| 947 cinfo.image_height = bm.height(); | 948 cinfo.image_height = bm.height(); |
| 948 cinfo.input_components = 3; | 949 cinfo.input_components = 3; |
| 949 #ifdef WE_CONVERT_TO_YUV | 950 #ifdef WE_CONVERT_TO_YUV |
| 950 cinfo.in_color_space = JCS_YCbCr; | 951 cinfo.in_color_space = JCS_YCbCr; |
| 951 #else | 952 #else |
| 952 cinfo.in_color_space = JCS_RGB; | 953 cinfo.in_color_space = JCS_RGB; |
| 953 #endif | 954 #endif |
| 954 cinfo.input_gamma = 1; | 955 cinfo.input_gamma = 1; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 } | 1022 } |
| 1022 | 1023 |
| 1023 static SkImageEncoder* sk_libjpeg_efactory(SkImageEncoder::Type t) { | 1024 static SkImageEncoder* sk_libjpeg_efactory(SkImageEncoder::Type t) { |
| 1024 return (SkImageEncoder::kJPEG_Type == t) ? SkNEW(SkJPEGImageEncoder) : NULL; | 1025 return (SkImageEncoder::kJPEG_Type == t) ? SkNEW(SkJPEGImageEncoder) : NULL; |
| 1025 } | 1026 } |
| 1026 | 1027 |
| 1027 | 1028 |
| 1028 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libjpeg_dfactory); | 1029 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libjpeg_dfactory); |
| 1029 static SkTRegistry<SkImageDecoder::Format, SkStream*> gFormatReg(get_format_jpeg
); | 1030 static SkTRegistry<SkImageDecoder::Format, SkStream*> gFormatReg(get_format_jpeg
); |
| 1030 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libjpeg_efact
ory); | 1031 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libjpeg_efact
ory); |
| OLD | NEW |