Pillow/src/libImaging/Imaging.h

552 lines
22 KiB
C
Raw Normal View History

2010-07-31 06:52:47 +04:00
/*
* The Python Imaging Library
* $Id$
*
2010-07-31 06:52:47 +04:00
* declarations for the imaging core library
*
* Copyright (c) 1997-2005 by Secret Labs AB
* Copyright (c) 1995-2005 by Fredrik Lundh
*
* See the README file for information on usage and redistribution.
*/
#include "ImPlatform.h"
#if defined(__cplusplus)
extern "C" {
#endif
#ifndef M_PI
2017-09-16 20:46:09 +03:00
#define M_PI 3.1415926535897932384626433832795
2010-07-31 06:52:47 +04:00
#endif
/* -------------------------------------------------------------------- */
/*
* Image data organization:
*
2017-09-16 20:46:09 +03:00
* mode bytes byte order
2010-07-31 06:52:47 +04:00
* -------------------------------
2017-09-16 20:46:09 +03:00
* 1 1 1
* L 1 L
* P 1 P
2010-07-31 06:52:47 +04:00
* I 4 I (32-bit integer, native byte order)
* F 4 F (32-bit IEEE float, native byte order)
2017-09-16 20:46:09 +03:00
* RGB 4 R, G, B, -
* RGBA 4 R, G, B, A
* CMYK 4 C, M, Y, K
* YCbCr 4 Y, Cb, Cr, -
* Lab 4 L, a, b, -
2010-07-31 06:52:47 +04:00
*
* experimental modes (incomplete):
* LA 4 L, -, -, A
* PA 4 P, -, -, A
* I;16 2 I (16-bit integer, native byte order)
*
* "P" is an 8-bit palette mode, which should be mapped through the
* palette member to get an output image. Check palette->mode to
* find the corresponding "real" mode.
*
* For information on how to access Imaging objects from your own C
* extensions, see http://www.effbot.org/zone/pil-extending.htm
*/
/* Handles */
typedef struct ImagingMemoryInstance* Imaging;
typedef struct ImagingAccessInstance* ImagingAccess;
typedef struct ImagingHistogramInstance* ImagingHistogram;
typedef struct ImagingOutlineInstance* ImagingOutline;
typedef struct ImagingPaletteInstance* ImagingPalette;
/* handle magics (used with PyCObject). */
#define IMAGING_MAGIC "PIL Imaging"
/* pixel types */
#define IMAGING_TYPE_UINT8 0
#define IMAGING_TYPE_INT32 1
#define IMAGING_TYPE_FLOAT32 2
#define IMAGING_TYPE_SPECIAL 3 /* check mode for details */
#define IMAGING_MODE_LENGTH 6+1 /* Band names ("1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "BGR;xy") */
2017-09-18 22:41:28 +03:00
typedef struct {
char *ptr;
int size;
} ImagingMemoryBlock;
2010-07-31 06:52:47 +04:00
struct ImagingMemoryInstance {
/* Format */
2017-09-16 20:46:09 +03:00
char mode[IMAGING_MODE_LENGTH]; /* Band names ("1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "BGR;xy") */
int type; /* Data type (IMAGING_TYPE_*) */
int depth; /* Depth (ignored in this version) */
int bands; /* Number of bands (1, 2, 3, or 4) */
int xsize; /* Image dimension. */
2010-07-31 06:52:47 +04:00
int ysize;
/* Colour palette (for "P" images only) */
ImagingPalette palette;
/* Data pointers */
2017-09-16 20:46:09 +03:00
UINT8 **image8; /* Set for 8-bit images (pixelsize=1). */
INT32 **image32; /* Set for 32-bit images (pixelsize=4). */
2010-07-31 06:52:47 +04:00
/* Internals */
2017-09-16 20:46:09 +03:00
char **image; /* Actual raster data. */
char *block; /* Set if data is allocated in a single block. */
2017-09-18 22:41:28 +03:00
ImagingMemoryBlock *blocks; /* Memory blocks for pixel storage */
2010-07-31 06:52:47 +04:00
2017-09-16 20:46:09 +03:00
int pixelsize; /* Size of a pixel, in bytes (1, 2 or 4) */
int linesize; /* Size of a line, in bytes (xsize * pixelsize) */
2010-07-31 06:52:47 +04:00
/* Virtual methods */
void (*destroy)(Imaging im);
};
#define IMAGING_PIXEL_1(im,x,y) ((im)->image8[(y)][(x)])
#define IMAGING_PIXEL_L(im,x,y) ((im)->image8[(y)][(x)])
#define IMAGING_PIXEL_LA(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_P(im,x,y) ((im)->image8[(y)][(x)])
#define IMAGING_PIXEL_PA(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_I(im,x,y) ((im)->image32[(y)][(x)])
#define IMAGING_PIXEL_F(im,x,y) (((FLOAT32*)(im)->image32[y])[x])
#define IMAGING_PIXEL_RGB(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_RGBA(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_CMYK(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_YCbCr(im,x,y) ((im)->image[(y)][(x)*4])
#define IMAGING_PIXEL_UINT8(im,x,y) ((im)->image8[(y)][(x)])
#define IMAGING_PIXEL_INT32(im,x,y) ((im)->image32[(y)][(x)])
#define IMAGING_PIXEL_FLOAT32(im,x,y) (((FLOAT32*)(im)->image32[y])[x])
struct ImagingAccessInstance {
const char* mode;
void* (*line)(Imaging im, int x, int y);
void (*get_pixel)(Imaging im, int x, int y, void* pixel);
void (*put_pixel)(Imaging im, int x, int y, const void* pixel);
};
struct ImagingHistogramInstance {
/* Format */
2017-09-16 20:46:09 +03:00
char mode[IMAGING_MODE_LENGTH]; /* Band names (of corresponding source image) */
int bands; /* Number of bands (1, 3, or 4) */
2010-07-31 06:52:47 +04:00
/* Data */
2017-09-16 20:46:09 +03:00
long *histogram; /* Histogram (bands*256 longs) */
2010-07-31 06:52:47 +04:00
};
struct ImagingPaletteInstance {
/* Format */
2017-09-16 20:46:09 +03:00
char mode[IMAGING_MODE_LENGTH]; /* Band names */
2010-07-31 06:52:47 +04:00
/* Data */
UINT8 palette[1024];/* Palette data (same format as image data) */
2017-09-16 20:46:09 +03:00
INT16* cache; /* Palette cache (used for predefined palettes) */
int keep_cache; /* This palette will be reused; keep cache */
2010-07-31 06:52:47 +04:00
};
2017-09-17 21:31:50 +03:00
typedef struct ImagingMemoryArena {
int alignment; /* Alignment in memory of each line of an image */
int block_size; /* Preferred block size, bytes */
int blocks_max; /* Maximum number of cached blocks */
int blocks_cached; /* Current number of blocks not associated with images */
ImagingMemoryBlock *blocks_pool;
int stats_new_count; /* Number of new allocated images */
int stats_allocated_blocks; /* Number of allocated blocks */
int stats_reused_blocks; /* Number of blocks which were retrieved from a pool */
int stats_reallocated_blocks; /* Number of blocks which were actually reallocated after retrieving */
int stats_freed_blocks; /* Number of freed blocks */
2017-09-17 21:31:50 +03:00
} *ImagingMemoryArena;
2010-07-31 06:52:47 +04:00
/* Objects */
/* ------- */
2017-09-17 21:31:50 +03:00
extern struct ImagingMemoryArena ImagingDefaultArena;
2017-09-18 01:41:39 +03:00
extern int ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max);
2017-09-18 03:57:43 +03:00
extern void ImagingMemoryClearCache(ImagingMemoryArena arena, int new_size);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingNew(const char* mode, int xsize, int ysize);
extern Imaging ImagingNewDirty(const char* mode, int xsize, int ysize);
2017-08-06 20:08:07 +03:00
extern Imaging ImagingNew2Dirty(const char* mode, Imaging imOut, Imaging imIn);
2010-07-31 06:52:47 +04:00
extern void ImagingDelete(Imaging im);
extern Imaging ImagingNewBlock(const char* mode, int xsize, int ysize);
extern Imaging ImagingNewMap(const char* filename, int readonly,
const char* mode, int xsize, int ysize);
extern Imaging ImagingNewPrologue(const char *mode,
int xsize, int ysize);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingNewPrologueSubtype(const char *mode,
2017-09-16 20:46:09 +03:00
int xsize, int ysize,
int structure_size);
2010-07-31 06:52:47 +04:00
extern void ImagingCopyPalette(Imaging destination, Imaging source);
2010-07-31 06:52:47 +04:00
extern void ImagingHistogramDelete(ImagingHistogram histogram);
extern void ImagingAccessInit(void);
extern ImagingAccess ImagingAccessNew(Imaging im);
extern void _ImagingAccessDelete(Imaging im, ImagingAccess access);
#define ImagingAccessDelete(im, access) /* nop, for now */
extern ImagingPalette ImagingPaletteNew(const char *mode);
extern ImagingPalette ImagingPaletteNewBrowser(void);
extern ImagingPalette ImagingPaletteDuplicate(ImagingPalette palette);
extern void ImagingPaletteDelete(ImagingPalette palette);
extern int ImagingPaletteCachePrepare(ImagingPalette palette);
extern void ImagingPaletteCacheUpdate(ImagingPalette palette,
2017-09-16 20:46:09 +03:00
int r, int g, int b);
2010-07-31 06:52:47 +04:00
extern void ImagingPaletteCacheDelete(ImagingPalette palette);
2017-09-16 20:46:09 +03:00
#define ImagingPaletteCache(p, r, g, b)\
2010-07-31 06:52:47 +04:00
p->cache[(r>>2) + (g>>2)*64 + (b>>2)*64*64]
extern Imaging ImagingQuantize(Imaging im, int colours, int mode, int kmeans);
/* Threading */
/* --------- */
typedef void* ImagingSectionCookie;
extern void ImagingSectionEnter(ImagingSectionCookie* cookie);
extern void ImagingSectionLeave(ImagingSectionCookie* cookie);
/* Exceptions */
/* ---------- */
extern void* ImagingError_IOError(void);
extern void* ImagingError_MemoryError(void);
extern void* ImagingError_ModeError(void); /* maps to ValueError by default */
extern void* ImagingError_Mismatch(void); /* maps to ValueError by default */
extern void* ImagingError_ValueError(const char* message);
extern void ImagingError_Clear(void);
/* Transform callbacks */
/* ------------------- */
/* standard transforms */
#define IMAGING_TRANSFORM_AFFINE 0
#define IMAGING_TRANSFORM_PERSPECTIVE 2
#define IMAGING_TRANSFORM_QUAD 3
/* standard filters */
#define IMAGING_TRANSFORM_NEAREST 0
#define IMAGING_TRANSFORM_BOX 4
2010-07-31 06:52:47 +04:00
#define IMAGING_TRANSFORM_BILINEAR 2
#define IMAGING_TRANSFORM_HAMMING 5
2010-07-31 06:52:47 +04:00
#define IMAGING_TRANSFORM_BICUBIC 3
#define IMAGING_TRANSFORM_LANCZOS 1
2010-07-31 06:52:47 +04:00
typedef int (*ImagingTransformMap)(double* X, double* Y,
int x, int y, void* data);
typedef int (*ImagingTransformFilter)(void* out, Imaging im,
2016-06-02 18:33:17 +03:00
double x, double y);
2010-07-31 06:52:47 +04:00
/* Image Manipulation Methods */
/* -------------------------- */
2012-12-04 19:44:26 +04:00
extern Imaging ImagingAlphaComposite(Imaging imIn1, Imaging imIn2);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingBlend(Imaging imIn1, Imaging imIn2, float alpha);
extern Imaging ImagingCopy(Imaging im);
extern Imaging ImagingConvert(Imaging im, const char* mode, ImagingPalette palette, int dither);
extern Imaging ImagingConvertInPlace(Imaging im, const char* mode);
extern Imaging ImagingConvertMatrix(Imaging im, const char *mode, float m[]);
extern Imaging ImagingConvertTransparent(Imaging im, const char *mode, int r, int g, int b);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingCrop(Imaging im, int x0, int y0, int x1, int y1);
extern Imaging ImagingExpand(Imaging im, int x, int y, int mode);
extern Imaging ImagingFill(Imaging im, const void* ink);
extern int ImagingFill2(
Imaging into, const void* ink, Imaging mask,
int x0, int y0, int x1, int y1);
extern Imaging ImagingFillBand(Imaging im, int band, int color);
extern Imaging ImagingFillLinearGradient(const char* mode);
extern Imaging ImagingFillRadialGradient(const char* mode);
extern Imaging ImagingFilter(
Imaging im, int xsize, int ysize, const FLOAT32* kernel,
2017-08-07 01:11:05 +03:00
FLOAT32 offset);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingFlipLeftRight(Imaging imOut, Imaging imIn);
extern Imaging ImagingFlipTopBottom(Imaging imOut, Imaging imIn);
extern Imaging ImagingGaussianBlur(Imaging imOut, Imaging imIn, float radius,
2017-09-16 20:46:09 +03:00
int passes);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingGetBand(Imaging im, int band);
2017-08-12 19:08:07 +03:00
extern Imaging ImagingMerge(const char* mode, Imaging bands[4]);
extern int ImagingSplit(Imaging im, Imaging bands[4]);
2010-07-31 06:52:47 +04:00
extern int ImagingGetBBox(Imaging im, int bbox[4]);
typedef struct { int x, y; INT32 count; INT32 pixel; } ImagingColorItem;
extern ImagingColorItem* ImagingGetColors(Imaging im, int maxcolors,
2017-09-16 20:46:09 +03:00
int *colors);
2010-07-31 06:52:47 +04:00
extern int ImagingGetExtrema(Imaging im, void *extrema);
extern int ImagingGetProjection(Imaging im, UINT8* xproj, UINT8* yproj);
extern ImagingHistogram ImagingGetHistogram(
Imaging im, Imaging mask, void *extrema);
extern Imaging ImagingModeFilter(Imaging im, int size);
extern Imaging ImagingNegative(Imaging im);
extern Imaging ImagingOffset(Imaging im, int xoffset, int yoffset);
extern int ImagingPaste(
Imaging into, Imaging im, Imaging mask,
int x0, int y0, int x1, int y1);
extern Imaging ImagingPoint(
Imaging im, const char* tablemode, const void* table);
extern Imaging ImagingPointTransform(
Imaging imIn, double scale, double offset);
extern Imaging ImagingPutBand(Imaging im, Imaging imIn, int band);
extern Imaging ImagingRankFilter(Imaging im, int size, int rank);
extern Imaging ImagingRotate90(Imaging imOut, Imaging imIn);
extern Imaging ImagingRotate180(Imaging imOut, Imaging imIn);
extern Imaging ImagingRotate270(Imaging imOut, Imaging imIn);
2014-10-25 04:12:24 +04:00
extern Imaging ImagingTranspose(Imaging imOut, Imaging imIn);
extern Imaging ImagingTransverse(Imaging imOut, Imaging imIn);
2017-09-11 01:47:47 +03:00
extern Imaging ImagingResample(Imaging imIn, int xsize, int ysize, int filter, float box[4]);
2019-12-02 04:32:08 +03:00
extern Imaging ImagingReduce(Imaging imIn, int xscale, int yscale, int box[4]);
extern Imaging ImagingTransform(
Imaging imOut, Imaging imIn, int method, int x0, int y0, int x1, int y1,
double *a, int filter, int fill);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingUnsharpMask(
Imaging imOut, Imaging im, float radius, int percent, int threshold);
2014-10-25 04:28:05 +04:00
extern Imaging ImagingBoxBlur(Imaging imOut, Imaging imIn, float radius, int n);
2018-03-25 15:49:42 +03:00
extern Imaging ImagingColorLUT3D_linear(Imaging imOut, Imaging imIn,
int table_channels, int size1D, int size2D, int size3D, INT16* table);
2010-07-31 06:52:47 +04:00
extern Imaging ImagingCopy2(Imaging imOut, Imaging imIn);
extern Imaging ImagingConvert2(Imaging imOut, Imaging imIn);
/* Channel operations */
/* any mode, except "F" */
extern Imaging ImagingChopLighter(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopDarker(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopDifference(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopMultiply(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopScreen(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopAdd(
Imaging imIn1, Imaging imIn2, float scale, int offset);
extern Imaging ImagingChopSubtract(
Imaging imIn1, Imaging imIn2, float scale, int offset);
extern Imaging ImagingChopAddModulo(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopSubtractModulo(Imaging imIn1, Imaging imIn2);
2019-11-22 16:03:59 +03:00
extern Imaging ImagingChopSoftLight(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopHardLight(Imaging imIn1, Imaging imIn2);
2019-11-22 16:30:43 +03:00
extern Imaging ImagingOverlay(Imaging imIn1, Imaging imIn2);
2010-07-31 06:52:47 +04:00
/* "1" images only */
extern Imaging ImagingChopAnd(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopOr(Imaging imIn1, Imaging imIn2);
extern Imaging ImagingChopXor(Imaging imIn1, Imaging imIn2);
/* Image measurement */
extern void ImagingCrack(Imaging im, int x0, int y0);
/* Graphics */
extern int ImagingDrawArc(Imaging im, int x0, int y0, int x1, int y1,
float start, float end, const void* ink, int width,
int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawBitmap(Imaging im, int x0, int y0, Imaging bitmap,
const void* ink, int op);
extern int ImagingDrawChord(Imaging im, int x0, int y0, int x1, int y1,
float start, float end, const void* ink, int fill,
int width, int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawEllipse(Imaging im, int x0, int y0, int x1, int y1,
const void* ink, int fill, int width, int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawLine(Imaging im, int x0, int y0, int x1, int y1,
2017-09-16 20:46:09 +03:00
const void* ink, int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawWideLine(Imaging im, int x0, int y0, int x1, int y1,
const void* ink, int width, int op);
extern int ImagingDrawPieslice(Imaging im, int x0, int y0, int x1, int y1,
float start, float end, const void* ink, int fill,
int width, int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawPoint(Imaging im, int x, int y, const void* ink, int op);
extern int ImagingDrawPolygon(Imaging im, int points, int *xy,
2017-09-16 20:46:09 +03:00
const void* ink, int fill, int op);
2010-07-31 06:52:47 +04:00
extern int ImagingDrawRectangle(Imaging im, int x0, int y0, int x1, int y1,
2018-04-12 18:15:27 +03:00
const void* ink, int fill, int width, int op);
2010-07-31 06:52:47 +04:00
/* Level 2 graphics (WORK IN PROGRESS) */
extern ImagingOutline ImagingOutlineNew(void);
extern void ImagingOutlineDelete(ImagingOutline outline);
extern int ImagingDrawOutline(Imaging im, ImagingOutline outline,
const void* ink, int fill, int op);
extern int ImagingOutlineMove(ImagingOutline outline, float x, float y);
extern int ImagingOutlineLine(ImagingOutline outline, float x, float y);
extern int ImagingOutlineCurve(ImagingOutline outline, float x1, float y1,
2017-09-16 20:46:09 +03:00
float x2, float y2, float x3, float y3);
2010-07-31 06:52:47 +04:00
extern int ImagingOutlineTransform(ImagingOutline outline, double a[6]);
2010-07-31 06:52:47 +04:00
extern int ImagingOutlineClose(ImagingOutline outline);
/* Special effects */
extern Imaging ImagingEffectSpread(Imaging imIn, int distance);
extern Imaging ImagingEffectNoise(int xsize, int ysize, float sigma);
extern Imaging ImagingEffectMandelbrot(int xsize, int ysize,
double extent[4], int quality);
/* Obsolete */
extern int ImagingToString(Imaging im, int orientation, char *buffer);
extern int ImagingFromString(Imaging im, int orientation, char *buffer);
/* File I/O */
/* -------- */
/* Built-in drivers */
extern Imaging ImagingOpenPPM(const char* filename);
extern int ImagingSavePPM(Imaging im, const char* filename);
/* Utility functions */
extern UINT32 ImagingCRC32(UINT32 crc, UINT8* buffer, int bytes);
/* Codecs */
typedef struct ImagingCodecStateInstance *ImagingCodecState;
typedef int (*ImagingCodec)(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingBcnDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingBitDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingEpsEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingFliDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingGifDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingGifEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingHexDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2017-09-16 20:46:09 +03:00
#ifdef HAVE_LIBJPEG
2010-07-31 06:52:47 +04:00
extern int ImagingJpegDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
extern int ImagingJpegDecodeCleanup(ImagingCodecState state);
extern int ImagingJpegUseJCSExtensions(void);
2010-07-31 06:52:47 +04:00
extern int ImagingJpegEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
#endif
#ifdef HAVE_OPENJPEG
extern int ImagingJpeg2KDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
extern int ImagingJpeg2KDecodeCleanup(ImagingCodecState state);
2014-03-13 22:27:16 +04:00
extern int ImagingJpeg2KEncode(Imaging im, ImagingCodecState state,
UINT8* buffer, int bytes);
extern int ImagingJpeg2KEncodeCleanup(ImagingCodecState state);
#endif
2017-09-16 20:46:09 +03:00
#ifdef HAVE_LIBTIFF
extern int ImagingLibTiffDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
extern int ImagingLibTiffEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
#endif
2017-09-16 20:46:09 +03:00
#ifdef HAVE_LIBMPEG
2010-07-31 06:52:47 +04:00
extern int ImagingMpegDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
#endif
extern int ImagingMspDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingPackbitsDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingPcdDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingPcxDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingPcxEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingRawDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingRawEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
2017-07-22 10:34:06 +03:00
extern int ImagingSgiRleDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2017-07-28 01:51:10 +03:00
extern int ImagingSgiRleDecodeCleanup(ImagingCodecState state);
2010-07-31 06:52:47 +04:00
extern int ImagingSunRleDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingTgaRleDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2018-06-15 23:01:06 +03:00
extern int ImagingTgaRleEncode(Imaging im, ImagingCodecState state,
UINT8* buffer, int bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingXbmDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2010-07-31 06:52:47 +04:00
extern int ImagingXbmEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
#ifdef HAVE_LIBZ
2010-07-31 06:52:47 +04:00
extern int ImagingZipDecode(Imaging im, ImagingCodecState state,
UINT8* buffer, Py_ssize_t bytes);
2017-05-23 17:26:13 +03:00
extern int ImagingZipDecodeCleanup(ImagingCodecState state);
2010-07-31 06:52:47 +04:00
extern int ImagingZipEncode(Imaging im, ImagingCodecState state,
2017-09-16 20:46:09 +03:00
UINT8* buffer, int bytes);
extern int ImagingZipEncodeCleanup(ImagingCodecState state);
2010-07-31 06:52:47 +04:00
#endif
typedef void (*ImagingShuffler)(UINT8* out, const UINT8* in, int pixels);
/* Public shufflers */
extern void ImagingPackBGR(UINT8* out, const UINT8* in, int pixels);
extern void ImagingUnpackYCC(UINT8* out, const UINT8* in, int pixels);
extern void ImagingUnpackYCCA(UINT8* out, const UINT8* in, int pixels);
extern void ImagingConvertRGB2YCbCr(UINT8* out, const UINT8* in, int pixels);
extern void ImagingConvertYCbCr2RGB(UINT8* out, const UINT8* in, int pixels);
extern ImagingShuffler ImagingFindUnpacker(const char* mode,
const char* rawmode, int* bits_out);
extern ImagingShuffler ImagingFindPacker(const char* mode,
const char* rawmode, int* bits_out);
struct ImagingCodecStateInstance {
int count;
int state;
int errcode;
int x, y;
int ystep;
int xsize, ysize, xoff, yoff;
ImagingShuffler shuffle;
int bits, bytes;
UINT8 *buffer;
void *context;
PyObject *fd;
2010-07-31 06:52:47 +04:00
};
2016-06-11 15:15:17 +03:00
2016-06-17 13:03:21 +03:00
/* Codec read/write python fd */
extern Py_ssize_t _imaging_read_pyFd(PyObject *fd, char* dest, Py_ssize_t bytes);
extern Py_ssize_t _imaging_write_pyFd(PyObject *fd, char* src, Py_ssize_t bytes);
extern int _imaging_seek_pyFd(PyObject *fd, Py_ssize_t offset, int whence);
extern Py_ssize_t _imaging_tell_pyFd(PyObject *fd);
2010-07-31 06:52:47 +04:00
/* Errcodes */
2017-09-16 20:46:09 +03:00
#define IMAGING_CODEC_END 1
#define IMAGING_CODEC_OVERRUN -1
#define IMAGING_CODEC_BROKEN -2
#define IMAGING_CODEC_UNKNOWN -3
#define IMAGING_CODEC_CONFIG -8
#define IMAGING_CODEC_MEMORY -9
2010-07-31 06:52:47 +04:00
2017-08-19 15:30:41 +03:00
#include "ImagingUtils.h"
extern UINT8 *clip8_lookups;
2017-08-19 15:30:41 +03:00
2010-07-31 06:52:47 +04:00
#if defined(__cplusplus)
}
#endif