from helpers import get_inc_dir, get_lib_dir ffi = cffi.FFI() ffi.cdef(""" // functions int write_jpeg (const char *file_name, unsigned char** image_buffer, int image_width, int image_height, int quality, char** error); """) jpglib = ffi.set_source("pygame._jpg_c", libraries=['jpeg'], include_dirs=get_inc_dir(), library_dirs=get_lib_dir(), source=""" #include <stdlib.h> #include <jpeglib.h> #define NUM_LINES_TO_WRITE 500 int write_jpeg (const char *file_name, unsigned char** image_buffer, int image_width, int image_height, int quality, char** error) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE * outfile; JSAMPROW row_pointer[NUM_LINES_TO_WRITE];
// constants #define PNG_COLOR_TYPE_RGB_ALPHA ... #define PNG_COLOR_TYPE_RGB ... // functions static int write_png(const char *file_name, unsigned char **rows, int w, int h, int colortype, int bitdepth, char** error); """) pnglib = ffi.set_source( "pygame._png_c", libraries=['png'], include_dirs=get_inc_dir(), library_dirs=get_lib_dir(), source=""" #define PNG_SKIP_SETJMP_CHECK 1 #include <stdlib.h> #include <png.h> static void png_write_fn (png_structp png_ptr, png_bytep data, png_size_t length) { FILE *fp = (FILE *)png_get_io_ptr(png_ptr); if (fwrite(data, 1, length, fp) != length) { fclose(fp); png_error(png_ptr, "Error while writing to the PNG file (fwrite)"); } }