aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar msarett <msarett@google.com>2016-02-16 13:16:39 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-16 13:16:40 -0800
commit4691d99d7ede02c86c09312b0da56a4460f69940 (patch)
tree5458400107a13f3480f5364e9b406991acefea9b
parented828001da75f4a3a5d31d9f1c1935e3595ce920 (diff)
Add SkCodec to the CMake build
BUG=skia:4956 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1705503002 CQ_EXTRA_TRYBOTS=client.skia.compile:Build-Ubuntu-GCC-x86_64-Release-CMake-Trybot Review URL: https://codereview.chromium.org/1705503002
-rw-r--r--cmake/CMakeLists.txt13
-rw-r--r--cmake/README.md4
-rw-r--r--src/codec/SkGifCodec.cpp23
-rw-r--r--src/codec/SkPngCodec.cpp2
4 files changed, 33 insertions, 9 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 58c04db8d9..751361a927 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -113,7 +113,6 @@ if (WIN32)
endif()
remove_srcs(../src/gpu/gl/angle/*) # TODO
-remove_srcs(../src/codec/* ../src/android/*) # TODO: Requires Chromium's libjpeg-turbo, and incompatible giflib.
# Certain files must be compiled with support for SSSE3, SSE4.1, AVX, or AVX2 intrinsics.
file (GLOB_RECURSE ssse3_srcs ../src/*ssse3*.cpp ../src/*SSSE3*.cpp)
@@ -146,6 +145,16 @@ if (UNIX AND NOT APPLE)
find_package (PNG)
endif()
+# Decide whether to turn on SkCodec.
+# TODO (skbug.com/4956): We should be able to turn specific codecs on and off rather than
+# disabling all of them if one library is missing.
+if (NOT (GIF_FOUND AND JPEG_FOUND AND PNG_FOUND AND WEBP_INCLUDE_DIRS AND WEBP_LIBRARIES))
+ remove_srcs(../src/codec/* ../src/android/*)
+endif()
+
+# Do not compile SkRawCodec.
+remove_srcs(../src/codec/*Raw*.cpp)
+
# TODO: macro away this if (found) ... else() ... endif() stuff.
if (EXPAT_FOUND)
@@ -179,6 +188,8 @@ endif()
if (PNG_FOUND)
list (APPEND private_includes ${PNG_INCLUDE_DIRS})
list (APPEND libs ${PNG_LIBRARIES})
+ add_definitions(-DPNG_SKIP_SETJMP_CHECK)
+ add_definitions(-DPNG_SKIP_SKIA_OPTS)
else()
remove_srcs(../src/images/*png*)
endif()
diff --git a/cmake/README.md b/cmake/README.md
index 9fd84a7b1c..0cbd2b369e 100644
--- a/cmake/README.md
+++ b/cmake/README.md
@@ -21,7 +21,3 @@ Currently supported platforms
Currently maybe-kinda-working platforms
---------------------------------------
- x86-64 Mac OS X, Ubuntu 15.04
-
-Caveats
--------
- - SkCodec, Skia's new image decoder library, does not yet build.
diff --git a/src/codec/SkGifCodec.cpp b/src/codec/SkGifCodec.cpp
index 785c17e0f1..699554706b 100644
--- a/src/codec/SkGifCodec.cpp
+++ b/src/codec/SkGifCodec.cpp
@@ -49,7 +49,11 @@ static int32_t read_bytes_callback(GifFileType* fileType, GifByteType* out, int3
* Open the gif file
*/
static GifFileType* open_gif(SkStream* stream) {
+#if GIFLIB_MAJOR < 5
+ return DGifOpen(stream, read_bytes_callback);
+#else
return DGifOpen(stream, read_bytes_callback, nullptr);
+#endif
}
/*
@@ -117,7 +121,11 @@ inline uint32_t get_output_row_interlaced(uint32_t encodedRow, uint32_t height)
* It is used in a SkAutoTCallIProc template
*/
void SkGifCodec::CloseGif(GifFileType* gif) {
- DGifCloseFile(gif, NULL);
+#if GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)
+ DGifCloseFile(gif);
+#else
+ DGifCloseFile(gif, nullptr);
+#endif
}
/*
@@ -126,7 +134,11 @@ void SkGifCodec::CloseGif(GifFileType* gif) {
*/
void SkGifCodec::FreeExtension(SavedImage* image) {
if (NULL != image->ExtensionBlocks) {
+#if GIFLIB_MAJOR < 5
+ FreeExtension(image);
+#else
GifFreeExtensions(&image->ExtensionBlockCount, &image->ExtensionBlocks);
+#endif
}
}
@@ -311,10 +323,15 @@ SkCodec::Result SkGifCodec::ReadUpToFirstImage(GifFileType* gif, uint32_t* trans
// Create an extension block with our data
while (nullptr != extData) {
// Add a single block
+
+#if GIFLIB_MAJOR < 5
+ if (AddExtensionBlock(&saveExt, extData[0],
+ &extData[1]) == GIF_ERROR) {
+#else
if (GIF_ERROR == GifAddExtensionBlock(&saveExt.ExtensionBlockCount,
&saveExt.ExtensionBlocks,
- extFunction, extData[0], &extData[1]))
- {
+ extFunction, extData[0], &extData[1])) {
+#endif
return gif_error("Could not add extension block.\n", kIncompleteInput);
}
// Move to the next block
diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp
index 54a82c4b27..974befc86d 100644
--- a/src/codec/SkPngCodec.cpp
+++ b/src/codec/SkPngCodec.cpp
@@ -19,7 +19,7 @@
#include "SkTemplates.h"
// png_struct::read_filter[] was added in libpng 1.5.7.
-#if defined(__SSE2__) && PNG_LIBPNG_VER >= 10507
+#if defined(__SSE2__) && PNG_LIBPNG_VER >= 10507 && !defined(PNG_SKIP_SKIA_OPTS)
#include "pngstruct.h"
extern "C" void sk_png_init_filter_functions_sse2(png_structp png, unsigned int bpp) {