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
diff --git a/Makefile b/Makefile
index a0027ee..afc62c9 100644
--- a/Makefile
+++ b/Makefile
@@ -61,7 +61,7 @@
SRC_LIST += src/ports/SkFontHost_mac.cpp
else
LINKER_OPTS += -lpng -lfreetype
- DEFINES += -DSK_BUILD_FOR_UNIX
+ DEFINES += -DSK_BUILD_FOR_UNIX -DSK_ENABLE_LIBPNG
# needed for freetype support
C_INCLUDES += -I/usr/include/freetype2
diff --git a/src/images/SkImageDecoder_Factory.cpp b/src/images/SkImageDecoder_Factory.cpp
index bd81d1f..e7c71e5 100644
--- a/src/images/SkImageDecoder_Factory.cpp
+++ b/src/images/SkImageDecoder_Factory.cpp
@@ -24,10 +24,15 @@
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 @@
}
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 3548fc8..267c066 100644
--- a/src/images/SkImageDecoder_libpng.cpp
+++ b/src/images/SkImageDecoder_libpng.cpp
@@ -845,7 +845,12 @@
#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 @@
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 d673167..0bb4d1a 100644
--- a/src/images/SkImageEncoder_Factory.cpp
+++ b/src/images/SkImageEncoder_Factory.cpp
@@ -21,15 +21,24 @@
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;
}