WebP android

  1. Download NDK, put it in system PATH.
  2. download libwebp-0.1.3.tar.gz, and untar it  then place the content into your_project_dir/jni
  3. Replace Android.mk with the one below.  
  4. Create jni/src/libwebp_java_wrap.c with content from below.
  5. create jni/Application.mk, with content from below.
  6. run ndk-build from project directory. This generates .so files in /libs/. You can inspect them with nm -D libs/armeabi/libwebp.so. In the list you'll see both the native library functions (likeWebPDecodeRGB) and their JNI counterparts (likeJava_com_google_webp_libwebpJNI_WebPDecodeRGB)
  7. Add /jni/swig/libwebp.jar to build path of your Android project
  8. See below for example how to use it in Java code

Here's content for Android.mk. Changed from original: removed encoder bits as I don't need these, added libwebp_java_wrap.c, changed include $(BUILD_STATIC_LIBRARY) to include $(BUILD_SHARED_LIBRARY).
      include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
    src/dec/alpha.c \
    src/dec/frame.c \
    src/dec/idec.c \
    src/dec/layer.c \
    src/dec/quant.c \
    src/dec/tree.c \
    src/dec/vp8.c \
    src/dec/webp.c \
    src/dec/io.c \
    src/dec/buffer.c \
    src/dsp/yuv.c \
    src/dsp/upsampling.c \
    src/dsp/cpu.c \
    src/dsp/dec.c \
    src/dsp/dec_neon.c \
    src/dsp/enc.c \
    src/utils/bit_reader.c \
    src/utils/bit_writer.c \
    src/utils/thread.c \
    src/libwebp_java_wrap.c \

LOCAL_CFLAGS := -Wall -DANDROID -DHAVE_MALLOC_H -DHAVE_PTHREAD -DWEBP_USE_THREAD \
                -finline-functions -frename-registers -ffast-math \
                -s -fomit-frame-pointer -Isrc/webp

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_MODULE:= webp

include $(BUILD_SHARED_LIBRARY)


Content for libwebp_java_wrap.c is here, it's basically the same as bundled in libwebp tarball, except encoder bits removed.

     
  1. /* ----------------------------------------------------------------------------
  2.  * This file was automatically generated by SWIG (http://www.swig.org).
  3.  * Version 1.3.40
  4.  *
  5.  * This file is not intended to be easily readable and contains a number of
  6.  * coding conventions designed to improve portability and efficiency. Do not make
  7.  * changes to this file unless you know what you are doing--modify the SWIG
  8.  * interface file instead.
  9.  * ----------------------------------------------------------------------------- */
  10.  
  11. #define SWIGJAVA
  12.  
  13. /* -----------------------------------------------------------------------------
  14.  *  This section contains generic SWIG labels for method/variable
  15.  *  declarations/attributes, and other compiler dependent labels.
  16.  * ----------------------------------------------------------------------------- */
  17.  
  18. /* template workaround for compilers that cannot correctly implement the C++ standard */
  19. #ifndef SWIGTEMPLATEDISAMBIGUATOR
  20. # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
  21. #  define SWIGTEMPLATEDISAMBIGUATOR template
  22. # elif defined(__HP_aCC)
  23. /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
  24. /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
  25. #  define SWIGTEMPLATEDISAMBIGUATOR template
  26. # else
  27. #  define SWIGTEMPLATEDISAMBIGUATOR
  28. # endif
  29. #endif
  30.  
  31. /* inline attribute */
  32. #ifndef SWIGINLINE
  33. # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
  34. #   define SWIGINLINE inline
  35. # else
  36. #   define SWIGINLINE
  37. # endif
  38. #endif
  39.  
  40. /* attribute recognised by some compilers to avoid 'unused' warnings */
  41. #ifndef SWIGUNUSED
  42. # if defined(__GNUC__)
  43. #   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
  44. #     define SWIGUNUSED __attribute__ ((__unused__))
  45. #   else
  46. #     define SWIGUNUSED
  47. #   endif
  48. # elif defined(__ICC)
  49. #   define SWIGUNUSED __attribute__ ((__unused__))
  50. # else
  51. #   define SWIGUNUSED
  52. # endif
  53. #endif
  54.  
  55. #ifndef SWIG_MSC_UNSUPPRESS_4505
  56. # if defined(_MSC_VER)
  57. #   pragma warning(disable : 4505) /* unreferenced local function has been removed */
  58. # endif
  59. #endif
  60.  
  61. #ifndef SWIGUNUSEDPARM
  62. # ifdef __cplusplus
  63. #   define SWIGUNUSEDPARM(p)
  64. # else
  65. #   define SWIGUNUSEDPARM(p) p SWIGUNUSED
  66. # endif
  67. #endif
  68.  
  69. /* internal SWIG method */
  70. #ifndef SWIGINTERN
  71. # define SWIGINTERN static SWIGUNUSED
  72. #endif
  73.  
  74. /* internal inline SWIG method */
  75. #ifndef SWIGINTERNINLINE
  76. # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
  77. #endif
  78.  
  79. /* exporting methods */
  80. #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
  81. #  ifndef GCC_HASCLASSVISIBILITY
  82. #    define GCC_HASCLASSVISIBILITY
  83. #  endif
  84. #endif
  85.  
  86. #ifndef SWIGEXPORT
  87. # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
  88. #   if defined(STATIC_LINKED)
  89. #     define SWIGEXPORT
  90. #   else
  91. #     define SWIGEXPORT __declspec(dllexport)
  92. #   endif
  93. # else
  94. #   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
  95. #     define SWIGEXPORT __attribute__ ((visibility("default")))
  96. #   else
  97. #     define SWIGEXPORT
  98. #   endif
  99. # endif
  100. #endif
  101.  
  102. /* calling conventions for Windows */
  103. #ifndef SWIGSTDCALL
  104. # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
  105. #   define SWIGSTDCALL __stdcall
  106. # else
  107. #   define SWIGSTDCALL
  108. # endif
  109. #endif
  110.  
  111. /* Deal with Microsoft's attempt at deprecating C standard runtime functions */
  112. #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
  113. # define _CRT_SECURE_NO_DEPRECATE
  114. #endif
  115.  
  116. /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
  117. #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
  118. # define _SCL_SECURE_NO_DEPRECATE
  119. #endif
  120.  
  121.  
  122.  
  123. /* Fix for jlong on some versions of gcc on Windows */
  124. #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
  125.    typedef  long  long __int64 ;
  126. #endif
  127.  
  128. /* Fix for jlong on 64-bit x86 Solaris */
  129. #if defined(__x86_64)
  130. # ifdef _LP64
  131. #   undef _LP64
  132. # endif
  133. #endif
  134.  
  135. #include <jni.h>
  136. #include <stdlib.h>
  137. #include <string.h>
  138.  
  139.  
  140. /* Support for throwing Java exceptions */
  141. typedef  enum  {
  142.   SWIG_JavaOutOfMemoryError  =  1 ,
  143.   SWIG_JavaIOException ,
  144.   SWIG_JavaRuntimeException ,
  145.   SWIG_JavaIndexOutOfBoundsException ,
  146.   SWIG_JavaArithmeticException ,
  147.   SWIG_JavaIllegalArgumentException ,
  148.   SWIG_JavaNullPointerException ,
  149.   SWIG_JavaDirectorPureVirtual ,
  150.   SWIG_JavaUnknownError
  151. } SWIG_JavaExceptionCodes ;
  152.  
  153. typedef  struct  {
  154.   SWIG_JavaExceptionCodes code ;
  155.    const  char  *java_exception ;
  156. } SWIG_JavaExceptions_t ;
  157.  
  158.  
  159. static  void SWIGUNUSED SWIG_JavaThrowException (JNIEnv  *jenv , SWIG_JavaExceptionCodes code ,  const  char  *msg )  {
  160.   jclass excep ;
  161.    static  const SWIG_JavaExceptions_t java_exceptions [ ]  =  {
  162.      { SWIG_JavaOutOfMemoryError ,  "java/lang/OutOfMemoryError"  } ,
  163.      { SWIG_JavaIOException ,  "java/io/IOException"  } ,
  164.      { SWIG_JavaRuntimeException ,  "java/lang/RuntimeException"  } ,
  165.      { SWIG_JavaIndexOutOfBoundsException ,  "java/lang/IndexOutOfBoundsException"  } ,
  166.      { SWIG_JavaArithmeticException ,  "java/lang/ArithmeticException"  } ,
  167.      { SWIG_JavaIllegalArgumentException ,  "java/lang/IllegalArgumentException"  } ,
  168.      { SWIG_JavaNullPointerException ,  "java/lang/NullPointerException"  } ,
  169.      { SWIG_JavaDirectorPureVirtual ,  "java/lang/RuntimeException"  } ,
  170.      { SWIG_JavaUnknownError ,   "java/lang/UnknownError"  } ,
  171.      {  (SWIG_JavaExceptionCodes ) 0 ,   "java/lang/UnknownError"  }
  172.    } ;
  173.    const SWIG_JavaExceptions_t  *except_ptr  = java_exceptions ;
  174.  
  175.    while  (except_ptr ->code  != code  && except_ptr ->code )
  176.     except_ptr ++;
  177.  
  178.    ( *jenv ) ->ExceptionClear (jenv ) ;
  179.   excep  =  ( *jenv ) ->FindClass (jenv , except_ptr ->java_exception ) ;
  180.    if  (excep )
  181.      ( *jenv ) ->ThrowNew (jenv , excep , msg ) ;
  182. }
  183.  
  184.  
  185. /* Contract support */
  186.  
  187. #define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else
  188.  
  189. /*  Errors in SWIG */
  190. #define  SWIG_UnknownError         -1
  191. #define  SWIG_IOError              -2
  192. #define  SWIG_RuntimeError         -3
  193. #define  SWIG_IndexError           -4
  194. #define  SWIG_TypeError            -5
  195. #define  SWIG_DivisionByZero       -6
  196. #define  SWIG_OverflowError        -7
  197. #define  SWIG_SyntaxError          -8
  198. #define  SWIG_ValueError           -9
  199. #define  SWIG_SystemError          -10
  200. #define  SWIG_AttributeError       -11
  201. #define  SWIG_MemoryError          -12
  202. #define  SWIG_NullReferenceError   -13
  203.  
  204.  
  205.  
  206.  
  207. SWIGINTERN  void SWIG_JavaException (JNIEnv  *jenv ,  int code ,  const  char  *msg )  {
  208.   SWIG_JavaExceptionCodes exception_code  = SWIG_JavaUnknownError ;
  209.    switch (code )  {
  210.    case SWIG_MemoryError :
  211.     exception_code  = SWIG_JavaOutOfMemoryError ;
  212.      break ;
  213.    case SWIG_IOError :
  214.     exception_code  = SWIG_JavaIOException ;
  215.      break ;
  216.    case SWIG_SystemError :
  217.    case SWIG_RuntimeError :
  218.     exception_code  = SWIG_JavaRuntimeException ;
  219.      break ;
  220.    case SWIG_OverflowError :
  221.    case SWIG_IndexError :
  222.     exception_code  = SWIG_JavaIndexOutOfBoundsException ;
  223.      break ;
  224.    case SWIG_DivisionByZero :
  225.     exception_code  = SWIG_JavaArithmeticException ;
  226.      break ;
  227.    case SWIG_SyntaxError :
  228.    case SWIG_ValueError :
  229.    case SWIG_TypeError :
  230.     exception_code  = SWIG_JavaIllegalArgumentException ;
  231.      break ;
  232.    case SWIG_UnknownError :
  233.    default :
  234.     exception_code  = SWIG_JavaUnknownError ;
  235.      break ;
  236.    }
  237.   SWIG_JavaThrowException (jenv , exception_code , msg ) ;
  238. }
  239.  
  240.  
  241. #if defined(SWIG_NOINCLUDE) || defined(SWIG_NOARRAYS)
  242.  
  243.  
  244. int SWIG_JavaArrayInSchar  (JNIEnv  *jenv , jbyte  **jarr ,  signed  char  **carr , jbyteArray input ) ;
  245. void SWIG_JavaArrayArgoutSchar  (JNIEnv  *jenv , jbyte  *jarr ,  signed  char  *carr , jbyteArray input ) ;
  246. jbyteArray SWIG_JavaArrayOutSchar  (JNIEnv  *jenv ,  signed  char  *result , jsize sz ) ;
  247.  
  248.  
  249. int SWIG_JavaArrayInUchar  (JNIEnv  *jenv , jshort  **jarr ,  unsigned  char  **carr , jshortArray input ) ;
  250. void SWIG_JavaArrayArgoutUchar  (JNIEnv  *jenv , jshort  *jarr ,  unsigned  char  *carr , jshortArray input ) ;
  251. jshortArray SWIG_JavaArrayOutUchar  (JNIEnv  *jenv ,  unsigned  char  *result , jsize sz ) ;
  252.  
  253.  
  254. int SWIG_JavaArrayInShort  (JNIEnv  *jenv , jshort  **jarr ,  short  **carr , jshortArray input ) ;
  255. void SWIG_JavaArrayArgoutShort  (JNIEnv  *jenv , jshort  *jarr ,  short  *carr , jshortArray input ) ;
  256. jshortArray SWIG_JavaArrayOutShort  (JNIEnv  *jenv ,  short  *result , jsize sz ) ;
  257.  
  258.  
  259. int SWIG_JavaArrayInUshort  (JNIEnv  *jenv , jint  **jarr ,  unsigned  short  **carr , jintArray input ) ;
  260. void SWIG_JavaArrayArgoutUshort  (JNIEnv  *jenv , jint  *jarr ,  unsigned  short  *carr , jintArray input ) ;
  261. jintArray SWIG_JavaArrayOutUshort  (JNIEnv  *jenv ,  unsigned  short  *result , jsize sz ) ;
  262.  
  263.  
  264. int SWIG_JavaArrayInInt  (JNIEnv  *jenv , jint  **jarr ,  int  **carr , jintArray input ) ;
  265. void SWIG_JavaArrayArgoutInt  (JNIEnv  *jenv , jint  *jarr ,  int  *carr , jintArray input ) ;
  266. jintArray SWIG_JavaArrayOutInt  (JNIEnv  *jenv ,  int  *result , jsize sz ) ;
  267.  
  268.  
  269. int SWIG_JavaArrayInUint  (JNIEnv  *jenv , jlong  **jarr ,  unsigned  int  **carr , jlongArray input ) ;
  270. void SWIG_JavaArrayArgoutUint  (JNIEnv  *jenv , jlong  *jarr ,  unsigned  int  *carr , jlongArray input ) ;
  271. jlongArray SWIG_JavaArrayOutUint  (JNIEnv  *jenv ,  unsigned  int  *result , jsize sz ) ;
  272.  
  273.  
  274. int SWIG_JavaArrayInLong  (JNIEnv  *jenv , jint  **jarr ,  long  **carr , jintArray input ) ;
  275. void SWIG_JavaArrayArgoutLong  (JNIEnv  *jenv , jint  *jarr ,  long  *carr , jintArray input ) ;
  276. jintArray SWIG_JavaArrayOutLong  (JNIEnv  *jenv ,  long  *result , jsize sz ) ;
  277.  
  278.  
  279. int SWIG_JavaArrayInUlong  (JNIEnv  *jenv , jlong  **jarr ,  unsigned  long  **carr , jlongArray input ) ;
  280. void SWIG_JavaArrayArgoutUlong  (JNIEnv  *jenv , jlong  *jarr ,  unsigned  long  *carr , jlongArray input ) ;
  281. jlongArray SWIG_JavaArrayOutUlong  (JNIEnv  *jenv ,  unsigned  long  *result , jsize sz ) ;
  282.  
  283.  
  284. int SWIG_JavaArrayInLonglong  (JNIEnv  *jenv , jlong  **jarr , jlong  **carr , jlongArray input ) ;
  285. void SWIG_JavaArrayArgoutLonglong  (JNIEnv  *jenv , jlong  *jarr , jlong  *carr , jlongArray input ) ;
  286. jlongArray SWIG_JavaArrayOutLonglong  (JNIEnv  *jenv , jlong  *result , jsize sz ) ;
  287.  
  288.  
  289. int SWIG_JavaArrayInFloat  (JNIEnv  *jenv , jfloat  **jarr ,  float  **carr , jfloatArray input ) ;
  290. void SWIG_JavaArrayArgoutFloat  (JNIEnv  *jenv , jfloat  *jarr ,  float  *carr , jfloatArray input ) ;
  291. jfloatArray SWIG_JavaArrayOutFloat  (JNIEnv  *jenv ,  float  *result , jsize sz ) ;
  292.  
  293.  
  294. int SWIG_JavaArrayInDouble  (JNIEnv  *jenv , jdouble  **jarr ,  double  **carr , jdoubleArray input ) ;
  295. void SWIG_JavaArrayArgoutDouble  (JNIEnv  *jenv , jdouble  *jarr ,  double  *carr , jdoubleArray input ) ;
  296. jdoubleArray SWIG_JavaArrayOutDouble  (JNIEnv  *jenv ,  double  *result , jsize sz ) ;
  297.  
  298.  
  299. #else
  300.  
  301.  
  302. /* signed char[] support */
  303. int SWIG_JavaArrayInSchar  (JNIEnv  *jenv , jbyte  **jarr ,  signed  char  **carr , jbyteArray input )  {
  304.    int i ;
  305.   jsize sz ;
  306.    if  ( !input )  {
  307.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  308.      return  0 ;
  309.    }
  310.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  311.    *jarr  =  ( *jenv ) ->GetByteArrayElements (jenv , input ,  0 ) ;
  312.    if  ( !*jarr )
  313.      return  0 ;
  314.    *carr  =  ( signed  char * )  calloc (sz ,  sizeof ( signed  char ) ) ;
  315.    if  ( !*carr )  {
  316.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  317.      return  0 ;
  318.    }
  319.    for  (i = 0 ; i <sz ; i ++ )
  320.      ( *carr ) [i ]  =  ( signed  char ) ( *jarr ) [i ] ;
  321.    return  1 ;
  322. }
  323.  
  324. void SWIG_JavaArrayArgoutSchar  (JNIEnv  *jenv , jbyte  *jarr ,  signed  char  *carr , jbyteArray input )  {
  325.    int i ;
  326.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  327.    for  (i = 0 ; i <sz ; i ++ )
  328.     jarr [i ]  =  (jbyte )carr [i ] ;
  329.    ( *jenv ) ->ReleaseByteArrayElements (jenv , input , jarr ,  0 ) ;
  330. }
  331.  
  332. jbyteArray SWIG_JavaArrayOutSchar  (JNIEnv  *jenv ,  signed  char  *result , jsize sz )  {
  333.   jbyte  *arr ;
  334.    int i ;
  335.   jbyteArray jresult  =  ( *jenv ) ->NewByteArray (jenv , sz ) ;
  336.    if  ( !jresult )
  337.      return NULL ;
  338.   arr  =  ( *jenv ) ->GetByteArrayElements (jenv , jresult ,  0 ) ;
  339.    if  ( !arr )
  340.      return NULL ;
  341.    for  (i = 0 ; i <sz ; i ++ )
  342.     arr [i ]  =  (jbyte )result [i ] ;
  343.    ( *jenv ) ->ReleaseByteArrayElements (jenv , jresult , arr ,  0 ) ;
  344.    return jresult ;
  345. }
  346.  
  347.  
  348. /* unsigned char[] support */
  349. int SWIG_JavaArrayInUchar  (JNIEnv  *jenv , jshort  **jarr ,  unsigned  char  **carr , jshortArray input )  {
  350.    int i ;
  351.   jsize sz ;
  352.    if  ( !input )  {
  353.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  354.      return  0 ;
  355.    }
  356.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  357.    *jarr  =  ( *jenv ) ->GetShortArrayElements (jenv , input ,  0 ) ;
  358.    if  ( !*jarr )
  359.      return  0 ;
  360.    *carr  =  ( unsigned  char * )  calloc (sz ,  sizeof ( unsigned  char ) ) ;
  361.    if  ( !*carr )  {
  362.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  363.      return  0 ;
  364.    }
  365.    for  (i = 0 ; i <sz ; i ++ )
  366.      ( *carr ) [i ]  =  ( unsigned  char ) ( *jarr ) [i ] ;
  367.    return  1 ;
  368. }
  369.  
  370. void SWIG_JavaArrayArgoutUchar  (JNIEnv  *jenv , jshort  *jarr ,  unsigned  char  *carr , jshortArray input )  {
  371.    int i ;
  372.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  373.    for  (i = 0 ; i <sz ; i ++ )
  374.     jarr [i ]  =  (jshort )carr [i ] ;
  375.    ( *jenv ) ->ReleaseShortArrayElements (jenv , input , jarr ,  0 ) ;
  376. }
  377.  
  378. jshortArray SWIG_JavaArrayOutUchar  (JNIEnv  *jenv ,  unsigned  char  *result , jsize sz )  {
  379.   jshort  *arr ;
  380.    int i ;
  381.   jshortArray jresult  =  ( *jenv ) ->NewShortArray (jenv , sz ) ;
  382.    if  ( !jresult )
  383.      return NULL ;
  384.   arr  =  ( *jenv ) ->GetShortArrayElements (jenv , jresult ,  0 ) ;
  385.    if  ( !arr )
  386.      return NULL ;
  387.    for  (i = 0 ; i <sz ; i ++ )
  388.     arr [i ]  =  (jshort )result [i ] ;
  389.    ( *jenv ) ->ReleaseShortArrayElements (jenv , jresult , arr ,  0 ) ;
  390.    return jresult ;
  391. }
  392.  
  393.  
  394. /* short[] support */
  395. int SWIG_JavaArrayInShort  (JNIEnv  *jenv , jshort  **jarr ,  short  **carr , jshortArray input )  {
  396.    int i ;
  397.   jsize sz ;
  398.    if  ( !input )  {
  399.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  400.      return  0 ;
  401.    }
  402.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  403.    *jarr  =  ( *jenv ) ->GetShortArrayElements (jenv , input ,  0 ) ;
  404.    if  ( !*jarr )
  405.      return  0 ;
  406.    *carr  =  ( short * )  calloc (sz ,  sizeof ( short ) ) ;
  407.    if  ( !*carr )  {
  408.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  409.      return  0 ;
  410.    }
  411.    for  (i = 0 ; i <sz ; i ++ )
  412.      ( *carr ) [i ]  =  ( short ) ( *jarr ) [i ] ;
  413.    return  1 ;
  414. }
  415.  
  416. void SWIG_JavaArrayArgoutShort  (JNIEnv  *jenv , jshort  *jarr ,  short  *carr , jshortArray input )  {
  417.    int i ;
  418.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  419.    for  (i = 0 ; i <sz ; i ++ )
  420.     jarr [i ]  =  (jshort )carr [i ] ;
  421.    ( *jenv ) ->ReleaseShortArrayElements (jenv , input , jarr ,  0 ) ;
  422. }
  423.  
  424. jshortArray SWIG_JavaArrayOutShort  (JNIEnv  *jenv ,  short  *result , jsize sz )  {
  425.   jshort  *arr ;
  426.    int i ;
  427.   jshortArray jresult  =  ( *jenv ) ->NewShortArray (jenv , sz ) ;
  428.    if  ( !jresult )
  429.      return NULL ;
  430.   arr  =  ( *jenv ) ->GetShortArrayElements (jenv , jresult ,  0 ) ;
  431.    if  ( !arr )
  432.      return NULL ;
  433.    for  (i = 0 ; i <sz ; i ++ )
  434.     arr [i ]  =  (jshort )result [i ] ;
  435.    ( *jenv ) ->ReleaseShortArrayElements (jenv , jresult , arr ,  0 ) ;
  436.    return jresult ;
  437. }
  438.  
  439.  
  440. /* unsigned short[] support */
  441. int SWIG_JavaArrayInUshort  (JNIEnv  *jenv , jint  **jarr ,  unsigned  short  **carr , jintArray input )  {
  442.    int i ;
  443.   jsize sz ;
  444.    if  ( !input )  {
  445.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  446.      return  0 ;
  447.    }
  448.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  449.    *jarr  =  ( *jenv ) ->GetIntArrayElements (jenv , input ,  0 ) ;
  450.    if  ( !*jarr )
  451.      return  0 ;
  452.    *carr  =  ( unsigned  short * )  calloc (sz ,  sizeof ( unsigned  short ) ) ;
  453.    if  ( !*carr )  {
  454.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  455.      return  0 ;
  456.    }
  457.    for  (i = 0 ; i <sz ; i ++ )
  458.      ( *carr ) [i ]  =  ( unsigned  short ) ( *jarr ) [i ] ;
  459.    return  1 ;
  460. }
  461.  
  462. void SWIG_JavaArrayArgoutUshort  (JNIEnv  *jenv , jint  *jarr ,  unsigned  short  *carr , jintArray input )  {
  463.    int i ;
  464.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  465.    for  (i = 0 ; i <sz ; i ++ )
  466.     jarr [i ]  =  (jint )carr [i ] ;
  467.    ( *jenv ) ->ReleaseIntArrayElements (jenv , input , jarr ,  0 ) ;
  468. }
  469.  
  470. jintArray SWIG_JavaArrayOutUshort  (JNIEnv  *jenv ,  unsigned  short  *result , jsize sz )  {
  471.   jint  *arr ;
  472.    int i ;
  473.   jintArray jresult  =  ( *jenv ) ->NewIntArray (jenv , sz ) ;
  474.    if  ( !jresult )
  475.      return NULL ;
  476.   arr  =  ( *jenv ) ->GetIntArrayElements (jenv , jresult ,  0 ) ;
  477.    if  ( !arr )
  478.      return NULL ;
  479.    for  (i = 0 ; i <sz ; i ++ )
  480.     arr [i ]  =  (jint )result [i ] ;
  481.    ( *jenv ) ->ReleaseIntArrayElements (jenv , jresult , arr ,  0 ) ;
  482.    return jresult ;
  483. }
  484.  
  485.  
  486. /* int[] support */
  487. int SWIG_JavaArrayInInt  (JNIEnv  *jenv , jint  **jarr ,  int  **carr , jintArray input )  {
  488.    int i ;
  489.   jsize sz ;
  490.    if  ( !input )  {
  491.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  492.      return  0 ;
  493.    }
  494.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  495.    *jarr  =  ( *jenv ) ->GetIntArrayElements (jenv , input ,  0 ) ;
  496.    if  ( !*jarr )
  497.      return  0 ;
  498.    *carr  =  ( int * )  calloc (sz ,  sizeof ( int ) ) ;
  499.    if  ( !*carr )  {
  500.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  501.      return  0 ;
  502.    }
  503.    for  (i = 0 ; i <sz ; i ++ )
  504.      ( *carr ) [i ]  =  ( int ) ( *jarr ) [i ] ;
  505.    return  1 ;
  506. }
  507.  
  508. void SWIG_JavaArrayArgoutInt  (JNIEnv  *jenv , jint  *jarr ,  int  *carr , jintArray input )  {
  509.    int i ;
  510.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  511.    for  (i = 0 ; i <sz ; i ++ )
  512.     jarr [i ]  =  (jint )carr [i ] ;
  513.    ( *jenv ) ->ReleaseIntArrayElements (jenv , input , jarr ,  0 ) ;
  514. }
  515.  
  516. jintArray SWIG_JavaArrayOutInt  (JNIEnv  *jenv ,  int  *result , jsize sz )  {
  517.   jint  *arr ;
  518.    int i ;
  519.   jintArray jresult  =  ( *jenv ) ->NewIntArray (jenv , sz ) ;
  520.    if  ( !jresult )
  521.      return NULL ;
  522.   arr  =  ( *jenv ) ->GetIntArrayElements (jenv , jresult ,  0 ) ;
  523.    if  ( !arr )
  524.      return NULL ;
  525.    for  (i = 0 ; i <sz ; i ++ )
  526.     arr [i ]  =  (jint )result [i ] ;
  527.    ( *jenv ) ->ReleaseIntArrayElements (jenv , jresult , arr ,  0 ) ;
  528.    return jresult ;
  529. }
  530.  
  531.  
  532. /* unsigned int[] support */
  533. int SWIG_JavaArrayInUint  (JNIEnv  *jenv , jlong  **jarr ,  unsigned  int  **carr , jlongArray input )  {
  534.    int i ;
  535.   jsize sz ;
  536.    if  ( !input )  {
  537.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  538.      return  0 ;
  539.    }
  540.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  541.    *jarr  =  ( *jenv ) ->GetLongArrayElements (jenv , input ,  0 ) ;
  542.    if  ( !*jarr )
  543.      return  0 ;
  544.    *carr  =  ( unsigned  int * )  calloc (sz ,  sizeof ( unsigned  int ) ) ;
  545.    if  ( !*carr )  {
  546.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  547.      return  0 ;
  548.    }
  549.    for  (i = 0 ; i <sz ; i ++ )
  550.      ( *carr ) [i ]  =  ( unsigned  int ) ( *jarr ) [i ] ;
  551.    return  1 ;
  552. }
  553.  
  554. void SWIG_JavaArrayArgoutUint  (JNIEnv  *jenv , jlong  *jarr ,  unsigned  int  *carr , jlongArray input )  {
  555.    int i ;
  556.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  557.    for  (i = 0 ; i <sz ; i ++ )
  558.     jarr [i ]  =  (jlong )carr [i ] ;
  559.    ( *jenv ) ->ReleaseLongArrayElements (jenv , input , jarr ,  0 ) ;
  560. }
  561.  
  562. jlongArray SWIG_JavaArrayOutUint  (JNIEnv  *jenv ,  unsigned  int  *result , jsize sz )  {
  563.   jlong  *arr ;
  564.    int i ;
  565.   jlongArray jresult  =  ( *jenv ) ->NewLongArray (jenv , sz ) ;
  566.    if  ( !jresult )
  567.      return NULL ;
  568.   arr  =  ( *jenv ) ->GetLongArrayElements (jenv , jresult ,  0 ) ;
  569.    if  ( !arr )
  570.      return NULL ;
  571.    for  (i = 0 ; i <sz ; i ++ )
  572.     arr [i ]  =  (jlong )result [i ] ;
  573.    ( *jenv ) ->ReleaseLongArrayElements (jenv , jresult , arr ,  0 ) ;
  574.    return jresult ;
  575. }
  576.  
  577.  
  578. /* long[] support */
  579. int SWIG_JavaArrayInLong  (JNIEnv  *jenv , jint  **jarr ,  long  **carr , jintArray input )  {
  580.    int i ;
  581.   jsize sz ;
  582.    if  ( !input )  {
  583.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  584.      return  0 ;
  585.    }
  586.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  587.    *jarr  =  ( *jenv ) ->GetIntArrayElements (jenv , input ,  0 ) ;
  588.    if  ( !*jarr )
  589.      return  0 ;
  590.    *carr  =  ( long * )  calloc (sz ,  sizeof ( long ) ) ;
  591.    if  ( !*carr )  {
  592.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  593.      return  0 ;
  594.    }
  595.    for  (i = 0 ; i <sz ; i ++ )
  596.      ( *carr ) [i ]  =  ( long ) ( *jarr ) [i ] ;
  597.    return  1 ;
  598. }
  599.  
  600. void SWIG_JavaArrayArgoutLong  (JNIEnv  *jenv , jint  *jarr ,  long  *carr , jintArray input )  {
  601.    int i ;
  602.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  603.    for  (i = 0 ; i <sz ; i ++ )
  604.     jarr [i ]  =  (jint )carr [i ] ;
  605.    ( *jenv ) ->ReleaseIntArrayElements (jenv , input , jarr ,  0 ) ;
  606. }
  607.  
  608. jintArray SWIG_JavaArrayOutLong  (JNIEnv  *jenv ,  long  *result , jsize sz )  {
  609.   jint  *arr ;
  610.    int i ;
  611.   jintArray jresult  =  ( *jenv ) ->NewIntArray (jenv , sz ) ;
  612.    if  ( !jresult )
  613.      return NULL ;
  614.   arr  =  ( *jenv ) ->GetIntArrayElements (jenv , jresult ,  0 ) ;
  615.    if  ( !arr )
  616.      return NULL ;
  617.    for  (i = 0 ; i <sz ; i ++ )
  618.     arr [i ]  =  (jint )result [i ] ;
  619.    ( *jenv ) ->ReleaseIntArrayElements (jenv , jresult , arr ,  0 ) ;
  620.    return jresult ;
  621. }
  622.  
  623.  
  624. /* unsigned long[] support */
  625. int SWIG_JavaArrayInUlong  (JNIEnv  *jenv , jlong  **jarr ,  unsigned  long  **carr , jlongArray input )  {
  626.    int i ;
  627.   jsize sz ;
  628.    if  ( !input )  {
  629.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  630.      return  0 ;
  631.    }
  632.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  633.    *jarr  =  ( *jenv ) ->GetLongArrayElements (jenv , input ,  0 ) ;
  634.    if  ( !*jarr )
  635.      return  0 ;
  636.    *carr  =  ( unsigned  long * )  calloc (sz ,  sizeof ( unsigned  long ) ) ;
  637.    if  ( !*carr )  {
  638.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  639.      return  0 ;
  640.    }
  641.    for  (i = 0 ; i <sz ; i ++ )
  642.      ( *carr ) [i ]  =  ( unsigned  long ) ( *jarr ) [i ] ;
  643.    return  1 ;
  644. }
  645.  
  646. void SWIG_JavaArrayArgoutUlong  (JNIEnv  *jenv , jlong  *jarr ,  unsigned  long  *carr , jlongArray input )  {
  647.    int i ;
  648.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  649.    for  (i = 0 ; i <sz ; i ++ )
  650.     jarr [i ]  =  (jlong )carr [i ] ;
  651.    ( *jenv ) ->ReleaseLongArrayElements (jenv , input , jarr ,  0 ) ;
  652. }
  653.  
  654. jlongArray SWIG_JavaArrayOutUlong  (JNIEnv  *jenv ,  unsigned  long  *result , jsize sz )  {
  655.   jlong  *arr ;
  656.    int i ;
  657.   jlongArray jresult  =  ( *jenv ) ->NewLongArray (jenv , sz ) ;
  658.    if  ( !jresult )
  659.      return NULL ;
  660.   arr  =  ( *jenv ) ->GetLongArrayElements (jenv , jresult ,  0 ) ;
  661.    if  ( !arr )
  662.      return NULL ;
  663.    for  (i = 0 ; i <sz ; i ++ )
  664.     arr [i ]  =  (jlong )result [i ] ;
  665.    ( *jenv ) ->ReleaseLongArrayElements (jenv , jresult , arr ,  0 ) ;
  666.    return jresult ;
  667. }
  668.  
  669.  
  670. /* jlong[] support */
  671. int SWIG_JavaArrayInLonglong  (JNIEnv  *jenv , jlong  **jarr , jlong  **carr , jlongArray input )  {
  672.    int i ;
  673.   jsize sz ;
  674.    if  ( !input )  {
  675.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  676.      return  0 ;
  677.    }
  678.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  679.    *jarr  =  ( *jenv ) ->GetLongArrayElements (jenv , input ,  0 ) ;
  680.    if  ( !*jarr )
  681.      return  0 ;
  682.    *carr  =  (jlong * )  calloc (sz ,  sizeof (jlong ) ) ;
  683.    if  ( !*carr )  {
  684.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  685.      return  0 ;
  686.    }
  687.    for  (i = 0 ; i <sz ; i ++ )
  688.      ( *carr ) [i ]  =  (jlong ) ( *jarr ) [i ] ;
  689.    return  1 ;
  690. }
  691.  
  692. void SWIG_JavaArrayArgoutLonglong  (JNIEnv  *jenv , jlong  *jarr , jlong  *carr , jlongArray input )  {
  693.    int i ;
  694.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  695.    for  (i = 0 ; i <sz ; i ++ )
  696.     jarr [i ]  =  (jlong )carr [i ] ;
  697.    ( *jenv ) ->ReleaseLongArrayElements (jenv , input , jarr ,  0 ) ;
  698. }
  699.  
  700. jlongArray SWIG_JavaArrayOutLonglong  (JNIEnv  *jenv , jlong  *result , jsize sz )  {
  701.   jlong  *arr ;
  702.    int i ;
  703.   jlongArray jresult  =  ( *jenv ) ->NewLongArray (jenv , sz ) ;
  704.    if  ( !jresult )
  705.      return NULL ;
  706.   arr  =  ( *jenv ) ->GetLongArrayElements (jenv , jresult ,  0 ) ;
  707.    if  ( !arr )
  708.      return NULL ;
  709.    for  (i = 0 ; i <sz ; i ++ )
  710.     arr [i ]  =  (jlong )result [i ] ;
  711.    ( *jenv ) ->ReleaseLongArrayElements (jenv , jresult , arr ,  0 ) ;
  712.    return jresult ;
  713. }
  714.  
  715.  
  716. /* float[] support */
  717. int SWIG_JavaArrayInFloat  (JNIEnv  *jenv , jfloat  **jarr ,  float  **carr , jfloatArray input )  {
  718.    int i ;
  719.   jsize sz ;
  720.    if  ( !input )  {
  721.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  722.      return  0 ;
  723.    }
  724.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  725.    *jarr  =  ( *jenv ) ->GetFloatArrayElements (jenv , input ,  0 ) ;
  726.    if  ( !*jarr )
  727.      return  0 ;
  728.    *carr  =  ( float * )  calloc (sz ,  sizeof ( float ) ) ;
  729.    if  ( !*carr )  {
  730.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  731.      return  0 ;
  732.    }
  733.    for  (i = 0 ; i <sz ; i ++ )
  734.      ( *carr ) [i ]  =  ( float ) ( *jarr ) [i ] ;
  735.    return  1 ;
  736. }
  737.  
  738. void SWIG_JavaArrayArgoutFloat  (JNIEnv  *jenv , jfloat  *jarr ,  float  *carr , jfloatArray input )  {
  739.    int i ;
  740.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  741.    for  (i = 0 ; i <sz ; i ++ )
  742.     jarr [i ]  =  (jfloat )carr [i ] ;
  743.    ( *jenv ) ->ReleaseFloatArrayElements (jenv , input , jarr ,  0 ) ;
  744. }
  745.  
  746. jfloatArray SWIG_JavaArrayOutFloat  (JNIEnv  *jenv ,  float  *result , jsize sz )  {
  747.   jfloat  *arr ;
  748.    int i ;
  749.   jfloatArray jresult  =  ( *jenv ) ->NewFloatArray (jenv , sz ) ;
  750.    if  ( !jresult )
  751.      return NULL ;
  752.   arr  =  ( *jenv ) ->GetFloatArrayElements (jenv , jresult ,  0 ) ;
  753.    if  ( !arr )
  754.      return NULL ;
  755.    for  (i = 0 ; i <sz ; i ++ )
  756.     arr [i ]  =  (jfloat )result [i ] ;
  757.    ( *jenv ) ->ReleaseFloatArrayElements (jenv , jresult , arr ,  0 ) ;
  758.    return jresult ;
  759. }
  760.  
  761.  
  762. /* double[] support */
  763. int SWIG_JavaArrayInDouble  (JNIEnv  *jenv , jdouble  **jarr ,  double  **carr , jdoubleArray input )  {
  764.    int i ;
  765.   jsize sz ;
  766.    if  ( !input )  {
  767.     SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "null array" ) ;
  768.      return  0 ;
  769.    }
  770.   sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  771.    *jarr  =  ( *jenv ) ->GetDoubleArrayElements (jenv , input ,  0 ) ;
  772.    if  ( !*jarr )
  773.      return  0 ;
  774.    *carr  =  ( double * )  calloc (sz ,  sizeof ( double ) ) ;
  775.    if  ( !*carr )  {
  776.     SWIG_JavaThrowException (jenv , SWIG_JavaOutOfMemoryError ,  "array memory allocation failed" ) ;
  777.      return  0 ;
  778.    }
  779.    for  (i = 0 ; i <sz ; i ++ )
  780.      ( *carr ) [i ]  =  ( double ) ( *jarr ) [i ] ;
  781.    return  1 ;
  782. }
  783.  
  784. void SWIG_JavaArrayArgoutDouble  (JNIEnv  *jenv , jdouble  *jarr ,  double  *carr , jdoubleArray input )  {
  785.    int i ;
  786.   jsize sz  =  ( *jenv ) ->GetArrayLength (jenv , input ) ;
  787.    for  (i = 0 ; i <sz ; i ++ )
  788.     jarr [i ]  =  (jdouble )carr [i ] ;
  789.    ( *jenv ) ->ReleaseDoubleArrayElements (jenv , input , jarr ,  0 ) ;
  790. }
  791.  
  792. jdoubleArray SWIG_JavaArrayOutDouble  (JNIEnv  *jenv ,  double  *result , jsize sz )  {
  793.   jdouble  *arr ;
  794.    int i ;
  795.   jdoubleArray jresult  =  ( *jenv ) ->NewDoubleArray (jenv , sz ) ;
  796.    if  ( !jresult )
  797.      return NULL ;
  798.   arr  =  ( *jenv ) ->GetDoubleArrayElements (jenv , jresult ,  0 ) ;
  799.    if  ( !arr )
  800.      return NULL ;
  801.    for  (i = 0 ; i <sz ; i ++ )
  802.     arr [i ]  =  (jdouble )result [i ] ;
  803.    ( *jenv ) ->ReleaseDoubleArrayElements (jenv , jresult , arr ,  0 ) ;
  804.    return jresult ;
  805. }
  806.  
  807.  
  808. #endif
  809.  
  810.  
  811. #include "webp/decode.h"
  812.  
  813. #define FillMeInAsSizeCannotBeDeterminedAutomatically \
  814.     (result ? returned_buffer_size(__FUNCTION__, arg3, arg4) : 0)
  815.  
  816. static jint returned_buffer_size (
  817.      const  char  * function ,  int  *width ,  int  *height )  {
  818.    static  const  struct sizemap  {
  819.      const  char  * function ;
  820.      int size_multiplier ;
  821.    } size_map [ ]  =  {
  822.      {  "Java_com_google_webp_libwebpJNI_WebPDecodeRGB" ,   3  } ,
  823.      {  "Java_com_google_webp_libwebpJNI_WebPDecodeRGBA" ,  4  } ,
  824.      {  "Java_com_google_webp_libwebpJNI_WebPDecodeARGB" ,  4  } ,
  825.      {  "Java_com_google_webp_libwebpJNI_WebPDecodeBGR" ,   3  } ,
  826.      {  "Java_com_google_webp_libwebpJNI_WebPDecodeBGRA" ,  4  } ,
  827.      { NULL ,  0  }
  828.    } ;
  829.    const  struct sizemap  *p ;
  830.   jint size  =  - 1 ;
  831.  
  832.    for  (= size_map ; p -> function ; p ++ )  {
  833.      if  ( ! strcmp ( function , p -> function ) )  {
  834.       size  =  *width  *  *height  * p ->size_multiplier ;
  835.        break ;
  836.      }
  837.    }
  838.  
  839.    return size ;
  840. }
  841.  
  842. /* Work around broken gcj jni.h */
  843. #ifdef __GCJ_JNI_H__
  844. # undef JNIEXPORT
  845. # define JNIEXPORT
  846. # undef JNICALL
  847. # define JNICALL
  848. #endif
  849.  
  850.  
  851. #ifdef __cplusplus
  852. extern  "C"  {
  853. #endif
  854.  
  855. SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetDecoderVersion (JNIEnv  *jenv , jclass jcls )  {
  856.   jint jresult  =  0  ;
  857.    int result ;
  858.  
  859.    ( void )jenv ;
  860.    ( void )jcls ;
  861.   result  =  ( int )WebPGetDecoderVersion ( ) ;
  862.   jresult  =  (jint )result ;
  863.    return jresult ;
  864. }

    1. SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetEncoderVersion(JNIEnv *jenv, jclass jcls) {
    2.   jint jresult  =  0  ;
    3.    return jresult ;
    4. }
     
  865.  
  866. SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetInfo (JNIEnv  *jenv , jclass jcls , jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  867.   jint jresult  =  0  ;
  868.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  869.    uint32_t arg2  ;
  870.    int  *arg3  =  ( int  * )  0  ;
  871.    int  *arg4  =  ( int  * )  0  ;
  872.   jbyte  *jarr1  ;
  873.    int temp3  ;
  874.    int temp4  ;
  875.    int result ;
  876.  
  877.    ( void )jenv ;
  878.    ( void )jcls ;
  879.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  880.   arg2  =  ( uint32_t )jarg2 ;
  881.    {
  882.      if  ( !jarg3 )  {
  883.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  884.        return  0 ;
  885.      }
  886.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  887.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  888.        return  0 ;
  889.      }
  890.     arg3  =  &temp3 ;
  891.    }
  892.    {
  893.      if  ( !jarg4 )  {
  894.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  895.        return  0 ;
  896.      }
  897.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  898.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  899.        return  0 ;
  900.      }
  901.     arg4  =  &temp4 ;
  902.    }
  903.    {
  904.      if  (arg2  <  0 )  {
  905.        {
  906.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  907.        } ;
  908.      }
  909.    }
  910.   result  =  ( int )WebPGetInfo ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  911.   jresult  =  (jint )result ;
  912.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  913.    {
  914.     jint jvalue  =  (jint )temp3 ;
  915.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  916.    }
  917.    {
  918.     jint jvalue  =  (jint )temp4 ;
  919.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  920.    }
  921.    free (arg1 ) ;
  922.  
  923.  
  924.    return jresult ;
  925. }
  926.  
  927.  
  928. SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeRGB (JNIEnv  *jenv , jclass jcls ,jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  929.   jbyteArray jresult  =  0  ;
  930.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  931.    uint32_t arg2  ;
  932.    int  *arg3  =  ( int  * )  0  ;
  933.    int  *arg4  =  ( int  * )  0  ;
  934.   jbyte  *jarr1  ;
  935.    int temp3  ;
  936.    int temp4  ;
  937.    uint8_t  *result  =  0  ;
  938.  
  939.    ( void )jenv ;
  940.    ( void )jcls ;
  941.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  942.   arg2  =  ( uint32_t )jarg2 ;
  943.    {
  944.      if  ( !jarg3 )  {
  945.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  946.        return  0 ;
  947.      }
  948.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  949.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  950.        return  0 ;
  951.      }
  952.     arg3  =  &temp3 ;
  953.    }
  954.    {
  955.      if  ( !jarg4 )  {
  956.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  957.        return  0 ;
  958.      }
  959.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  960.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  961.        return  0 ;
  962.      }
  963.     arg4  =  &temp4 ;
  964.    }
  965.    {
  966.      if  (arg2  <  0 )  {
  967.        {
  968.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  969.        } ;
  970.      }
  971.    }
  972.   result  =  ( uint8_t  * )WebPDecodeRGB ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  973.   jresult  = SWIG_JavaArrayOutSchar (jenv , result , FillMeInAsSizeCannotBeDeterminedAutomatically ) ;
  974.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  975.    {
  976.     jint jvalue  =  (jint )temp3 ;
  977.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  978.    }
  979.    {
  980.     jint jvalue  =  (jint )temp4 ;
  981.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  982.    }
  983.    free (arg1 ) ;
  984.  
  985.  
  986.    free (result ) ;
  987.    return jresult ;
  988. }
  989.  
  990.  
  991. SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeRGBA (JNIEnv  *jenv , jclass jcls ,jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  992.   jbyteArray jresult  =  0  ;
  993.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  994.    uint32_t arg2  ;
  995.    int  *arg3  =  ( int  * )  0  ;
  996.    int  *arg4  =  ( int  * )  0  ;
  997.   jbyte  *jarr1  ;
  998.    int temp3  ;
  999.    int temp4  ;
  1000.    uint8_t  *result  =  0  ;
  1001.  
  1002.    ( void )jenv ;
  1003.    ( void )jcls ;
  1004.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  1005.   arg2  =  ( uint32_t )jarg2 ;
  1006.    {
  1007.      if  ( !jarg3 )  {
  1008.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1009.        return  0 ;
  1010.      }
  1011.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  1012.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1013.        return  0 ;
  1014.      }
  1015.     arg3  =  &temp3 ;
  1016.    }
  1017.    {
  1018.      if  ( !jarg4 )  {
  1019.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1020.        return  0 ;
  1021.      }
  1022.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  1023.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1024.        return  0 ;
  1025.      }
  1026.     arg4  =  &temp4 ;
  1027.    }
  1028.    {
  1029.      if  (arg2  <  0 )  {
  1030.        {
  1031.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  1032.        } ;
  1033.      }
  1034.    }
  1035.   result  =  ( uint8_t  * )WebPDecodeRGBA ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  1036.   jresult  = SWIG_JavaArrayOutSchar (jenv , result , FillMeInAsSizeCannotBeDeterminedAutomatically ) ;
  1037.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  1038.    {
  1039.     jint jvalue  =  (jint )temp3 ;
  1040.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  1041.    }
  1042.    {
  1043.     jint jvalue  =  (jint )temp4 ;
  1044.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  1045.    }
  1046.    free (arg1 ) ;
  1047.  
  1048.  
  1049.    free (result ) ;
  1050.    return jresult ;
  1051. }
  1052.  
  1053.  
  1054. SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeARGB (JNIEnv  *jenv , jclass jcls ,jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  1055.   jbyteArray jresult  =  0  ;
  1056.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  1057.    uint32_t arg2  ;
  1058.    int  *arg3  =  ( int  * )  0  ;
  1059.    int  *arg4  =  ( int  * )  0  ;
  1060.   jbyte  *jarr1  ;
  1061.    int temp3  ;
  1062.    int temp4  ;
  1063.    uint8_t  *result  =  0  ;
  1064.  
  1065.    ( void )jenv ;
  1066.    ( void )jcls ;
  1067.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  1068.   arg2  =  ( uint32_t )jarg2 ;
  1069.    {
  1070.      if  ( !jarg3 )  {
  1071.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1072.        return  0 ;
  1073.      }
  1074.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  1075.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1076.        return  0 ;
  1077.      }
  1078.     arg3  =  &temp3 ;
  1079.    }
  1080.    {
  1081.      if  ( !jarg4 )  {
  1082.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1083.        return  0 ;
  1084.      }
  1085.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  1086.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1087.        return  0 ;
  1088.      }
  1089.     arg4  =  &temp4 ;
  1090.    }
  1091.    {
  1092.      if  (arg2  <  0 )  {
  1093.        {
  1094.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  1095.        } ;
  1096.      }
  1097.    }
  1098.   result  =  ( uint8_t  * )WebPDecodeARGB ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  1099.   jresult  = SWIG_JavaArrayOutSchar (jenv , result , FillMeInAsSizeCannotBeDeterminedAutomatically ) ;
  1100.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  1101.    {
  1102.     jint jvalue  =  (jint )temp3 ;
  1103.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  1104.    }
  1105.    {
  1106.     jint jvalue  =  (jint )temp4 ;
  1107.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  1108.    }
  1109.    free (arg1 ) ;
  1110.  
  1111.  
  1112.    free (result ) ;
  1113.    return jresult ;
  1114. }
  1115.  
  1116.  
  1117. SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeBGR (JNIEnv  *jenv , jclass jcls ,jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  1118.   jbyteArray jresult  =  0  ;
  1119.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  1120.    uint32_t arg2  ;
  1121.    int  *arg3  =  ( int  * )  0  ;
  1122.    int  *arg4  =  ( int  * )  0  ;
  1123.   jbyte  *jarr1  ;
  1124.    int temp3  ;
  1125.    int temp4  ;
  1126.    uint8_t  *result  =  0  ;
  1127.  
  1128.    ( void )jenv ;
  1129.    ( void )jcls ;
  1130.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  1131.   arg2  =  ( uint32_t )jarg2 ;
  1132.    {
  1133.      if  ( !jarg3 )  {
  1134.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1135.        return  0 ;
  1136.      }
  1137.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  1138.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1139.        return  0 ;
  1140.      }
  1141.     arg3  =  &temp3 ;
  1142.    }
  1143.    {
  1144.      if  ( !jarg4 )  {
  1145.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1146.        return  0 ;
  1147.      }
  1148.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  1149.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1150.        return  0 ;
  1151.      }
  1152.     arg4  =  &temp4 ;
  1153.    }
  1154.    {
  1155.      if  (arg2  <  0 )  {
  1156.        {
  1157.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  1158.        } ;
  1159.      }
  1160.    }
  1161.   result  =  ( uint8_t  * )WebPDecodeBGR ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  1162.   jresult  = SWIG_JavaArrayOutSchar (jenv , result , FillMeInAsSizeCannotBeDeterminedAutomatically ) ;
  1163.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  1164.    {
  1165.     jint jvalue  =  (jint )temp3 ;
  1166.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  1167.    }
  1168.    {
  1169.     jint jvalue  =  (jint )temp4 ;
  1170.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  1171.    }
  1172.    free (arg1 ) ;
  1173.  
  1174.  
  1175.    free (result ) ;
  1176.    return jresult ;
  1177. }
  1178.  
  1179.  
  1180. SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeBGRA (JNIEnv  *jenv , jclass jcls ,jbyteArray jarg1 , jint jarg2 , jintArray jarg3 , jintArray jarg4 )  {
  1181.   jbyteArray jresult  =  0  ;
  1182.    uint8_t  *arg1  =  ( uint8_t  * )  0  ;
  1183.    uint32_t arg2  ;
  1184.    int  *arg3  =  ( int  * )  0  ;
  1185.    int  *arg4  =  ( int  * )  0  ;
  1186.   jbyte  *jarr1  ;
  1187.    int temp3  ;
  1188.    int temp4  ;
  1189.    uint8_t  *result  =  0  ;
  1190.  
  1191.    ( void )jenv ;
  1192.    ( void )jcls ;
  1193.    if  ( !SWIG_JavaArrayInSchar (jenv ,  &jarr1 ,  &arg1 , jarg1 ) )  return  0 ;
  1194.   arg2  =  ( uint32_t )jarg2 ;
  1195.    {
  1196.      if  ( !jarg3 )  {
  1197.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1198.        return  0 ;
  1199.      }
  1200.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg3 )  ==  0 )  {
  1201.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1202.        return  0 ;
  1203.      }
  1204.     arg3  =  &temp3 ;
  1205.    }
  1206.    {
  1207.      if  ( !jarg4 )  {
  1208.       SWIG_JavaThrowException (jenv , SWIG_JavaNullPointerException ,  "array null" ) ;
  1209.        return  0 ;
  1210.      }
  1211.      if  ( ( *jenv ) ->GetArrayLength (jenv , jarg4 )  ==  0 )  {
  1212.       SWIG_JavaThrowException (jenv , SWIG_JavaIndexOutOfBoundsException ,  "Array must contain at least 1 element" ) ;
  1213.        return  0 ;
  1214.      }
  1215.     arg4  =  &temp4 ;
  1216.    }
  1217.    {
  1218.      if  (arg2  <  0 )  {
  1219.        {
  1220.         SWIG_JavaException (jenv , SWIG_ValueError ,  "Expected a non-negative value." ) ;  return  0 ;
  1221.        } ;
  1222.      }
  1223.    }
  1224.   result  =  ( uint8_t  * )WebPDecodeBGRA ( ( uint8_t  const  * )arg1 ,arg2 ,arg3 ,arg4 ) ;
  1225.   jresult  = SWIG_JavaArrayOutSchar (jenv , result , FillMeInAsSizeCannotBeDeterminedAutomatically ) ;
  1226.   SWIG_JavaArrayArgoutSchar (jenv , jarr1 , arg1 , jarg1 ) ;
  1227.    {
  1228.     jint jvalue  =  (jint )temp3 ;
  1229.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg3 ,  0 ,  1 ,  &jvalue ) ;
  1230.    }
  1231.    {
  1232.     jint jvalue  =  (jint )temp4 ;
  1233.      ( *jenv ) ->SetIntArrayRegion (jenv , jarg4 ,  0 ,  1 ,  &jvalue ) ;
  1234.    }
  1235.    free (arg1 ) ;
  1236.  
  1237.  
  1238.    free (result ) ;
  1239.    return jresult ;
  1240. }
  1241.  
  1242.  
  1243.  
  1244.  
  1245. #ifdef __cplusplus
  1246. }
  1247. #endif


Content for Application.mk:

# The ARMv7 is significanly faster due to the use of the hardware FPU
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-9



Here's how to use in Java code. Notice how it converts byte[] array to int[] color array--this will break if endianness changes, right? Also notice how it uses arrays instead of single integers for width and height so they are passed by reference.


static {
    System.loadLibrary("webp");
}

private Bitmap webpToBitmap(byte[] encoded) {

    int[] width = new int[] { 0 };
    int[] height = new int[] { 0 };
    byte[] decoded = libwebp.WebPDecodeARGB(encoded, encoded.length, width, height);

    int[] pixels = new int[decoded.length / 4];
    ByteBuffer.wrap(decoded).asIntBuffer().get(pixels);

    return Bitmap.createBitmap(pixels, width[0], height[0], Bitmap.Config.ARGB_8888);

}

对应jar包so库下载地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值