aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2010-04-15 14:24:50 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2010-04-15 14:24:50 +0000
commitdfee579a8de6462399f1b1867f924856c11bc4a1 (patch)
tree705f794f98664cb159f8e06521e8cf61b3849c89 /src
parent887e4f325c2b9b306116a4eea37c5afad1db3346 (diff)
add SK_ENABLE_LIBPNG to force reference to PNG codec
git-svn-id: http://skia.googlecode.com/svn/trunk@550 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r--src/images/SkImageDecoder_Factory.cpp14
-rw-r--r--src/images/SkImageDecoder_libpng.cpp13
-rw-r--r--src/images/SkImageEncoder_Factory.cpp13
3 files changed, 33 insertions, 7 deletions
diff --git a/src/images/SkImageDecoder_Factory.cpp b/src/images/SkImageDecoder_Factory.cpp
index bd81d1fc1d..e7c71e52c9 100644
--- a/src/images/SkImageDecoder_Factory.cpp
+++ b/src/images/SkImageDecoder_Factory.cpp
@@ -24,10 +24,15 @@ typedef SkTRegistry<SkImageDecoder*, SkStream*> DecodeReg;
template DecodeReg* DecodeReg::gHead;
+#ifdef SK_ENABLE_LIBPNG
+ extern SkImageDecoder* sk_libpng_dfactory(SkStream*);
+#endif
+
SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) {
+ SkImageDecoder* codec = NULL;
const DecodeReg* curr = DecodeReg::Head();
while (curr) {
- SkImageDecoder* codec = curr->factory()(stream);
+ codec = curr->factory()(stream);
// we rewind here, because we promise later when we call "decode", that
// the stream will be at its beginning.
stream->rewind();
@@ -36,6 +41,13 @@ SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) {
}
curr = curr->next();
}
+#ifdef SK_ENABLE_LIBPNG
+ codec = sk_libpng_dfactory(stream);
+ stream->rewind();
+ if (codec) {
+ return codec;
+ }
+#endif
return NULL;
}
diff --git a/src/images/SkImageDecoder_libpng.cpp b/src/images/SkImageDecoder_libpng.cpp
index 3548fc8393..267c066a65 100644
--- a/src/images/SkImageDecoder_libpng.cpp
+++ b/src/images/SkImageDecoder_libpng.cpp
@@ -845,7 +845,12 @@ bool SkPNGImageEncoder::onEncode(SkWStream* stream, const SkBitmap& bitmap,
#include "SkTRegistry.h"
-static SkImageDecoder* DFactory(SkStream* stream) {
+#ifdef SK_ENABLE_LIBPNG
+ SkImageDecoder* sk_libpng_dfactory(SkStream*);
+ SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type);
+#endif
+
+SkImageDecoder* sk_libpng_dfactory(SkStream* stream) {
char buf[PNG_BYTES_TO_CHECK];
if (stream->read(buf, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK &&
!png_sig_cmp((png_bytep) buf, (png_size_t)0, PNG_BYTES_TO_CHECK)) {
@@ -854,9 +859,9 @@ static SkImageDecoder* DFactory(SkStream* stream) {
return NULL;
}
-static SkImageEncoder* EFactory(SkImageEncoder::Type t) {
+SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) {
return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL;
}
-static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(EFactory);
-static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(DFactory);
+static SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> gEReg(sk_libpng_efactory);
+static SkTRegistry<SkImageDecoder*, SkStream*> gDReg(sk_libpng_dfactory);
diff --git a/src/images/SkImageEncoder_Factory.cpp b/src/images/SkImageEncoder_Factory.cpp
index d673167523..0bb4d1aed9 100644
--- a/src/images/SkImageEncoder_Factory.cpp
+++ b/src/images/SkImageEncoder_Factory.cpp
@@ -21,15 +21,24 @@ typedef SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> EncodeReg;
template EncodeReg* EncodeReg::gHead;
+#ifdef SK_ENABLE_LIBPNG
+ extern SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type);
+#endif
+
SkImageEncoder* SkImageEncoder::Create(Type t) {
+ SkImageEncoder* codec = NULL;
const EncodeReg* curr = EncodeReg::Head();
while (curr) {
- SkImageEncoder* codec = curr->factory()(t);
- if (codec) {
+ if ((codec = curr->factory()(t)) != NULL) {
return codec;
}
curr = curr->next();
}
+#ifdef SK_ENABLE_LIBPNG
+ if ((codec = sk_libpng_efactory(t)) != NULL) {
+ return codec;
+ }
+#endif
return NULL;
}