Enable libpng NEON optimization in Android build for armeabi-v7a with NEON target
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Tue, 28 Aug 2012 00:54:15 +0000 (04:54 +0400)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Wed, 29 Aug 2012 20:23:38 +0000 (00:23 +0400)
3rdparty/libpng/CMakeLists.txt
3rdparty/libpng/pngrutil.c

index 73ce1d8..70f73f1 100644 (file)
@@ -2,13 +2,23 @@
 #  CMake file for libpng. See root CMakeLists.txt
 #
 # ----------------------------------------------------------------------------
-project(${PNG_LIBRARY})
+
+if(NEON)
+  project(${PNG_LIBRARY} ASM)
+else()
+  project(${PNG_LIBRARY})
+endif()
 
 ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ${ZLIB_INCLUDE_DIR})
 
 file(GLOB lib_srcs *.c)
 file(GLOB lib_hdrs *.h)
 
+if(NEON)
+  list(APPEND lib_srcs arm/filter_neon.S)
+  add_definitions(-DPNG_ARM_NEON)
+endif()
+
 # ----------------------------------------------------------------------------------
 #         Define the library target:
 # ----------------------------------------------------------------------------------
index aa592cc..5c4dbc3 100644 (file)
@@ -3662,7 +3662,7 @@ png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
 
 #ifdef PNG_ARM_NEON
 
-#ifdef __linux__
+#if defined __linux__ && !defined __ANDROID__
 #include <stdio.h>
 #include <elf.h>
 #include <asm/hwcap.h>
@@ -3695,7 +3695,7 @@ static int png_have_hwcap(unsigned cap)
 static void
 png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
 {
-#ifdef __linux__
+#if defined __linux__ && !defined __ANDROID__
    if (!png_have_hwcap(HWCAP_NEON))
       return;
 #endif