diff options
Diffstat (limited to 'android/utils/jpeg-compress.h')
-rw-r--r-- | android/utils/jpeg-compress.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/android/utils/jpeg-compress.h b/android/utils/jpeg-compress.h new file mode 100644 index 0000000..4e0e61a --- /dev/null +++ b/android/utils/jpeg-compress.h @@ -0,0 +1,93 @@ +/* Copyright (C) 2011 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program 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 for more details. +*/ +#ifndef _ANDROID_UTILS_JPEG_COMPRESS_H +#define _ANDROID_UTILS_JPEG_COMPRESS_H + +/* + * Contains declaration of utility routines that compress an RGB bitmap into + * a JPEG image. + * + * NOTE: This code uses a jpeglib library located in distrib/jpeg-6b. It's a + * 3-rd party library that uses its own type definitions that are different from + * the ones that are use elsewhere in the emulator code. For instance, in the + * emulator built for Windows, sizeof(bool) = 1, while in the jpeglib sizeof(bool) = 4. + * So, to simplify dealing with these issues, all the code that uses jpeglib should + * be compiled separately, and should include only headers that are used to compile + * jpeglib. + */ + + +/* Declares descriptor for a JPEG compression. */ +typedef struct AJPEGDesc AJPEGDesc; + +/* Creates a descriptor that will be used for compression. + * Param: + * header_size - Number of bytes to allocate for a custom header that should + * preceed the actual JPEG buffer. This is useful when sending JPEG + * somewhere else along with some extra data about the compressed image. + * cunk_size - Number of bytes to increment the compressed buffer with each time + * compressor requests more memory. + * Return: + * Initialized compression descriptor. + */ +extern AJPEGDesc* jpeg_compressor_create(int header_size, int chunk_size); + +/* Destroys compressor descriptor. + * Param: + * dsc - Compressin descriptor, obtained with jpeg_compressor_create. + */ +extern void jpeg_compressor_destroy(AJPEGDesc* dsc); + +/* Returns compressed data size. + * Param: + * dsc - Compression descriptor, obtained with jpeg_compressor_create. + * Return: + * Compressed data size. + */ +extern int jpeg_compressor_get_jpeg_size(const AJPEGDesc* dsc); + +/* Returns compressed buffer. + * Param: + * dsc - Compression descriptor, obtained with jpeg_compressor_create. + * Return: + * Compressed buffer. NOTE: if 'header_size' parameter passed to the jpeg_compressor_create + * for this descriptor was not zero, this routine returns a pointer to the custom + * header. Compressed data follows immediately after that header. + */ +extern void* jpeg_compressor_get_buffer(const AJPEGDesc* dsc); + +/* Returns size of the custom header placed before the compressed data. + * Param: + * dsc - Compression descriptor, obtained with jpeg_compressor_create. + * Return: + * Size of the custom header placed before the compressed data. + */ +extern int jpeg_compressor_get_header_size(const AJPEGDesc* dsc); + +/* Compresses a framebuffer region into JPEG image. + * Param: + * dsc - Compression descriptor, obtained with jpeg_compressor_create. + * x, y, w, h - Coordinates and sizes of framebuffer region to compress. + * bpp - Number of bytes per pixel in the framebuffer. + * bpl - Number of bytes per line in the framebuffer. + * fb - Beginning of the framebuffer. + * jpeg_quality JPEG compression quality. A number from 1 to 100. Note that + * value 10 provides pretty decent image for the purpose of multi-touch + * emulation. + */ +extern void jpeg_compressor_compress_fb(AJPEGDesc* dsc, + int x, int y, int w, int h, + int bpp, int bpl, + const uint8_t* fb, + int jpeg_quality); + +#endif /* _ANDROID_UTILS_JPEG_COMPRESS_H */ |