aboutsummaryrefslogtreecommitdiffstats
path: root/android/utils/jpeg-compress.h
diff options
context:
space:
mode:
Diffstat (limited to 'android/utils/jpeg-compress.h')
-rw-r--r--android/utils/jpeg-compress.h93
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 */