|
Packit |
9c6abc |
// Copyright 2011 Google Inc.
|
|
Packit |
9c6abc |
//
|
|
Packit |
9c6abc |
// Use of this source code is governed by a BSD-style license
|
|
Packit |
9c6abc |
// that can be found in the COPYING file in the root of the source
|
|
Packit |
9c6abc |
// tree. An additional intellectual property rights grant can be found
|
|
Packit |
9c6abc |
// in the file PATENTS. All contributing project authors may
|
|
Packit |
9c6abc |
// be found in the AUTHORS file in the root of the source tree.
|
|
Packit |
9c6abc |
// -----------------------------------------------------------------------------
|
|
Packit |
9c6abc |
//
|
|
Packit |
9c6abc |
// libwebp swig interface definition
|
|
Packit |
9c6abc |
//
|
|
Packit |
9c6abc |
// Author: James Zern (jzern@google.com)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
/*
|
|
Packit |
9c6abc |
Go bindings:
|
|
Packit |
9c6abc |
$ swig -go \
|
|
Packit |
9c6abc |
-outdir . \
|
|
Packit |
9c6abc |
-o libwebp_go_wrap.c libwebp.swig
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
Java bindings:
|
|
Packit |
9c6abc |
$ mkdir -p java/com/google/webp
|
|
Packit |
9c6abc |
$ swig -java \
|
|
Packit |
9c6abc |
-package com.google.webp \
|
|
Packit |
9c6abc |
-outdir java/com/google/webp \
|
|
Packit |
9c6abc |
-o libwebp_java_wrap.c libwebp.swig
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
Python bindings:
|
|
Packit |
9c6abc |
$ swig -python \
|
|
Packit |
9c6abc |
-outdir . \
|
|
Packit |
9c6abc |
-o libwebp_python_wrap.c libwebp.swig
|
|
Packit |
9c6abc |
*/
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGPYTHON
|
|
Packit |
9c6abc |
%module(package="com.google.webp") libwebp
|
|
Packit |
9c6abc |
#else
|
|
Packit |
9c6abc |
%module libwebp
|
|
Packit |
9c6abc |
#endif /* SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%include "constraints.i"
|
|
Packit |
9c6abc |
%include "typemaps.i"
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGGO
|
|
Packit |
9c6abc |
%apply (char* STRING, size_t LENGTH) { (const uint8_t* data, size_t data_size) }
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%rename(wrapped_WebPGetInfo) WebPGetInfo(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
#endif /* SWIGGO */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGJAVA
|
|
Packit |
9c6abc |
%include "arrays_java.i";
|
|
Packit |
9c6abc |
%include "enums.swg" /*NB: requires JDK-1.5+
|
|
Packit |
9c6abc |
See: http://www.swig.org/Doc1.3/Java.html#enumerations */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
// map uint8_t* such that a byte[] is used
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
#include "webp/types.h"
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
// from arrays_java.i (signed char)
|
|
Packit |
9c6abc |
JAVA_ARRAYS_DECL(uint8_t, jbyte, Byte, Uint8)
|
|
Packit |
9c6abc |
JAVA_ARRAYS_IMPL(uint8_t, jbyte, Byte, Uint8)
|
|
Packit |
9c6abc |
JAVA_ARRAYS_TYPEMAPS(uint8_t, byte, jbyte, Uint8, "[B")
|
|
Packit |
9c6abc |
%apply uint8_t[] { uint8_t* }
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGPYTHON
|
|
Packit |
9c6abc |
%apply (char* STRING, size_t LENGTH) { (const uint8_t* data, size_t data_size) }
|
|
Packit |
9c6abc |
%typemap(out) uint8_t* {
|
|
Packit |
9c6abc |
$result = PyString_FromStringAndSize(
|
|
Packit |
9c6abc |
(const char*)$1,
|
|
Packit |
9c6abc |
($1 == NULL) ? 0 : ReturnedBufferSize("$symname", arg3, arg4));
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%typemap (in) const uint8_t* rgb (Py_buffer rgb_buffer) {
|
|
Packit |
9c6abc |
// NB: with Python < 2.6 the old style buffer protocol may be used:
|
|
Packit |
9c6abc |
// Py_ssize_t unused;
|
|
Packit |
9c6abc |
// PyObject_AsReadBuffer($input, (const void**)(&$1), &unused);
|
|
Packit |
9c6abc |
if (!PyObject_CheckBuffer($input)) {
|
|
Packit |
9c6abc |
SWIG_exception_fail(SWIG_TypeError,
|
|
Packit |
9c6abc |
"in method '$symname', argument $argnum"
|
|
Packit |
9c6abc |
" does not support the buffer interface");
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
if (PyObject_GetBuffer($input, &rgb_buffer, PyBUF_SIMPLE)) {
|
|
Packit |
9c6abc |
SWIG_exception_fail(SWIG_RuntimeError,
|
|
Packit |
9c6abc |
"in method '$symname', unable to get buffer view");
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
$1 = ($1_ltype)rgb_buffer.buf;
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%typemap(freearg) const uint8_t* rgb {
|
|
Packit |
9c6abc |
PyBuffer_Release(&rgb_buffer$argnum);
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%define DECODE_AUTODOC(func)
|
|
Packit |
9c6abc |
%feature("autodoc", #func "(uint8_t data) -> (rgb, width, height)") func;
|
|
Packit |
9c6abc |
%enddef
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%feature("autodoc", "1");
|
|
Packit |
9c6abc |
DECODE_AUTODOC(WebPDecodeRGB);
|
|
Packit |
9c6abc |
DECODE_AUTODOC(WebPDecodeRGBA);
|
|
Packit |
9c6abc |
DECODE_AUTODOC(WebPDecodeARGB);
|
|
Packit |
9c6abc |
DECODE_AUTODOC(WebPDecodeBGR);
|
|
Packit |
9c6abc |
DECODE_AUTODOC(WebPDecodeBGRA);
|
|
Packit |
9c6abc |
%feature("autodoc", "WebPGetInfo(uint8_t data) -> (width, height)") WebPGetInfo;
|
|
Packit |
9c6abc |
#endif /* SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
//------------------------------------------------------------------------------
|
|
Packit |
9c6abc |
// Decoder specific
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%apply int* OUTPUT { int* width, int* height }
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
int WebPGetDecoderVersion(void);
|
|
Packit |
9c6abc |
int WebPGetInfo(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#if defined(SWIGJAVA) || defined(SWIGPYTHON)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
// free the buffer returned by these functions after copying into
|
|
Packit |
9c6abc |
// the native type
|
|
Packit |
9c6abc |
%newobject WebPDecodeRGB;
|
|
Packit |
9c6abc |
%newobject WebPDecodeRGBA;
|
|
Packit |
9c6abc |
%newobject WebPDecodeARGB;
|
|
Packit |
9c6abc |
%newobject WebPDecodeBGR;
|
|
Packit |
9c6abc |
%newobject WebPDecodeBGRA;
|
|
Packit |
9c6abc |
%typemap(newfree) uint8_t* "free($1);"
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size,
|
|
Packit |
9c6abc |
int* width, int* height);
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA || SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
//------------------------------------------------------------------------------
|
|
Packit |
9c6abc |
// Encoder specific
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#if defined(SWIGJAVA) || defined(SWIGPYTHON)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
int WebPGetEncoderVersion(void);
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA || SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
//------------------------------------------------------------------------------
|
|
Packit |
9c6abc |
// Wrapper code additions
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
#include "webp/decode.h"
|
|
Packit |
9c6abc |
#include "webp/encode.h"
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGJAVA
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
#define FillMeInAsSizeCannotBeDeterminedAutomatically \
|
|
Packit |
9c6abc |
(result ? (jint)ReturnedBufferSize(__FUNCTION__, arg3, arg4) : 0)
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#if defined(SWIGJAVA) || defined(SWIGPYTHON)
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
static size_t ReturnedBufferSize(
|
|
Packit |
9c6abc |
const char* function, int* width, int* height) {
|
|
Packit |
9c6abc |
static const struct sizemap {
|
|
Packit |
9c6abc |
const char* function;
|
|
Packit |
9c6abc |
int size_multiplier;
|
|
Packit |
9c6abc |
} size_map[] = {
|
|
Packit |
9c6abc |
#ifdef SWIGJAVA
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_WebPDecodeRGB", 3 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_WebPDecodeRGBA", 4 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_WebPDecodeARGB", 4 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_WebPDecodeBGR", 3 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_WebPDecodeBGRA", 4 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGB", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGR", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGBA", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGRA", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGB", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGR", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGBA", 1 },
|
|
Packit |
9c6abc |
{ "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGRA", 1 },
|
|
Packit |
9c6abc |
#endif
|
|
Packit |
9c6abc |
#ifdef SWIGPYTHON
|
|
Packit |
9c6abc |
{ "WebPDecodeRGB", 3 },
|
|
Packit |
9c6abc |
{ "WebPDecodeRGBA", 4 },
|
|
Packit |
9c6abc |
{ "WebPDecodeARGB", 4 },
|
|
Packit |
9c6abc |
{ "WebPDecodeBGR", 3 },
|
|
Packit |
9c6abc |
{ "WebPDecodeBGRA", 4 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeRGB", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeBGR", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeRGBA", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeBGRA", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeLosslessRGB", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeLosslessBGR", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeLosslessRGBA", 1 },
|
|
Packit |
9c6abc |
{ "wrap_WebPEncodeLosslessBGRA", 1 },
|
|
Packit |
9c6abc |
#endif
|
|
Packit |
9c6abc |
{ NULL, 0 }
|
|
Packit |
9c6abc |
};
|
|
Packit |
9c6abc |
const struct sizemap* p;
|
|
Packit |
9c6abc |
size_t size = 0;
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
for (p = size_map; p->function; ++p) {
|
|
Packit |
9c6abc |
if (!strcmp(function, p->function)) {
|
|
Packit |
9c6abc |
size = *width * *height * p->size_multiplier;
|
|
Packit |
9c6abc |
break;
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
return size;
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
typedef size_t (*WebPEncodeFunction)(const uint8_t* rgb,
|
|
Packit |
9c6abc |
int width, int height, int stride,
|
|
Packit |
9c6abc |
float quality_factor, uint8_t** output);
|
|
Packit |
9c6abc |
typedef size_t (*WebPEncodeLosslessFunction)(const uint8_t* rgb,
|
|
Packit |
9c6abc |
int width, int height, int stride,
|
|
Packit |
9c6abc |
uint8_t** output);
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
static uint8_t* EncodeLossy(const uint8_t* rgb,
|
|
Packit |
9c6abc |
int width, int height, int stride,
|
|
Packit |
9c6abc |
float quality_factor,
|
|
Packit |
9c6abc |
WebPEncodeFunction encfn,
|
|
Packit |
9c6abc |
int* output_size, int* unused) {
|
|
Packit |
9c6abc |
uint8_t* output = NULL;
|
|
Packit |
9c6abc |
const size_t image_size =
|
|
Packit |
9c6abc |
encfn(rgb, width, height, stride, quality_factor, &output);
|
|
Packit |
9c6abc |
// the values of following two will be interpreted by ReturnedBufferSize()
|
|
Packit |
9c6abc |
// as 'width' and 'height' in the size calculation.
|
|
Packit |
9c6abc |
*output_size = image_size;
|
|
Packit |
9c6abc |
*unused = 1;
|
|
Packit |
9c6abc |
return image_size ? output : NULL;
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
static uint8_t* EncodeLossless(const uint8_t* rgb,
|
|
Packit |
9c6abc |
int width, int height, int stride,
|
|
Packit |
9c6abc |
WebPEncodeLosslessFunction encfn,
|
|
Packit |
9c6abc |
int* output_size, int* unused) {
|
|
Packit |
9c6abc |
uint8_t* output = NULL;
|
|
Packit |
9c6abc |
const size_t image_size = encfn(rgb, width, height, stride, &output);
|
|
Packit |
9c6abc |
// the values of the following two will be interpreted by
|
|
Packit |
9c6abc |
// ReturnedBufferSize() as 'width' and 'height' in the size calculation.
|
|
Packit |
9c6abc |
*output_size = image_size;
|
|
Packit |
9c6abc |
*unused = 1;
|
|
Packit |
9c6abc |
return image_size ? output : NULL;
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA || SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
//------------------------------------------------------------------------------
|
|
Packit |
9c6abc |
// libwebp/encode wrapper functions
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#if defined(SWIGJAVA) || defined(SWIGPYTHON)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%apply int* INPUT { int* unused1, int* unused2 }
|
|
Packit |
9c6abc |
%apply int* OUTPUT { int* output_size }
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
// free the buffer returned by these functions after copying into
|
|
Packit |
9c6abc |
// the native type
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeRGB;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeBGR;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeRGBA;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeBGRA;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeLosslessRGB;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeLosslessBGR;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeLosslessRGBA;
|
|
Packit |
9c6abc |
%newobject wrap_WebPEncodeLosslessBGRA;
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGJAVA
|
|
Packit |
9c6abc |
// There's no reason to call these directly
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeRGB "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeBGR "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeRGBA "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeBGRA "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeLosslessRGB "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeLosslessBGR "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeLosslessRGBA "private";
|
|
Packit |
9c6abc |
%javamethodmodifiers wrap_WebPEncodeLosslessBGRA "private";
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGPYTHON
|
|
Packit |
9c6abc |
// This autodoc will serve as a catch-all for wrap_*.
|
|
Packit |
9c6abc |
%feature("autodoc", "private, do not call directly.");
|
|
Packit |
9c6abc |
#endif
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%inline %{
|
|
Packit |
9c6abc |
// Changes the return type of WebPEncode* to more closely match Decode*.
|
|
Packit |
9c6abc |
// This also makes it easier to wrap the output buffer in a native type rather
|
|
Packit |
9c6abc |
// than dealing with the return pointer.
|
|
Packit |
9c6abc |
// The additional parameters are to allow reuse of ReturnedBufferSize(),
|
|
Packit |
9c6abc |
// unused2 and output_size will be used in this case.
|
|
Packit |
9c6abc |
#define LOSSY_WRAPPER(FUNC) \
|
|
Packit |
9c6abc |
static uint8_t* wrap_##FUNC( \
|
|
Packit |
9c6abc |
const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \
|
|
Packit |
9c6abc |
int width, int height, int stride, float quality_factor) { \
|
|
Packit |
9c6abc |
return EncodeLossy(rgb, width, height, stride, quality_factor, \
|
|
Packit |
9c6abc |
FUNC, output_size, unused2); \
|
|
Packit |
9c6abc |
} \
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
LOSSY_WRAPPER(WebPEncodeRGB)
|
|
Packit |
9c6abc |
LOSSY_WRAPPER(WebPEncodeBGR)
|
|
Packit |
9c6abc |
LOSSY_WRAPPER(WebPEncodeRGBA)
|
|
Packit |
9c6abc |
LOSSY_WRAPPER(WebPEncodeBGRA)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#undef LOSSY_WRAPPER
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#define LOSSLESS_WRAPPER(FUNC) \
|
|
Packit |
9c6abc |
static uint8_t* wrap_##FUNC( \
|
|
Packit |
9c6abc |
const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \
|
|
Packit |
9c6abc |
int width, int height, int stride) { \
|
|
Packit |
9c6abc |
return EncodeLossless(rgb, width, height, stride, \
|
|
Packit |
9c6abc |
FUNC, output_size, unused2); \
|
|
Packit |
9c6abc |
} \
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
LOSSLESS_WRAPPER(WebPEncodeLosslessRGB)
|
|
Packit |
9c6abc |
LOSSLESS_WRAPPER(WebPEncodeLosslessBGR)
|
|
Packit |
9c6abc |
LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA)
|
|
Packit |
9c6abc |
LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA)
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#undef LOSSLESS_WRAPPER
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA || SWIGPYTHON */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
//------------------------------------------------------------------------------
|
|
Packit |
9c6abc |
// Language specific
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGGO
|
|
Packit |
9c6abc |
%insert(go_wrapper) %{
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
// WebPGetInfo has 2 output parameters, provide a version in the more natural
|
|
Packit |
9c6abc |
// go idiom:
|
|
Packit |
9c6abc |
func WebPGetInfo(webp []byte) (ok bool, width int, height int) {
|
|
Packit |
9c6abc |
w := []int{0}
|
|
Packit |
9c6abc |
h := []int{0}
|
|
Packit |
9c6abc |
ok = Wrapped_WebPGetInfo(string(webp), w, h) != 0
|
|
Packit |
9c6abc |
width = w[0]
|
|
Packit |
9c6abc |
height = h[0]
|
|
Packit |
9c6abc |
return
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
#endif /* SWIGGO */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGJAVA
|
|
Packit |
9c6abc |
%{
|
|
Packit |
9c6abc |
/* Work around broken gcj jni.h */
|
|
Packit |
9c6abc |
#ifdef __GCJ_JNI_H__
|
|
Packit |
9c6abc |
# undef JNIEXPORT
|
|
Packit |
9c6abc |
# define JNIEXPORT
|
|
Packit |
9c6abc |
# undef JNICALL
|
|
Packit |
9c6abc |
# define JNICALL
|
|
Packit |
9c6abc |
#endif
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%pragma(java) modulecode=%{
|
|
Packit |
9c6abc |
private static final int UNUSED = 1;
|
|
Packit |
9c6abc |
private static int outputSize[] = { 0 };
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%define CALL_ENCODE_LOSSY_WRAPPER(func)
|
|
Packit |
9c6abc |
%pragma(java) modulecode=%{
|
|
Packit |
9c6abc |
public static byte[] func(
|
|
Packit |
9c6abc |
byte[] rgb, int width, int height, int stride, float quality_factor) {
|
|
Packit |
9c6abc |
return wrap_##func(
|
|
Packit |
9c6abc |
rgb, UNUSED, UNUSED, outputSize, width, height, stride, quality_factor);
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
%enddef
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%define CALL_ENCODE_LOSSLESS_WRAPPER(func)
|
|
Packit |
9c6abc |
%pragma(java) modulecode=%{
|
|
Packit |
9c6abc |
public static byte[] func(
|
|
Packit |
9c6abc |
byte[] rgb, int width, int height, int stride) {
|
|
Packit |
9c6abc |
return wrap_##func(
|
|
Packit |
9c6abc |
rgb, UNUSED, UNUSED, outputSize, width, height, stride);
|
|
Packit |
9c6abc |
}
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
%enddef
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGB)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGBA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGR)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGRA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGB)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGR)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA)
|
|
Packit |
9c6abc |
#endif /* SWIGJAVA */
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
#ifdef SWIGPYTHON
|
|
Packit |
9c6abc |
%pythoncode %{
|
|
Packit |
9c6abc |
_UNUSED = 1
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%define CALL_ENCODE_LOSSY_WRAPPER(func)
|
|
Packit |
9c6abc |
%pythoncode %{
|
|
Packit |
9c6abc |
def func(rgb, width, height, stride, quality_factor):
|
|
Packit |
9c6abc |
"""func(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp"""
|
|
Packit |
9c6abc |
webp = wrap_##func(
|
|
Packit |
9c6abc |
rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor)
|
|
Packit |
9c6abc |
if len(webp[0]) == 0:
|
|
Packit |
9c6abc |
return None
|
|
Packit |
9c6abc |
return webp[0]
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
%enddef
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
%define CALL_ENCODE_LOSSLESS_WRAPPER(func)
|
|
Packit |
9c6abc |
%pythoncode %{
|
|
Packit |
9c6abc |
def func(rgb, width, height, stride):
|
|
Packit |
9c6abc |
"""func(uint8_t rgb, int width, int height, int stride) -> lossless_webp"""
|
|
Packit |
9c6abc |
webp = wrap_##func(rgb, _UNUSED, _UNUSED, width, height, stride)
|
|
Packit |
9c6abc |
if len(webp[0]) == 0:
|
|
Packit |
9c6abc |
return None
|
|
Packit |
9c6abc |
return webp[0]
|
|
Packit |
9c6abc |
%}
|
|
Packit |
9c6abc |
%enddef
|
|
Packit |
9c6abc |
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGB)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGBA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGR)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGRA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGB)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGR)
|
|
Packit |
9c6abc |
CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA)
|
|
Packit |
9c6abc |
#endif /* SWIGPYTHON */
|