Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: src/images/SkImageDecoder_libpng.cpp

Issue 14363003: Updates to skimage tool to use it for testing. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Implement onGetFormat for other decoders. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 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 29 matching lines...) Expand all
40 }; 40 };
41 41
42 class SkPNGImageDecoder : public SkImageDecoder { 42 class SkPNGImageDecoder : public SkImageDecoder {
43 public: 43 public:
44 SkPNGImageDecoder() { 44 SkPNGImageDecoder() {
45 fImageIndex = NULL; 45 fImageIndex = NULL;
46 } 46 }
47 virtual Format getFormat() const SK_OVERRIDE { 47 virtual Format getFormat() const SK_OVERRIDE {
48 return kPNG_Format; 48 return kPNG_Format;
49 } 49 }
50
51 virtual Format onGetFormat(SkStream*) const SK_OVERRIDE;
52
50 virtual ~SkPNGImageDecoder() { 53 virtual ~SkPNGImageDecoder() {
51 SkDELETE(fImageIndex); 54 SkDELETE(fImageIndex);
52 } 55 }
53 56
54 protected: 57 protected:
55 #ifdef SK_BUILD_FOR_ANDROID 58 #ifdef SK_BUILD_FOR_ANDROID
56 virtual bool onBuildTileIndex(SkStream *stream, int *width, int *height) SK_ OVERRIDE; 59 virtual bool onBuildTileIndex(SkStream *stream, int *width, int *height) SK_ OVERRIDE;
57 virtual bool onDecodeRegion(SkBitmap* bitmap, const SkIRect& region) SK_OVER RIDE; 60 virtual bool onDecodeRegion(SkBitmap* bitmap, const SkIRect& region) SK_OVER RIDE;
58 #endif 61 #endif
59 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE; 62 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode) SK_OVERRIDE;
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 srcImage += bitmap.rowBytes(); 1075 srcImage += bitmap.rowBytes();
1073 } 1076 }
1074 1077
1075 png_write_end(png_ptr, info_ptr); 1078 png_write_end(png_ptr, info_ptr);
1076 1079
1077 /* clean up after the write, and free any memory allocated */ 1080 /* clean up after the write, and free any memory allocated */
1078 png_destroy_write_struct(&png_ptr, &info_ptr); 1081 png_destroy_write_struct(&png_ptr, &info_ptr);
1079 return true; 1082 return true;
1080 } 1083 }
1081 1084
1085 static bool is_png(SkStream* stream) {
1086 char buf[PNG_BYTES_TO_CHECK];
1087 if (stream->read(buf, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK &&
1088 !png_sig_cmp((png_bytep) buf, (png_size_t)0, PNG_BYTES_TO_CHECK)) {
1089 return true;
1090 }
1091 return false;
1092 }
1093
1094 SkImageDecoder::Format SkPNGImageDecoder::onGetFormat(SkStream* stream) const {
1095 if (is_png(stream)) {
1096 return kPNG_Format;
1097 }
1098 return kUnknown_Format;
1099 }
1100
1082 /////////////////////////////////////////////////////////////////////////////// 1101 ///////////////////////////////////////////////////////////////////////////////
1083 DEFINE_DECODER_CREATOR(PNGImageDecoder); 1102 DEFINE_DECODER_CREATOR(PNGImageDecoder);
1084 DEFINE_ENCODER_CREATOR(PNGImageEncoder); 1103 DEFINE_ENCODER_CREATOR(PNGImageEncoder);
1085 /////////////////////////////////////////////////////////////////////////////// 1104 ///////////////////////////////////////////////////////////////////////////////
1086 1105
1087 #include "SkTRegistry.h" 1106 #include "SkTRegistry.h"
1088 1107
1089 SkImageDecoder* sk_libpng_dfactory(SkStream* stream) { 1108 SkImageDecoder* sk_libpng_dfactory(SkStream* stream) {
1090 char buf[PNG_BYTES_TO_CHECK]; 1109 if (is_png(stream)) {
1091 if (stream->read(buf, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK &&
1092 !png_sig_cmp((png_bytep) buf, (png_size_t)0, PNG_BYTES_TO_CHECK)) {
1093 return SkNEW(SkPNGImageDecoder); 1110 return SkNEW(SkPNGImageDecoder);
1094 } 1111 }
1095 return NULL; 1112 return NULL;
1096 } 1113 }
1097 1114
1098 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) { 1115 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) {
1099 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL; 1116 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL;
1100 } 1117 }
1101 1118
1102 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libpng_efacto ry); 1119 static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libpng_efacto ry);
1103 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libpng_dfactory); 1120 static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libpng_dfactory);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698