| 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 virtual Format getFormat() const { | 114 virtual Format getFormat() const { |
| 115 return kJPEG_Format; | 115 return kJPEG_Format; |
| 116 } | 116 } |
| 117 | 117 |
| 118 protected: | 118 protected: |
| 119 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK | 119 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
| 120 virtual bool onBuildTileIndex(SkStream *stream, int *width, int *height) SK_
OVERRIDE; | 120 virtual bool onBuildTileIndex(SkStream *stream, int *width, int *height) SK_
OVERRIDE; |
| 121 virtual bool onDecodeRegion(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRI
DE; | 121 virtual bool onDecodeRegion(SkBitmap* bitmap, const SkIRect& rect) SK_OVERRI
DE; |
| 122 #endif | 122 #endif |
| 123 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE; | 123 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE; |
| 124 virtual Format onGetFormat(SkStream*) const SK_OVERRIDE; |
| 124 | 125 |
| 125 private: | 126 private: |
| 126 SkJPEGImageIndex* fImageIndex; | 127 SkJPEGImageIndex* fImageIndex; |
| 127 int fImageWidth; | 128 int fImageWidth; |
| 128 int fImageHeight; | 129 int fImageHeight; |
| 129 | 130 |
| 130 typedef SkImageDecoder INHERITED; | 131 typedef SkImageDecoder INHERITED; |
| 131 }; | 132 }; |
| 132 | 133 |
| 133 ////////////////////////////////////////////////////////////////////////// | 134 ////////////////////////////////////////////////////////////////////////// |
| (...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 srcRow = (const void*)((const char*)srcRow + bm.rowBytes()); | 987 srcRow = (const void*)((const char*)srcRow + bm.rowBytes()); |
| 987 } | 988 } |
| 988 | 989 |
| 989 jpeg_finish_compress(&cinfo); | 990 jpeg_finish_compress(&cinfo); |
| 990 jpeg_destroy_compress(&cinfo); | 991 jpeg_destroy_compress(&cinfo); |
| 991 | 992 |
| 992 return true; | 993 return true; |
| 993 } | 994 } |
| 994 }; | 995 }; |
| 995 | 996 |
| 996 /////////////////////////////////////////////////////////////////////////////// | 997 static bool is_jpeg(SkStream* stream) { |
| 997 DEFINE_DECODER_CREATOR(JPEGImageDecoder); | |
| 998 DEFINE_ENCODER_CREATOR(JPEGImageEncoder); | |
| 999 /////////////////////////////////////////////////////////////////////////////// | |
| 1000 | |
| 1001 #include "SkTRegistry.h" | |
| 1002 | |
| 1003 static SkImageDecoder* sk_libjpeg_dfactory(SkStream* stream) { | |
| 1004 static const unsigned char gHeader[] = { 0xFF, 0xD8, 0xFF }; | 998 static const unsigned char gHeader[] = { 0xFF, 0xD8, 0xFF }; |
| 1005 static const size_t HEADER_SIZE = sizeof(gHeader); | 999 static const size_t HEADER_SIZE = sizeof(gHeader); |
| 1006 | 1000 |
| 1007 char buffer[HEADER_SIZE]; | 1001 char buffer[HEADER_SIZE]; |
| 1008 size_t len = stream->read(buffer, HEADER_SIZE); | 1002 size_t len = stream->read(buffer, HEADER_SIZE); |
| 1009 | 1003 |
| 1010 if (len != HEADER_SIZE) { | 1004 if (len != HEADER_SIZE) { |
| 1011 return NULL; // can't read enough | 1005 return false; // can't read enough |
| 1012 } | 1006 } |
| 1013 if (memcmp(buffer, gHeader, HEADER_SIZE)) { | 1007 if (memcmp(buffer, gHeader, HEADER_SIZE)) { |
| 1014 return NULL; | 1008 return false; |
| 1015 } | 1009 } |
| 1016 return SkNEW(SkJPEGImageDecoder); | 1010 return true; |
| 1011 } |
| 1012 |
| 1013 SkImageDecoder::Format SkJPEGImageDecoder::onGetFormat(SkStream* stream) const { |
| 1014 if (is_jpeg(stream)) { |
| 1015 return kJPEG_Format; |
| 1016 } |
| 1017 return kUnknown_Format; |
| 1018 } |
| 1019 |
| 1020 /////////////////////////////////////////////////////////////////////////////// |
| 1021 DEFINE_DECODER_CREATOR(JPEGImageDecoder); |
| 1022 DEFINE_ENCODER_CREATOR(JPEGImageEncoder); |
| 1023 /////////////////////////////////////////////////////////////////////////////// |
| 1024 |
| 1025 #include "SkTRegistry.h" |
| 1026 |
| 1027 static SkImageDecoder* sk_libjpeg_dfactory(SkStream* stream) { |
| 1028 if (is_jpeg(stream)) { |
| 1029 return SkNEW(SkJPEGImageDecoder); |
| 1030 } |
| 1031 return NULL; |
| 1017 } | 1032 } |
| 1018 | 1033 |
| 1019 static SkImageEncoder* sk_libjpeg_efactory(SkImageEncoder::Type t) { | 1034 static SkImageEncoder* sk_libjpeg_efactory(SkImageEncoder::Type t) { |
| 1020 return (SkImageEncoder::kJPEG_Type == t) ? SkNEW(SkJPEGImageEncoder) : NULL; | 1035 return (SkImageEncoder::kJPEG_Type == t) ? SkNEW(SkJPEGImageEncoder) : NULL; |
| 1021 } | 1036 } |
| 1022 | 1037 |
| 1023 | 1038 |
| 1024 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libjpeg_dfactory); | 1039 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libjpeg_dfactory); |
| 1025 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libjpeg_efact
ory); | 1040 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libjpeg_efact
ory); |
| OLD | NEW |