00001 /* ---------------------------------------------------------------------------- 00002 * ATMEL Microcontroller Software Support 00003 * ---------------------------------------------------------------------------- 00004 * Copyright (c) 2009, Atmel Corporation 00005 * 00006 * All rights reserved. 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions are met: 00010 * 00011 * - Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the disclaimer below. 00013 * 00014 * Atmel's name may not be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR 00018 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00019 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00020 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, 00021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00022 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00023 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00024 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00025 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00026 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 * ---------------------------------------------------------------------------- 00028 */ 00029 00030 #ifndef _LIB_JPEG_ 00031 #define _LIB_JPEG_ 00032 00033 00034 /*---------------------------------------------------------------------------- 00035 * Headers 00036 *----------------------------------------------------------------------------*/ 00037 #include <stdint.h> 00038 #include <string.h> 00039 #include "include/jpeglib.h" 00040 00041 /*---------------------------------------------------------------------------- 00042 * Local definitions 00043 *----------------------------------------------------------------------------*/ 00044 typedef enum _EJpegInput 00045 { 00046 JPG_DATA_UNKNOWN, /* error/unspecified */ 00047 JPG_DATA_GRAYSCALE, /* monochrome */ 00048 JPG_DATA_RGB, /* red/green/blue */ 00049 JPG_DATA_YCbCr, /* Y/Cb/Cr (also known as YUV) */ 00050 JPG_DATA_CMYK, /* C/M/Y/K */ 00051 JPG_DATA_YCCK /* Y/Cb/Cr/K */ 00052 } EJpegInput ; 00053 00054 typedef enum _EJpegMethod 00055 { 00056 JPG_METHOD_ISLOW, /* slow but accurate integer algorithm */ 00057 JPG_METHOD_IFAST, /* faster, less accurate integer method */ 00058 JPG_METHOD_FLOAT /* floating-point: accurate, fast on fast HW */ 00059 } EJpegMethod ; 00060 00061 typedef struct _SJPEGData 00062 { 00063 // Source 00064 uint8_t* pucSrc; 00065 00066 uint32_t dwSrcLength ; 00067 00068 // Destination 00069 uint8_t* pucDst ; 00070 uint32_t dwDstLength ; 00071 00072 // Dimensions 00073 uint32_t dwHeight ; 00074 uint32_t dwWidth ; 00075 uint32_t dwBPP ; 00076 00077 // JPEG algo parameters 00078 uint32_t dwQuality ; 00079 EJpegInput eInput ; 00080 EJpegMethod eMethod ; 00081 00082 uint32_t (*cbk)( uint8_t*, uint32_t ) ; 00083 } SJpegData ; 00084 00085 /*------------------------------------------------------------------------------ 00086 * Exported functions 00087 *------------------------------------------------------------------------------*/ 00088 00089 extern uint32_t JpegData_Init( SJpegData* pData ) ; 00090 extern uint32_t JpegData_SetSource( SJpegData* pData, uint8_t* pucSrc, uint32_t dwSrcLength ) ; 00091 00092 00093 extern uint32_t JpegData_SetDestination( SJpegData* pData, uint8_t* pucDst, uint32_t dwDstLength ) ; 00094 extern uint32_t JpegData_SetDimensions( SJpegData* pData, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwBPP ) ; 00095 extern uint32_t JpegData_SetParameters( SJpegData* pData, uint32_t dwQuality, EJpegInput eInput, EJpegMethod eMethod ) ; 00096 extern uint32_t JpegData_SetCallback( SJpegData* pData, uint32_t (*cbk)( uint8_t*, uint32_t ) ) ; 00097 00098 extern uint32_t ijg_compress( SJpegData* pData ) ; 00099 00100 extern uint32_t ijg_compress_raw_no_padding( SJpegData* pData ); 00101 extern uint32_t ijg_decompress( SJpegData* pData ) ; 00102 00103 #endif // _LIB_JPEG_