/*
 * Copyright 1997-2003 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */


#ifndef __ORIG_MLIB_IMAGE_PROTO_H
#define __ORIG_MLIB_IMAGE_PROTO_H

#include <mlib_types.h>
#include <mlib_status.h>
#include <mlib_image_types.h>
#if defined ( __MEDIALIB_OLD_NAMES_ADDED )
#include <../include/mlib_image_proto.h>
#endif /* defined ( __MEDIALIB_OLD_NAMES_ADDED ) */

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#if defined ( __USE_J2D_NAMES )
#include "j2d_names.h"
#endif // __USE_J2D_NAMES

#if defined ( _MSC_VER )
#define J2D_MLIB_PUBLIC __declspec(dllexport)
#else
#define J2D_MLIB_PUBLIC
#endif /* _MSC_VER */

#if defined ( _MSC_VER )
#if ! defined ( __MEDIALIB_OLD_NAMES )
#define __MEDIALIB_OLD_NAMES
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
#endif /* defined ( _MSC_VER ) */

/* Arithmetic Operations ( arith ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAbs mlib_ImageAbs
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAbs(mlib_image *dst,
                             const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAbs_Fp mlib_ImageAbs_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAbs_Fp(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAbs_Fp_Inp mlib_ImageAbs_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAbs_Fp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAbs_Inp mlib_ImageAbs_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAbs_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAdd mlib_ImageAdd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAdd(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAdd_Fp mlib_ImageAdd_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAdd_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAdd_Fp_Inp mlib_ImageAdd_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAdd_Fp_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAdd_Inp mlib_ImageAdd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAdd_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAve mlib_ImageAve
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAve(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAve_Fp mlib_ImageAve_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAve_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAve_Fp_Inp mlib_ImageAve_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAve_Fp_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAve_Inp mlib_ImageAve_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAve_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend mlib_ImageBlend
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend(mlib_image *dst,
                               const mlib_image *src1,
                               const mlib_image *src2,
                               const mlib_image *alpha);

/* src1dst = src1dst * alpha + src2 * (1 - alpha) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend1_Fp_Inp mlib_ImageBlend1_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend1_Fp_Inp(mlib_image *src1dst,
                                       const mlib_image *src2,
                                       const mlib_image *alpha);

/* src1dst = src1dst * alpha + src2 * (1 - alpha) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend1_Inp mlib_ImageBlend1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend1_Inp(mlib_image *src1dst,
                                    const mlib_image *src2,
                                    const mlib_image *alpha);

/* src2dst = src1 * alpha + src2dst * (1 - alpha) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend2_Fp_Inp mlib_ImageBlend2_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend2_Fp_Inp(mlib_image *src2dst,
                                       const mlib_image *src1,
                                       const mlib_image *alpha);

/* src2dst = src1 * alpha + src2dst * (1 - alpha) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend2_Inp mlib_ImageBlend2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend2_Inp(mlib_image *src2dst,
                                    const mlib_image *src1,
                                    const mlib_image *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlend_Fp mlib_ImageBlend_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlend_Fp(mlib_image *dst,
                                  const mlib_image *src1,
                                  const mlib_image *src2,
                                  const mlib_image *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlendMulti mlib_ImageBlendMulti
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlendMulti(mlib_image *dst,
                                    const mlib_image **srcs,
                                    const mlib_image **alphas,
                                    const mlib_s32 *c,
                                    mlib_s32 n);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlendMulti_Fp mlib_ImageBlendMulti_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlendMulti_Fp(mlib_image *dst,
                                       const mlib_image **srcs,
                                       const mlib_image **alphas,
                                       const mlib_d64 *c,
                                       mlib_s32 n);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlendRGBA2ARGB mlib_ImageBlendRGBA2ARGB
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlendRGBA2ARGB(mlib_image *dst,
                                        const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageBlendRGBA2BGRA mlib_ImageBlendRGBA2BGRA
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageBlendRGBA2BGRA(mlib_image *dst,
                                        const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorBlend mlib_ImageColorBlend
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorBlend(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_s32 *color,
                                    mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorBlend_Fp mlib_ImageColorBlend_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorBlend_Fp(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_d64 *color,
                                       mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorBlend_Fp_Inp mlib_ImageColorBlend_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorBlend_Fp_Inp(mlib_image *srcdst,
                                           const mlib_d64 *color,
                                           mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorBlend_Inp mlib_ImageColorBlend_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorBlend_Inp(mlib_image *srcdst,
                                        const mlib_s32 *color,
                                        mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAdd mlib_ImageConstAdd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAdd(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAdd_Fp mlib_ImageConstAdd_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAdd_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAdd_Fp_Inp mlib_ImageConstAdd_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAdd_Fp_Inp(mlib_image *srcdst,
                                         const mlib_d64 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAdd_Inp mlib_ImageConstAdd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAdd_Inp(mlib_image *srcdst,
                                      const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDiv mlib_ImageConstDiv
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDiv(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDivShift mlib_ImageConstDivShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDivShift(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_s32 *consts,
                                       mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDivShift_Inp mlib_ImageConstDivShift_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDivShift_Inp(mlib_image *srcdst,
                                           const mlib_s32 *consts,
                                           mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDiv_Fp mlib_ImageConstDiv_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDiv_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDiv_Fp_Inp mlib_ImageConstDiv_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDiv_Fp_Inp(mlib_image *srcdst,
                                         const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstDiv_Inp mlib_ImageConstDiv_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstDiv_Inp(mlib_image *srcdst,
                                      const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMul mlib_ImageConstMul
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMul(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMulShift mlib_ImageConstMulShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMulShift(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_s32 *consts,
                                       mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMulShift_Inp mlib_ImageConstMulShift_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMulShift_Inp(mlib_image *srcdst,
                                           const mlib_s32 *consts,
                                           mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMul_Fp mlib_ImageConstMul_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMul_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMul_Fp_Inp mlib_ImageConstMul_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMul_Fp_Inp(mlib_image *srcdst,
                                         const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstMul_Inp mlib_ImageConstMul_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstMul_Inp(mlib_image *srcdst,
                                      const mlib_d64 *consts);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstSub mlib_ImageConstSub
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstSub(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstSub_Fp mlib_ImageConstSub_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstSub_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstSub_Fp_Inp mlib_ImageConstSub_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstSub_Fp_Inp(mlib_image *srcdst,
                                         const mlib_d64 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstSub_Inp mlib_ImageConstSub_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstSub_Inp(mlib_image *srcdst,
                                      const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDiv1_Fp_Inp mlib_ImageDiv1_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDiv1_Fp_Inp(mlib_image *src1dst,
                                     const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDiv2_Fp_Inp mlib_ImageDiv2_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDiv2_Fp_Inp(mlib_image *src2dst,
                                     const mlib_image *src1);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivAlpha mlib_ImageDivAlpha
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivAlpha(mlib_image *dst,
                                  const mlib_image *src,
                                  mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivAlpha_Fp mlib_ImageDivAlpha_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivAlpha_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivAlpha_Fp_Inp mlib_ImageDivAlpha_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivAlpha_Fp_Inp(mlib_image *img,
                                         mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivAlpha_Inp mlib_ImageDivAlpha_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivAlpha_Inp(mlib_image *img,
                                      mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivConstShift mlib_ImageDivConstShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivConstShift(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_s32 *consts,
                                       mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivConstShift_Inp mlib_ImageDivConstShift_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivConstShift_Inp(mlib_image *srcdst,
                                           const mlib_s32 *consts,
                                           mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivShift mlib_ImageDivShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivShift(mlib_image *dst,
                                  const mlib_image *src1,
                                  const mlib_image *src2,
                                  mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivShift1_Inp mlib_ImageDivShift1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivShift1_Inp(mlib_image *src1dst,
                                       const mlib_image *src2,
                                       mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDivShift2_Inp mlib_ImageDivShift2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDivShift2_Inp(mlib_image *src2dst,
                                       const mlib_image *src1,
                                       mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDiv_Fp mlib_ImageDiv_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDiv_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExp mlib_ImageExp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExp(mlib_image *dst,
                             const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExp_Fp mlib_ImageExp_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExp_Fp(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExp_Fp_Inp mlib_ImageExp_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExp_Fp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExp_Inp mlib_ImageExp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInvert mlib_ImageInvert
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageInvert(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInvert_Fp mlib_ImageInvert_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageInvert_Fp(mlib_image *dst,
                                   const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInvert_Fp_Inp mlib_ImageInvert_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageInvert_Fp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInvert_Inp mlib_ImageInvert_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageInvert_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLog mlib_ImageLog
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLog(mlib_image *dst,
                             const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLog_Fp mlib_ImageLog_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLog_Fp(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLog_Fp_Inp mlib_ImageLog_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLog_Fp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLog_Inp mlib_ImageLog_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLog_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMax mlib_ImageMax
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMax(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMax_Fp mlib_ImageMax_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMax_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMax_Fp_Inp mlib_ImageMax_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMax_Fp_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMax_Inp mlib_ImageMax_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMax_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMin mlib_ImageMin
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMin(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMin_Fp mlib_ImageMin_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMin_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMin_Fp_Inp mlib_ImageMin_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMin_Fp_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMin_Inp mlib_ImageMin_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMin_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulAlpha mlib_ImageMulAlpha
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulAlpha(mlib_image *dst,
                                  const mlib_image *src,
                                  mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulAlpha_Fp mlib_ImageMulAlpha_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulAlpha_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulAlpha_Fp_Inp mlib_ImageMulAlpha_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulAlpha_Fp_Inp(mlib_image *img,
                                         mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulAlpha_Inp mlib_ImageMulAlpha_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulAlpha_Inp(mlib_image *img,
                                      mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulShift mlib_ImageMulShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulShift(mlib_image *dst,
                                  const mlib_image *src1,
                                  const mlib_image *src2,
                                  mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMulShift_Inp mlib_ImageMulShift_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMulShift_Inp(mlib_image *src1dst,
                                      const mlib_image *src2,
                                      mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMul_Fp mlib_ImageMul_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMul_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMul_Fp_Inp mlib_ImageMul_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMul_Fp_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScalarBlend mlib_ImageScalarBlend
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScalarBlend(mlib_image *dst,
                                     const mlib_image *src1,
                                     const mlib_image *src2,
                                     const mlib_s32 *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScalarBlend_Fp mlib_ImageScalarBlend_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScalarBlend_Fp(mlib_image *dst,
                                        const mlib_image *src1,
                                        const mlib_image *src2,
                                        const mlib_d64 *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScalarBlend_Fp_Inp mlib_ImageScalarBlend_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScalarBlend_Fp_Inp(mlib_image *src1dst,
                                            const mlib_image *src2,
                                            const mlib_d64 *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScalarBlend_Inp mlib_ImageScalarBlend_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScalarBlend_Inp(mlib_image *src1dst,
                                         const mlib_image *src2,
                                         const mlib_s32 *alpha);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale mlib_ImageScale
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale(mlib_image *dst,
                               const mlib_image *src,
                               const mlib_s32 *alpha,
                               const mlib_s32 *beta,
                               mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale2 mlib_ImageScale2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale2(mlib_image *dst,
                                const mlib_image *src,
                                const mlib_d64 *alpha,
                                const mlib_d64 *beta);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale2_Inp mlib_ImageScale2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale2_Inp(mlib_image *srcdst,
                                    const mlib_d64 *alpha,
                                    const mlib_d64 *beta);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale_Fp mlib_ImageScale_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale_Fp(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_d64 *alpha,
                                  const mlib_d64 *beta);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale_Fp_Inp mlib_ImageScale_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale_Fp_Inp(mlib_image *srcdst,
                                      const mlib_d64 *alpha,
                                      const mlib_d64 *beta);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageScale_Inp mlib_ImageScale_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageScale_Inp(mlib_image *srcdst,
                                   const mlib_s32 *alpha,
                                   const mlib_s32 *beta,
                                   mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSqrShift mlib_ImageSqrShift
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSqrShift(mlib_image *dst,
                                  const mlib_image *src,
                                  mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSqrShift_Inp mlib_ImageSqrShift_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSqrShift_Inp(mlib_image *srcdst,
                                      mlib_s32 shift);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSqr_Fp mlib_ImageSqr_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSqr_Fp(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSqr_Fp_Inp mlib_ImageSqr_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSqr_Fp_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub mlib_ImageSub
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);

/* src1dst = src1dst - src2 */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub1_Fp_Inp mlib_ImageSub1_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub1_Fp_Inp(mlib_image *src1dst,
                                     const mlib_image *src2);

/* src1dst = src1dst - src2 */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub1_Inp mlib_ImageSub1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub1_Inp(mlib_image *src1dst,
                                  const mlib_image *src2);

/* src2dst = src1 - src2dst */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub2_Fp_Inp mlib_ImageSub2_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub2_Fp_Inp(mlib_image *src2dst,
                                     const mlib_image *src1);

/* src2dst = src1 - src2dst */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub2_Inp mlib_ImageSub2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub2_Inp(mlib_image *src2dst,
                                  const mlib_image *src1);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSub_Fp mlib_ImageSub_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSub_Fp(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);

/* Color Space Conversion ( color ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorConvert1 mlib_ImageColorConvert1
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorConvert1(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_d64 *cmat);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorConvert1_Fp mlib_ImageColorConvert1_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorConvert1_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          const mlib_d64 *cmat);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorConvert2 mlib_ImageColorConvert2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorConvert2(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_d64 *cmat,
                                       const mlib_d64 *offset);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorConvert2_Fp mlib_ImageColorConvert2_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorConvert2_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          const mlib_d64 *cmat,
                                          const mlib_d64 *offset);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorHSL2RGB mlib_ImageColorHSL2RGB
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorHSL2RGB(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorHSL2RGB_Fp mlib_ImageColorHSL2RGB_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorHSL2RGB_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorHSV2RGB mlib_ImageColorHSV2RGB
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorHSV2RGB(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorHSV2RGB_Fp mlib_ImageColorHSV2RGB_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorHSV2RGB_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2CIEMono mlib_ImageColorRGB2CIEMono
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2CIEMono(mlib_image *dst,
                                          const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2CIEMono_Fp mlib_ImageColorRGB2CIEMono_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2CIEMono_Fp(mlib_image *dst,
                                             const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2HSL mlib_ImageColorRGB2HSL
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2HSL(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2HSL_Fp mlib_ImageColorRGB2HSL_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2HSL_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2HSV mlib_ImageColorRGB2HSV
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2HSV(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2HSV_Fp mlib_ImageColorRGB2HSV_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2HSV_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2Mono mlib_ImageColorRGB2Mono
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2Mono(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_d64 *weight);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2Mono_Fp mlib_ImageColorRGB2Mono_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2Mono_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          const mlib_d64 *weight);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2XYZ mlib_ImageColorRGB2XYZ
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2XYZ(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2XYZ_Fp mlib_ImageColorRGB2XYZ_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2XYZ_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2YCC mlib_ImageColorRGB2YCC
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2YCC(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorRGB2YCC_Fp mlib_ImageColorRGB2YCC_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorRGB2YCC_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorXYZ2RGB mlib_ImageColorXYZ2RGB
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorXYZ2RGB(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorXYZ2RGB_Fp mlib_ImageColorXYZ2RGB_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorXYZ2RGB_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorYCC2RGB mlib_ImageColorYCC2RGB
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorYCC2RGB(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorYCC2RGB_Fp mlib_ImageColorYCC2RGB_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorYCC2RGB_Fp(mlib_image *dst,
                                         const mlib_image *src);

/* Image Creation, Deletion and Query ( common ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCreate mlib_ImageCreate
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_image * __mlib_ImageCreate(mlib_type type,
                                mlib_s32 channels,
                                mlib_s32 width,
                                mlib_s32 height);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCreateStruct mlib_ImageCreateStruct
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_image * __mlib_ImageCreateStruct(mlib_type type,
                                      mlib_s32 channels,
                                      mlib_s32 width,
                                      mlib_s32 height,
                                      mlib_s32 stride,
                                      const void *data);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCreateSubimage mlib_ImageCreateSubimage
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_image * __mlib_ImageCreateSubimage(mlib_image *img,
                                        mlib_s32 x,
                                        mlib_s32 y,
                                        mlib_s32 w,
                                        mlib_s32 h);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDelete mlib_ImageDelete
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
void  __mlib_ImageDelete(mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSetPaddings mlib_ImageSetPaddings
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSetPaddings(mlib_image *img,
                                     mlib_u8 left,
                                     mlib_u8 top,
                                     mlib_u8 right,
                                     mlib_u8 bottom);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSetFormat mlib_ImageSetFormat
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSetFormat(mlib_image *img,
                                   mlib_format format);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetType mlib_ImageGetType
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_type  __mlib_ImageGetType(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetChannels mlib_ImageGetChannels
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetChannels(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetWidth mlib_ImageGetWidth
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetWidth(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetHeight mlib_ImageGetHeight
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetHeight(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetStride mlib_ImageGetStride
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetStride(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetData mlib_ImageGetData
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static void * __mlib_ImageGetData(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetFlags mlib_ImageGetFlags
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetFlags(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetPaddings mlib_ImageGetPaddings
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_u8 * __mlib_ImageGetPaddings(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetBitOffset mlib_ImageGetBitOffset
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageGetBitOffset(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGetFormat mlib_ImageGetFormat
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_format  __mlib_ImageGetFormat(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotAligned2 mlib_ImageIsNotAligned2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotAligned2(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotAligned4 mlib_ImageIsNotAligned4
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotAligned4(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotAligned64 mlib_ImageIsNotAligned64
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotAligned64(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotAligned8 mlib_ImageIsNotAligned8
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotAligned8(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotHeight2X mlib_ImageIsNotHeight2X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotHeight2X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotHeight4X mlib_ImageIsNotHeight4X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotHeight4X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotHeight8X mlib_ImageIsNotHeight8X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotHeight8X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotOneDvector mlib_ImageIsNotOneDvector
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotOneDvector(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotStride8X mlib_ImageIsNotStride8X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotStride8X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotWidth2X mlib_ImageIsNotWidth2X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotWidth2X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotWidth4X mlib_ImageIsNotWidth4X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotWidth4X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsNotWidth8X mlib_ImageIsNotWidth8X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsNotWidth8X(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageIsUserAllocated mlib_ImageIsUserAllocated
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageIsUserAllocated(const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageTestFlags mlib_ImageTestFlags
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
static mlib_s32  __mlib_ImageTestFlags(const mlib_image *img,
                                       mlib_s32 flags);

/* Image Copying and Clearing ( copy ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageClear mlib_ImageClear
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageClear(mlib_image *img,
                               const mlib_s32 *color);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageClearEdge mlib_ImageClearEdge
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageClearEdge(mlib_image *img,
                                   mlib_s32 dx,
                                   mlib_s32 dy,
                                   const mlib_s32 *color);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageClearEdge_Fp mlib_ImageClearEdge_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageClearEdge_Fp(mlib_image *img,
                                      mlib_s32 dx,
                                      mlib_s32 dy,
                                      const mlib_d64 *color);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageClear_Fp mlib_ImageClear_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageClear_Fp(mlib_image *img,
                                  const mlib_d64 *color);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCopy mlib_ImageCopy
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCopy(mlib_image *dst,
                              const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCopyArea mlib_ImageCopyArea
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCopyArea(mlib_image *img,
                                  mlib_s32 x,
                                  mlib_s32 y,
                                  mlib_s32 w,
                                  mlib_s32 h,
                                  mlib_s32 dx,
                                  mlib_s32 dy);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCopyMask mlib_ImageCopyMask
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCopyMask(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_image *mask,
                                  const mlib_s32 *thresh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCopyMask_Fp mlib_ImageCopyMask_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCopyMask_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_image *mask,
                                     const mlib_d64 *thresh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCopySubimage mlib_ImageCopySubimage
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCopySubimage(mlib_image *dst,
                                      const mlib_image *src,
                                      mlib_s32 xd,
                                      mlib_s32 yd,
                                      mlib_s32 xs,
                                      mlib_s32 ys,
                                      mlib_s32 w,
                                      mlib_s32 h);

/* Data Fomat Conversion ( format ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageChannelCopy mlib_ImageChannelCopy
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageChannelCopy(mlib_image *dst,
                                     const mlib_image *src,
                                     mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageChannelExtract mlib_ImageChannelExtract
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageChannelExtract(mlib_image *dst,
                                        const mlib_image *src,
                                        mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageChannelInsert mlib_ImageChannelInsert
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageChannelInsert(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageChannelMerge mlib_ImageChannelMerge
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageChannelMerge(mlib_image *dst,
                                      const mlib_image ** srcs);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageChannelSplit mlib_ImageChannelSplit
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageChannelSplit(mlib_image ** dsts,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDataTypeConvert mlib_ImageDataTypeConvert
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDataTypeConvert(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageReformat mlib_ImageReformat
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageReformat(void **dstData,
                                  const void **srcData,
                                  mlib_s32 numChannels,
                                  mlib_s32 xSize,
                                  mlib_s32 ySize,
                                  mlib_type dstDataType,
                                  const mlib_s32 *dstBandoffsets,
                                  mlib_s32 dstScanlinestride,
                                  mlib_s32 dstPixelstride,
                                  mlib_type srcDataType,
                                  const mlib_s32 *srcBandoffsets,
                                  mlib_s32 srcScanlinestride,
                                  mlib_s32 srcPixelstride);

/* Fourier Transformation ( fourier ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFourierTransform mlib_ImageFourierTransform
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFourierTransform(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_fourier_mode mode);

/* Geometric Operations ( geom ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffine mlib_ImageAffine
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_status  __mlib_ImageAffine(mlib_image *dst,
                                const mlib_image *src,
                                const mlib_d64 *mtx,
                                mlib_filter filter,
                                mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineIndex mlib_ImageAffineIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineIndex(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *mtx,
                                     mlib_filter filter,
                                     mlib_edge edge,
                                     const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineTable mlib_ImageAffineTable
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineTable(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *mtx,
                                     const void *interp_table,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineTable_Fp mlib_ImageAffineTable_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineTable_Fp(mlib_image *dst,
                                        const mlib_image *src,
                                        const mlib_d64 *mtx,
                                        const void *interp_table,
                                        mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineTransform mlib_ImageAffineTransform
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineTransform(mlib_image *dst,
                                         const mlib_image *src,
                                         const mlib_d64 *mtx,
                                         mlib_filter filter,
                                         mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineTransformIndex mlib_ImageAffineTransformIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineTransformIndex(mlib_image *dst,
                                              const mlib_image *src,
                                              const mlib_d64 *mtx,
                                              mlib_filter filter,
                                              mlib_edge edge,
                                              const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffineTransform_Fp mlib_ImageAffineTransform_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffineTransform_Fp(mlib_image *dst,
                                            const mlib_image *src,
                                            const mlib_d64 *mtx,
                                            mlib_filter filter,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAffine_Fp mlib_ImageAffine_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAffine_Fp(mlib_image *dst,
                                   const mlib_image *src,
                                   const mlib_d64 *mtx,
                                   mlib_filter filter,
                                   mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFilteredSubsample mlib_ImageFilteredSubsample
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFilteredSubsample(mlib_image *dst,
                                           const mlib_image *src,
                                           mlib_s32 scaleX,
                                           mlib_s32 scaleY,
                                           mlib_s32 transX,
                                           mlib_s32 transY,
                                           const mlib_d64 *hKernel,
                                           const mlib_d64 *vKernel,
                                           mlib_s32 hSize,
                                           mlib_s32 vSize,
                                           mlib_s32 hParity,
                                           mlib_s32 vParity,
                                           mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFilteredSubsample_Fp mlib_ImageFilteredSubsample_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFilteredSubsample_Fp(mlib_image *dst,
                                              const mlib_image *src,
                                              mlib_s32 scaleX,
                                              mlib_s32 scaleY,
                                              mlib_s32 transX,
                                              mlib_s32 transY,
                                              const mlib_d64 *hKernel,
                                              const mlib_d64 *vKernel,
                                              mlib_s32 hSize,
                                              mlib_s32 vSize,
                                              mlib_s32 hParity,
                                              mlib_s32 vParity,
                                              mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipAntiDiag mlib_ImageFlipAntiDiag
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipAntiDiag(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipAntiDiag_Fp mlib_ImageFlipAntiDiag_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipAntiDiag_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipMainDiag mlib_ImageFlipMainDiag
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipMainDiag(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipMainDiag_Fp mlib_ImageFlipMainDiag_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipMainDiag_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipX mlib_ImageFlipX
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipX(mlib_image *dst,
                               const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipX_Fp mlib_ImageFlipX_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipX_Fp(mlib_image *dst,
                                  const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipY mlib_ImageFlipY
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipY(mlib_image *dst,
                               const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageFlipY_Fp mlib_ImageFlipY_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageFlipY_Fp(mlib_image *dst,
                                  const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGridWarp mlib_ImageGridWarp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGridWarp(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_f32 *xWarpPos,
                                  const mlib_f32 *yWarpPos,
                                  mlib_d64 postShiftX,
                                  mlib_d64 postShiftY,
                                  mlib_s32 xStart,
                                  mlib_s32 xStep,
                                  mlib_s32 xNumCells,
                                  mlib_s32 yStart,
                                  mlib_s32 yStep,
                                  mlib_s32 yNumCells,
                                  mlib_filter filter,
                                  mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGridWarpTable mlib_ImageGridWarpTable
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGridWarpTable(mlib_image *dst,
                                       const mlib_image *src,
                                       const mlib_f32 *xWarpPos,
                                       const mlib_f32 *yWarpPos,
                                       mlib_d64 postShiftX,
                                       mlib_d64 postShiftY,
                                       mlib_s32 xStart,
                                       mlib_s32 xStep,
                                       mlib_s32 xNumCells,
                                       mlib_s32 yStart,
                                       mlib_s32 yStep,
                                       mlib_s32 yNumCells,
                                       const void *table,
                                       mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGridWarpTable_Fp mlib_ImageGridWarpTable_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGridWarpTable_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          const mlib_f32 *xWarpPos,
                                          const mlib_f32 *yWarpPos,
                                          mlib_d64 postShiftX,
                                          mlib_d64 postShiftY,
                                          mlib_s32 xStart,
                                          mlib_s32 xStep,
                                          mlib_s32 xNumCells,
                                          mlib_s32 yStart,
                                          mlib_s32 yStep,
                                          mlib_s32 yNumCells,
                                          const void *table,
                                          mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGridWarp_Fp mlib_ImageGridWarp_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGridWarp_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_f32 *xWarpPos,
                                     const mlib_f32 *yWarpPos,
                                     mlib_d64 postShiftX,
                                     mlib_d64 postShiftY,
                                     mlib_s32 xStart,
                                     mlib_s32 xStep,
                                     mlib_s32 xNumCells,
                                     mlib_s32 yStart,
                                     mlib_s32 yStep,
                                     mlib_s32 yNumCells,
                                     mlib_filter filter,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInterpTableCreate mlib_ImageInterpTableCreate
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
void * __mlib_ImageInterpTableCreate(mlib_type type,
                                     mlib_s32 width,
                                     mlib_s32 height,
                                     mlib_s32 leftPadding,
                                     mlib_s32 topPadding,
                                     mlib_s32 subsampleBitsH,
                                     mlib_s32 subsampleBitsV,
                                     mlib_s32 precisionBits,
                                     const void *dataH,
                                     const void *dataV);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageInterpTableDelete mlib_ImageInterpTableDelete
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
void  __mlib_ImageInterpTableDelete(void *interp_table);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImagePolynomialWarp mlib_ImagePolynomialWarp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImagePolynomialWarp(mlib_image *dst,
                                        const mlib_image *src,
                                        const mlib_d64 *xCoeffs,
                                        const mlib_d64 *yCoeffs,
                                        mlib_s32 n,
                                        mlib_d64 preShiftX,
                                        mlib_d64 preShiftY,
                                        mlib_d64 postShiftX,
                                        mlib_d64 postShiftY,
                                        mlib_d64 preScaleX,
                                        mlib_d64 preScaleY,
                                        mlib_d64 postScaleX,
                                        mlib_d64 postScaleY,
                                        mlib_filter filter,
                                        mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImagePolynomialWarpTable mlib_ImagePolynomialWarpTable
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImagePolynomialWarpTable(mlib_image *dst,
                                             const mlib_image *src,
                                             const mlib_d64 *xCoeffs,
                                             const mlib_d64 *yCoeffs,
                                             mlib_s32 n,
                                             mlib_d64 preShiftX,
                                             mlib_d64 preShiftY,
                                             mlib_d64 postShiftX,
                                             mlib_d64 postShiftY,
                                             mlib_d64 preScaleX,
                                             mlib_d64 preScaleY,
                                             mlib_d64 postScaleX,
                                             mlib_d64 postScaleY,
                                             const void *interp_table,
                                             mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImagePolynomialWarpTable_Fp mlib_ImagePolynomialWarpTable_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImagePolynomialWarpTable_Fp(mlib_image *dst,
                                                const mlib_image *src,
                                                const mlib_d64 *xCoeffs,
                                                const mlib_d64 *yCoeffs,
                                                mlib_s32 n,
                                                mlib_d64 preShiftX,
                                                mlib_d64 preShiftY,
                                                mlib_d64 postShiftX,
                                                mlib_d64 postShiftY,
                                                mlib_d64 preScaleX,
                                                mlib_d64 preScaleY,
                                                mlib_d64 postScaleX,
                                                mlib_d64 postScaleY,
                                                const void *interp_table,
                                                mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImagePolynomialWarp_Fp mlib_ImagePolynomialWarp_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImagePolynomialWarp_Fp(mlib_image *dst,
                                           const mlib_image *src,
                                           const mlib_d64 *xCoeffs,
                                           const mlib_d64 *yCoeffs,
                                           mlib_s32 n,
                                           mlib_d64 preShiftX,
                                           mlib_d64 preShiftY,
                                           mlib_d64 postShiftX,
                                           mlib_d64 postShiftY,
                                           mlib_d64 preScaleX,
                                           mlib_d64 preScaleY,
                                           mlib_d64 postScaleX,
                                           mlib_d64 postScaleY,
                                           mlib_filter filter,
                                           mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate mlib_ImageRotate
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate(mlib_image *dst,
                                const mlib_image *src,
                                mlib_d64 angle,
                                mlib_d64 xcenter,
                                mlib_d64 ycenter,
                                mlib_filter filter,
                                mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate180 mlib_ImageRotate180
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate180(mlib_image *dst,
                                   const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate180_Fp mlib_ImageRotate180_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate180_Fp(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate270 mlib_ImageRotate270
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate270(mlib_image *dst,
                                   const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate270_Fp mlib_ImageRotate270_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate270_Fp(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate90 mlib_ImageRotate90
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate90(mlib_image *dst,
                                  const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate90_Fp mlib_ImageRotate90_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate90_Fp(mlib_image *dst,
                                     const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotateIndex mlib_ImageRotateIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotateIndex(mlib_image *dst,
                                     const mlib_image *src,
                                     mlib_d64 angle,
                                     mlib_d64 xcenter,
                                     mlib_d64 ycenter,
                                     mlib_filter filter,
                                     mlib_edge edge,
                                     const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRotate_Fp mlib_ImageRotate_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRotate_Fp(mlib_image *dst,
                                   const mlib_image *src,
                                   mlib_d64 angle,
                                   mlib_d64 xcenter,
                                   mlib_d64 ycenter,
                                   mlib_filter filter,
                                   mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSubsampleAverage mlib_ImageSubsampleAverage
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSubsampleAverage(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_d64 scalex,
                                          mlib_d64 scaley);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSubsampleAverage_Fp mlib_ImageSubsampleAverage_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSubsampleAverage_Fp(mlib_image *dst,
                                             const mlib_image *src,
                                             mlib_d64 scalex,
                                             mlib_d64 scaley);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSubsampleBinaryToGray mlib_ImageSubsampleBinaryToGray
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSubsampleBinaryToGray(mlib_image *dst,
                                               const mlib_image *src,
                                               mlib_d64 xscale,
                                               mlib_d64 yscale,
                                               const mlib_u8 *lutGray);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomIn2X mlib_ImageZoomIn2X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomIn2X(mlib_image *dst,
                                  const mlib_image *src,
                                  mlib_filter filter,
                                  mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomIn2XIndex mlib_ImageZoomIn2XIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomIn2XIndex(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_filter filter,
                                       mlib_edge edge,
                                       const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomIn2X_Fp mlib_ImageZoomIn2X_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomIn2X_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     mlib_filter filter,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomOut2X mlib_ImageZoomOut2X
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomOut2X(mlib_image *dst,
                                   const mlib_image *src,
                                   mlib_filter filter,
                                   mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomOut2XIndex mlib_ImageZoomOut2XIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomOut2XIndex(mlib_image *dst,
                                        const mlib_image *src,
                                        mlib_filter filter,
                                        mlib_edge edge,
                                        const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomOut2X_Fp mlib_ImageZoomOut2X_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomOut2X_Fp(mlib_image *dst,
                                      const mlib_image *src,
                                      mlib_filter filter,
                                      mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomTranslate mlib_ImageZoomTranslate
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomTranslate(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_d64 zoomx,
                                       mlib_d64 zoomy,
                                       mlib_d64 tx,
                                       mlib_d64 ty,
                                       mlib_filter filter,
                                       mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomTranslateTable mlib_ImageZoomTranslateTable
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomTranslateTable(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_d64 zoomx,
                                            mlib_d64 zoomy,
                                            mlib_d64 tx,
                                            mlib_d64 ty,
                                            const void *interp_table,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomTranslateTable_Fp mlib_ImageZoomTranslateTable_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomTranslateTable_Fp(mlib_image *dst,
                                               const mlib_image *src,
                                               mlib_d64 zoomx,
                                               mlib_d64 zoomy,
                                               mlib_d64 tx,
                                               mlib_d64 ty,
                                               const void *interp_table,
                                               mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomTranslateToGray mlib_ImageZoomTranslateToGray
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomTranslateToGray(mlib_image *dst,
                                             const mlib_image *src,
                                             mlib_d64 zoomx,
                                             mlib_d64 zoomy,
                                             mlib_d64 tx,
                                             mlib_d64 ty,
                                             mlib_filter filter,
                                             mlib_edge edge,
                                             const mlib_s32 *ghigh,
                                             const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomTranslate_Fp mlib_ImageZoomTranslate_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomTranslate_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_d64 zoomx,
                                          mlib_d64 zoomy,
                                          mlib_d64 tx,
                                          mlib_d64 ty,
                                          mlib_filter filter,
                                          mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoom mlib_ImageZoom
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoom(mlib_image *dst,
                              const mlib_image *src,
                              mlib_d64 zoomx,
                              mlib_d64 zoomy,
                              mlib_filter filter,
                              mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoomIndex mlib_ImageZoomIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoomIndex(mlib_image *dst,
                                   const mlib_image *src,
                                   mlib_d64 zoomx,
                                   mlib_d64 zoomy,
                                   mlib_filter filter,
                                   mlib_edge edge,
                                   const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageZoom_Fp mlib_ImageZoom_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageZoom_Fp(mlib_image *dst,
                                 const mlib_image *src,
                                 mlib_d64 zoomx,
                                 mlib_d64 zoomy,
                                 mlib_filter filter,
                                 mlib_edge edge);

/* Logical Operations ( logic ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAnd mlib_ImageAnd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAnd(mlib_image *dst,
                             const mlib_image *src1,
                             const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAndNot mlib_ImageAndNot
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAndNot(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);

/* src1dst = src1dst & (~src2) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAndNot1_Inp mlib_ImageAndNot1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAndNot1_Inp(mlib_image *src1dst,
                                     const mlib_image *src2);

/* src2dst = src1 & (~src2dst) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAndNot2_Inp mlib_ImageAndNot2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAndNot2_Inp(mlib_image *src2dst,
                                     const mlib_image *src1);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAnd_Inp mlib_ImageAnd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAnd_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAnd mlib_ImageConstAnd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAnd(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAndNot mlib_ImageConstAndNot
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAndNot(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_s32 *c);

/* srcdst = (~srcdst) & c */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAndNot_Inp mlib_ImageConstAndNot_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAndNot_Inp(mlib_image *srcdst,
                                         const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstAnd_Inp mlib_ImageConstAnd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstAnd_Inp(mlib_image *srcdst,
                                      const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotAnd mlib_ImageConstNotAnd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotAnd(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotAnd_Inp mlib_ImageConstNotAnd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotAnd_Inp(mlib_image *srcdst,
                                         const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotOr mlib_ImageConstNotOr
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotOr(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotOr_Inp mlib_ImageConstNotOr_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotOr_Inp(mlib_image *srcdst,
                                        const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotXor mlib_ImageConstNotXor
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotXor(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstNotXor_Inp mlib_ImageConstNotXor_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstNotXor_Inp(mlib_image *srcdst,
                                         const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstOr mlib_ImageConstOr
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstOr(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstOrNot mlib_ImageConstOrNot
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstOrNot(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_s32 *c);

/* srcdst = (~srcdst) | c */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstOrNot_Inp mlib_ImageConstOrNot_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstOrNot_Inp(mlib_image *srcdst,
                                        const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstOr_Inp mlib_ImageConstOr_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstOr_Inp(mlib_image *srcdst,
                                     const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstXor mlib_ImageConstXor
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstXor(mlib_image *dst,
                                  mlib_image *src,
                                  mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConstXor_Inp mlib_ImageConstXor_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConstXor_Inp(mlib_image *srcdst,
                                      const mlib_s32 *c);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNot mlib_ImageNot
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNot(mlib_image *dst,
                             const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotAnd mlib_ImageNotAnd
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotAnd(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotAnd_Inp mlib_ImageNotAnd_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotAnd_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotOr mlib_ImageNotOr
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotOr(mlib_image *dst,
                               const mlib_image *src1,
                               const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotOr_Inp mlib_ImageNotOr_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotOr_Inp(mlib_image *src1dst,
                                   const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotXor mlib_ImageNotXor
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotXor(mlib_image *dst,
                                const mlib_image *src1,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNotXor_Inp mlib_ImageNotXor_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNotXor_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageNot_Inp mlib_ImageNot_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageNot_Inp(mlib_image *srcdst);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageOr mlib_ImageOr
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageOr(mlib_image *dst,
                            const mlib_image *src1,
                            const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageOrNot mlib_ImageOrNot
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageOrNot(mlib_image *dst,
                               const mlib_image *src1,
                               const mlib_image *src2);

/* src1dst = src1dst | (~src2) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageOrNot1_Inp mlib_ImageOrNot1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageOrNot1_Inp(mlib_image *src1dst,
                                    const mlib_image *src2);

/* src2dst = src1 | (~src2dst) */

#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageOrNot2_Inp mlib_ImageOrNot2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageOrNot2_Inp(mlib_image *src2dst,
                                    const mlib_image *src1);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageOr_Inp mlib_ImageOr_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageOr_Inp(mlib_image *src1dst,
                                const mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageXor mlib_ImageXor
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageXor(mlib_image *dst,
                             mlib_image *src1,
                             mlib_image *src2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageXor_Inp mlib_ImageXor_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageXor_Inp(mlib_image *src1dst,
                                 const mlib_image *src2);

/* Radiometric Operations ( radio ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorTrue2IndexInit mlib_ImageColorTrue2IndexInit
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorTrue2IndexInit(void **colormap,
                                             mlib_s32 bits,
                                             mlib_type intype,
                                             mlib_type outtype,
                                             mlib_s32 channels,
                                             mlib_s32 entries,
                                             mlib_s32 offset,
                                             const void **table);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorTrue2Index mlib_ImageColorTrue2Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorTrue2Index(mlib_image *dst,
                                         const mlib_image *src,
                                         const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorTrue2IndexFree mlib_ImageColorTrue2IndexFree
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
void  __mlib_ImageColorTrue2IndexFree(void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorDitherInit mlib_ImageColorDitherInit
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorDitherInit(void **colormap,
                                         const mlib_s32 *dimensions,
                                         mlib_type intype,
                                         mlib_type outtype,
                                         mlib_s32 channels,
                                         mlib_s32 entries,
                                         mlib_s32 offset,
                                         void **lut);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorDitherFree mlib_ImageColorDitherFree
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
void  __mlib_ImageColorDitherFree(void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorErrorDiffusion3x3 mlib_ImageColorErrorDiffusion3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorErrorDiffusion3x3(mlib_image *dst,
                                                const mlib_image *src,
                                                const mlib_s32 *kernel,
                                                mlib_s32 scale,
                                                const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorErrorDiffusionMxN mlib_ImageColorErrorDiffusionMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorErrorDiffusionMxN(mlib_image *dst,
                                                const mlib_image *src,
                                                const mlib_s32 *kernel,
                                                mlib_s32 m,
                                                mlib_s32 n,
                                                mlib_s32 dm,
                                                mlib_s32 dn,
                                                mlib_s32 scale,
                                                const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorOrderedDither8x8 mlib_ImageColorOrderedDither8x8
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorOrderedDither8x8(mlib_image *dst,
                                               const mlib_image *src,
                                               const mlib_s32 *dmask,
                                               mlib_s32 scale,
                                               const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorOrderedDitherMxN mlib_ImageColorOrderedDitherMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorOrderedDitherMxN(mlib_image *dst,
                                               const mlib_image *src,
                                               const mlib_s32 **dmask,
                                               mlib_s32 m,
                                               mlib_s32 n,
                                               mlib_s32 scale,
                                               const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorReplace mlib_ImageColorReplace
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorReplace(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *color1,
                                      const mlib_s32 *color2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorReplace_Fp mlib_ImageColorReplace_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorReplace_Fp(mlib_image *dst,
                                         const mlib_image *src,
                                         const mlib_d64 *color1,
                                         const mlib_d64 *color2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorReplace_Fp_Inp mlib_ImageColorReplace_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorReplace_Fp_Inp(mlib_image *srcdst,
                                             const mlib_d64 *color1,
                                             const mlib_d64 *color2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageColorReplace_Inp mlib_ImageColorReplace_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageColorReplace_Inp(mlib_image *srcdst,
                                          const mlib_s32 *color1,
                                          const mlib_s32 *color2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageHistogram mlib_ImageHistogram
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageHistogram(mlib_s32 ** histo,
                                   const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageHistogram2 mlib_ImageHistogram2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageHistogram2(mlib_s32 ** histo,
                                    const mlib_image *img,
                                    const mlib_s32 *numBins,
                                    const mlib_s32 *lowValue,
                                    const mlib_s32 *highValue,
                                    mlib_s32 xStart,
                                    mlib_s32 yStart,
                                    mlib_s32 xPeriod,
                                    mlib_s32 yPeriod);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLookUp mlib_ImageLookUp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_status  __mlib_ImageLookUp(mlib_image *dst,
                                const mlib_image *src,
                                const void **table);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLookUp2 mlib_ImageLookUp2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLookUp2(mlib_image *dst,
                                 const mlib_image *src,
                                 const void **table,
                                 const mlib_s32 *offsets,
                                 mlib_s32 channels);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLookUpMask mlib_ImageLookUpMask
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLookUpMask(mlib_image *dst,
                                    const mlib_image *src,
                                    const void **table,
                                    mlib_s32 channels,
                                    mlib_s32 cmask);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageLookUp_Inp mlib_ImageLookUp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageLookUp_Inp(mlib_image *srcdst,
                                    const void **table);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh1 mlib_ImageThresh1
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh1(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *thresh,
                                 const mlib_s32 *ghigh,
                                 const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh1_Fp mlib_ImageThresh1_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh1_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *thresh,
                                    const mlib_d64 *ghigh,
                                    const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh1_Fp_Inp mlib_ImageThresh1_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh1_Fp_Inp(mlib_image *srcdst,
                                        const mlib_d64 *thresh,
                                        const mlib_d64 *ghigh,
                                        const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh1_Inp mlib_ImageThresh1_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh1_Inp(mlib_image *srcdst,
                                     const mlib_s32 *thresh,
                                     const mlib_s32 *ghigh,
                                     const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh2 mlib_ImageThresh2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh2(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *thresh,
                                 const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh2_Fp mlib_ImageThresh2_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh2_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *thresh,
                                    const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh2_Fp_Inp mlib_ImageThresh2_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh2_Fp_Inp(mlib_image *srcdst,
                                        const mlib_d64 *thresh,
                                        const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh2_Inp mlib_ImageThresh2_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh2_Inp(mlib_image *srcdst,
                                     const mlib_s32 *thresh,
                                     const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh3 mlib_ImageThresh3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh3(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *thresh,
                                 const mlib_s32 *ghigh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh3_Fp mlib_ImageThresh3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh3_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *thresh,
                                    const mlib_d64 *ghigh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh3_Fp_Inp mlib_ImageThresh3_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh3_Fp_Inp(mlib_image *srcdst,
                                        const mlib_d64 *thresh,
                                        const mlib_d64 *ghigh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh3_Inp mlib_ImageThresh3_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh3_Inp(mlib_image *srcdst,
                                     const mlib_s32 *thresh,
                                     const mlib_s32 *ghigh);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh4 mlib_ImageThresh4
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh4(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *thigh,
                                 const mlib_s32 *tlow,
                                 const mlib_s32 *ghigh,
                                 const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh4_Fp mlib_ImageThresh4_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh4_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *thigh,
                                    const mlib_d64 *tlow,
                                    const mlib_d64 *ghigh,
                                    const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh4_Fp_Inp mlib_ImageThresh4_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh4_Fp_Inp(mlib_image *srcdst,
                                        const mlib_d64 *thigh,
                                        const mlib_d64 *tlow,
                                        const mlib_d64 *ghigh,
                                        const mlib_d64 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh4_Inp mlib_ImageThresh4_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh4_Inp(mlib_image *srcdst,
                                     const mlib_s32 *thigh,
                                     const mlib_s32 *tlow,
                                     const mlib_s32 *ghigh,
                                     const mlib_s32 *glow);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh5 mlib_ImageThresh5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh5(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *thigh,
                                 const mlib_s32 *tlow,
                                 const mlib_s32 *gmid);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh5_Fp mlib_ImageThresh5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh5_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *thigh,
                                    const mlib_d64 *tlow,
                                    const mlib_d64 *gmid);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh5_Fp_Inp mlib_ImageThresh5_Fp_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh5_Fp_Inp(mlib_image *srcdst,
                                        const mlib_d64 *thigh,
                                        const mlib_d64 *tlow,
                                        const mlib_d64 *gmid);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageThresh5_Inp mlib_ImageThresh5_Inp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageThresh5_Inp(mlib_image *srcdst,
                                     const mlib_s32 *thigh,
                                     const mlib_s32 *tlow,
                                     const mlib_s32 *gmid);

/* Linear and Not-Linear Spatial Operations, Morphological Operations ( spatial ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv2x2 mlib_ImageConv2x2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv2x2(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv2x2Index mlib_ImageConv2x2Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv2x2Index(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv2x2_Fp mlib_ImageConv2x2_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv2x2_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv3x3 mlib_ImageConv3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv3x3(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv3x3Index mlib_ImageConv3x3Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv3x3Index(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv3x3_Fp mlib_ImageConv3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv3x3_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv4x4 mlib_ImageConv4x4
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv4x4(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv4x4Index mlib_ImageConv4x4Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv4x4Index(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv4x4_Fp mlib_ImageConv4x4_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv4x4_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv5x5 mlib_ImageConv5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv5x5(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv5x5Index mlib_ImageConv5x5Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv5x5Index(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv5x5_Fp mlib_ImageConv5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv5x5_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv7x7 mlib_ImageConv7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv7x7(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv7x7Index mlib_ImageConv7x7Index
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv7x7Index(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConv7x7_Fp mlib_ImageConv7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConv7x7_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvKernelConvert mlib_ImageConvKernelConvert
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_status  __mlib_ImageConvKernelConvert(mlib_s32 *ikernel,
                                           mlib_s32 *iscale,
                                           const mlib_d64 *fkernel,
                                           mlib_s32 m,
                                           mlib_s32 n,
                                           mlib_type type);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvMxN mlib_ImageConvMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
J2D_MLIB_PUBLIC
mlib_status  __mlib_ImageConvMxN(mlib_image *dst,
                                 const mlib_image *src,
                                 const mlib_s32 *kernel,
                                 mlib_s32 m,
                                 mlib_s32 n,
                                 mlib_s32 dm,
                                 mlib_s32 dn,
                                 mlib_s32 scale,
                                 mlib_s32 cmask,
                                 mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvMxNIndex mlib_ImageConvMxNIndex
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConvMxNIndex(mlib_image *dst,
                                      const mlib_image *src,
                                      const mlib_s32 *kernel,
                                      mlib_s32 m,
                                      mlib_s32 n,
                                      mlib_s32 dm,
                                      mlib_s32 dn,
                                      mlib_s32 scale,
                                      mlib_edge edge,
                                      const void *colormap);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvMxN_Fp mlib_ImageConvMxN_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConvMxN_Fp(mlib_image *dst,
                                    const mlib_image *src,
                                    const mlib_d64 *kernel,
                                    mlib_s32 m,
                                    mlib_s32 n,
                                    mlib_s32 dm,
                                    mlib_s32 dn,
                                    mlib_s32 cmask,
                                    mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvolveMxN mlib_ImageConvolveMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConvolveMxN(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *kernel,
                                     mlib_s32 m,
                                     mlib_s32 n,
                                     mlib_s32 dm,
                                     mlib_s32 dn,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageConvolveMxN_Fp mlib_ImageConvolveMxN_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageConvolveMxN_Fp(mlib_image *dst,
                                        const mlib_image *src,
                                        const mlib_d64 *kernel,
                                        mlib_s32 m,
                                        mlib_s32 n,
                                        mlib_s32 dm,
                                        mlib_s32 dn,
                                        mlib_s32 cmask,
                                        mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDilate4 mlib_ImageDilate4
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDilate4(mlib_image *dst,
                                 const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDilate4_Fp mlib_ImageDilate4_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDilate4_Fp(mlib_image *dst,
                                    const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDilate8 mlib_ImageDilate8
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDilate8(mlib_image *dst,
                                 const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageDilate8_Fp mlib_ImageDilate8_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageDilate8_Fp(mlib_image *dst,
                                    const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageErode4 mlib_ImageErode4
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageErode4(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageErode4_Fp mlib_ImageErode4_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageErode4_Fp(mlib_image *dst,
                                   const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageErode8 mlib_ImageErode8
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageErode8(mlib_image *dst,
                                const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageErode8_Fp mlib_ImageErode8_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageErode8_Fp(mlib_image *dst,
                                   const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGradient3x3 mlib_ImageGradient3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGradient3x3(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *hmask,
                                     const mlib_d64 *vmask,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGradient3x3_Fp mlib_ImageGradient3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGradient3x3_Fp(mlib_image *dst,
                                        const mlib_image *src,
                                        const mlib_d64 *hmask,
                                        const mlib_d64 *vmask,
                                        mlib_s32 cmask,
                                        mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGradientMxN mlib_ImageGradientMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGradientMxN(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *hmask,
                                     const mlib_d64 *vmask,
                                     mlib_s32 m,
                                     mlib_s32 n,
                                     mlib_s32 dm,
                                     mlib_s32 dn,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageGradientMxN_Fp mlib_ImageGradientMxN_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageGradientMxN_Fp(mlib_image *dst,
                                        const mlib_image *src,
                                        const mlib_d64 *hmask,
                                        const mlib_d64 *vmask,
                                        mlib_s32 m,
                                        mlib_s32 n,
                                        mlib_s32 dm,
                                        mlib_s32 dn,
                                        mlib_s32 cmask,
                                        mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter3x3 mlib_ImageMaxFilter3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter3x3(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter3x3_Fp mlib_ImageMaxFilter3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter3x3_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter5x5 mlib_ImageMaxFilter5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter5x5(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter5x5_Fp mlib_ImageMaxFilter5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter5x5_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter7x7 mlib_ImageMaxFilter7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter7x7(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaxFilter7x7_Fp mlib_ImageMaxFilter7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaxFilter7x7_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter3x3 mlib_ImageMedianFilter3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter3x3(mlib_image *dst,
                                         const mlib_image *src,
                                         mlib_median_mask mmask,
                                         mlib_s32 cmask,
                                         mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter3x3_Fp mlib_ImageMedianFilter3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter3x3_Fp(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter3x3_US mlib_ImageMedianFilter3x3_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter3x3_US(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge,
                                            mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter5x5 mlib_ImageMedianFilter5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter5x5(mlib_image *dst,
                                         const mlib_image *src,
                                         mlib_median_mask mmask,
                                         mlib_s32 cmask,
                                         mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter5x5_Fp mlib_ImageMedianFilter5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter5x5_Fp(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter5x5_US mlib_ImageMedianFilter5x5_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter5x5_US(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge,
                                            mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter7x7 mlib_ImageMedianFilter7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter7x7(mlib_image *dst,
                                         const mlib_image *src,
                                         mlib_median_mask mmask,
                                         mlib_s32 cmask,
                                         mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter7x7_Fp mlib_ImageMedianFilter7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter7x7_Fp(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilter7x7_US mlib_ImageMedianFilter7x7_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilter7x7_US(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge,
                                            mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilterMxN mlib_ImageMedianFilterMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilterMxN(mlib_image *dst,
                                         const mlib_image *src,
                                         mlib_s32 m,
                                         mlib_s32 n,
                                         mlib_median_mask mmask,
                                         mlib_s32 cmask,
                                         mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilterMxN_Fp mlib_ImageMedianFilterMxN_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilterMxN_Fp(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_s32 m,
                                            mlib_s32 n,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMedianFilterMxN_US mlib_ImageMedianFilterMxN_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMedianFilterMxN_US(mlib_image *dst,
                                            const mlib_image *src,
                                            mlib_s32 m,
                                            mlib_s32 n,
                                            mlib_median_mask mmask,
                                            mlib_s32 cmask,
                                            mlib_edge edge,
                                            mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter3x3 mlib_ImageMinFilter3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter3x3(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter3x3_Fp mlib_ImageMinFilter3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter3x3_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter5x5 mlib_ImageMinFilter5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter5x5(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter5x5_Fp mlib_ImageMinFilter5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter5x5_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter7x7 mlib_ImageMinFilter7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter7x7(mlib_image *dst,
                                      const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinFilter7x7_Fp mlib_ImageMinFilter7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinFilter7x7_Fp(mlib_image *dst,
                                         const mlib_image *src);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter3x3 mlib_ImageRankFilter3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter3x3(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter3x3_Fp mlib_ImageRankFilter3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter3x3_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter3x3_US mlib_ImageRankFilter3x3_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter3x3_US(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank,
                                          mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter5x5 mlib_ImageRankFilter5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter5x5(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter5x5_Fp mlib_ImageRankFilter5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter5x5_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter5x5_US mlib_ImageRankFilter5x5_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter5x5_US(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank,
                                          mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter7x7 mlib_ImageRankFilter7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter7x7(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter7x7_Fp mlib_ImageRankFilter7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter7x7_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilter7x7_US mlib_ImageRankFilter7x7_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilter7x7_US(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 rank,
                                          mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilterMxN mlib_ImageRankFilterMxN
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilterMxN(mlib_image *dst,
                                       const mlib_image *src,
                                       mlib_s32 m,
                                       mlib_s32 n,
                                       mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilterMxN_Fp mlib_ImageRankFilterMxN_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilterMxN_Fp(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 m,
                                          mlib_s32 n,
                                          mlib_s32 rank);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageRankFilterMxN_US mlib_ImageRankFilterMxN_US
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageRankFilterMxN_US(mlib_image *dst,
                                          const mlib_image *src,
                                          mlib_s32 m,
                                          mlib_s32 n,
                                          mlib_s32 rank,
                                          mlib_s32 bits);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv3x3 mlib_ImageSConv3x3
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv3x3(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *hkernel,
                                  const mlib_s32 *vkernel,
                                  mlib_s32 scale,
                                  mlib_s32 cmask,
                                  mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv3x3_Fp mlib_ImageSConv3x3_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv3x3_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *hkernel,
                                     const mlib_d64 *vkernel,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv5x5 mlib_ImageSConv5x5
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv5x5(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *hkernel,
                                  const mlib_s32 *vkernel,
                                  mlib_s32 scale,
                                  mlib_s32 cmask,
                                  mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv5x5_Fp mlib_ImageSConv5x5_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv5x5_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *hkernel,
                                     const mlib_d64 *vkernel,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv7x7 mlib_ImageSConv7x7
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv7x7(mlib_image *dst,
                                  const mlib_image *src,
                                  const mlib_s32 *hkernel,
                                  const mlib_s32 *vkernel,
                                  mlib_s32 scale,
                                  mlib_s32 cmask,
                                  mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConv7x7_Fp mlib_ImageSConv7x7_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConv7x7_Fp(mlib_image *dst,
                                     const mlib_image *src,
                                     const mlib_d64 *hkernel,
                                     const mlib_d64 *vkernel,
                                     mlib_s32 cmask,
                                     mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSConvKernelConvert mlib_ImageSConvKernelConvert
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSConvKernelConvert(mlib_s32 *ihkernel,
                                            mlib_s32 *ivkernel,
                                            mlib_s32 *iscale,
                                            const mlib_d64 *fhkernel,
                                            const mlib_d64 *fvkernel,
                                            mlib_s32 m,
                                            mlib_s32 n,
                                            mlib_type type);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSobel mlib_ImageSobel
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSobel(mlib_image *dst,
                               const mlib_image *src,
                               mlib_s32 cmask,
                               mlib_edge edge);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageSobel_Fp mlib_ImageSobel_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageSobel_Fp(mlib_image *dst,
                                  const mlib_image *src,
                                  mlib_s32 cmask,
                                  mlib_edge edge);

/* Image Staistics ( stat ) */


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAutoCorrel mlib_ImageAutoCorrel
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAutoCorrel(mlib_d64 *correl,
                                    const mlib_image *img,
                                    mlib_s32 dx,
                                    mlib_s32 dy);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageAutoCorrel_Fp mlib_ImageAutoCorrel_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageAutoCorrel_Fp(mlib_d64 *correl,
                                       const mlib_image *img,
                                       mlib_s32 dx,
                                       mlib_s32 dy);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCrossCorrel mlib_ImageCrossCorrel
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCrossCorrel(mlib_d64 *correl,
                                     const mlib_image *img1,
                                     const mlib_image *img2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageCrossCorrel_Fp mlib_ImageCrossCorrel_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageCrossCorrel_Fp(mlib_d64 *correl,
                                        const mlib_image *img1,
                                        const mlib_image *img2);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExtrema2 mlib_ImageExtrema2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExtrema2(mlib_s32 *min,
                                  mlib_s32 *max,
                                  const mlib_image *img,
                                  mlib_s32 xStart,
                                  mlib_s32 yStart,
                                  mlib_s32 xPeriod,
                                  mlib_s32 yPeriod);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExtrema2_Fp mlib_ImageExtrema2_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExtrema2_Fp(mlib_d64 *min,
                                     mlib_d64 *max,
                                     const mlib_image *img,
                                     mlib_s32 xStart,
                                     mlib_s32 yStart,
                                     mlib_s32 xPeriod,
                                     mlib_s32 yPeriod);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExtremaLocations mlib_ImageExtremaLocations
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExtremaLocations(mlib_s32 *min,
                                          mlib_s32 *max,
                                          const mlib_image *img,
                                          mlib_s32 xStart,
                                          mlib_s32 yStart,
                                          mlib_s32 xPeriod,
                                          mlib_s32 yPeriod,
                                          mlib_s32 saveLocations,
                                          mlib_s32 maxRuns,
                                          mlib_s32 *minCounts,
                                          mlib_s32 *maxCounts,
                                          mlib_s32 **minLocations,
                                          mlib_s32 **maxLocations,
                                          mlib_s32 len);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageExtremaLocations_Fp mlib_ImageExtremaLocations_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageExtremaLocations_Fp(mlib_d64 *min,
                                             mlib_d64 *max,
                                             const mlib_image *img,
                                             mlib_s32 xStart,
                                             mlib_s32 yStart,
                                             mlib_s32 xPeriod,
                                             mlib_s32 yPeriod,
                                             mlib_s32 saveLocations,
                                             mlib_s32 maxRuns,
                                             mlib_s32 *minCounts,
                                             mlib_s32 *maxCounts,
                                             mlib_s32 **minLocations,
                                             mlib_s32 **maxLocations,
                                             mlib_s32 len);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaximum mlib_ImageMaximum
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaximum(mlib_s32 *max,
                                 const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMaximum_Fp mlib_ImageMaximum_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMaximum_Fp(mlib_d64 *max,
                                    const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMean mlib_ImageMean
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMean(mlib_d64 *mean,
                              const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMean_Fp mlib_ImageMean_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMean_Fp(mlib_d64 *mean,
                                 const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinimum mlib_ImageMinimum
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinimum(mlib_s32 *min,
                                 const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMinimum_Fp mlib_ImageMinimum_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMinimum_Fp(mlib_d64 *min,
                                    const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMoment2 mlib_ImageMoment2
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMoment2(mlib_d64 *moment,
                                 const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageMoment2_Fp mlib_ImageMoment2_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageMoment2_Fp(mlib_d64 *moment,
                                    const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageStdDev mlib_ImageStdDev
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageStdDev(mlib_d64 *sdev,
                                const mlib_image *img,
                                const mlib_d64 *mean);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageStdDev_Fp mlib_ImageStdDev_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageStdDev_Fp(mlib_d64 *sdev,
                                   const mlib_image *img,
                                   const mlib_d64 *mean);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageXProj mlib_ImageXProj
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageXProj(mlib_d64 *xproj,
                               const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageXProj_Fp mlib_ImageXProj_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageXProj_Fp(mlib_d64 *xproj,
                                  const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageYProj mlib_ImageYProj
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageYProj(mlib_d64 *yproj,
                               const mlib_image *img);


#if defined ( __MEDIALIB_OLD_NAMES )
#define __mlib_ImageYProj_Fp mlib_ImageYProj_Fp
#endif /* ! defined ( __MEDIALIB_OLD_NAMES ) */
mlib_status  __mlib_ImageYProj_Fp(mlib_d64 *yproj,
                                  const mlib_image *img);

#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __ORIG_MLIB_IMAGE_PROTO_H */
