Blame swig/libwebp.swig

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 */