Final

Dependencies:   DebounceIn NokiaLCD WiflyInterface mbed

Fork of Websocket_Wifly_HelloWorld by Samuel Mokrani

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers picojpeg.h Source File

picojpeg.h

00001 //------------------------------------------------------------------------------
00002 // picojpeg v1.0 - Public domain, Rich Geldreich <richgel99@gmail.com>
00003 //------------------------------------------------------------------------------
00004 #ifndef PICOJPEG_H
00005 #define PICOJPEG_H
00006 
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010 
00011 // Error codes
00012 enum
00013 {
00014    PJPG_NO_MORE_BLOCKS = 1,
00015    PJPG_BAD_DHT_COUNTS,
00016    PJPG_BAD_DHT_INDEX,
00017    PJPG_BAD_DHT_MARKER,
00018    PJPG_BAD_DQT_MARKER,
00019    PJPG_BAD_DQT_TABLE,
00020    PJPG_BAD_PRECISION,
00021    PJPG_BAD_HEIGHT,
00022    PJPG_BAD_WIDTH,
00023    PJPG_TOO_MANY_COMPONENTS,
00024    PJPG_BAD_SOF_LENGTH,
00025    PJPG_BAD_VARIABLE_MARKER,
00026    PJPG_BAD_DRI_LENGTH,
00027    PJPG_BAD_SOS_LENGTH,
00028    PJPG_BAD_SOS_COMP_ID,
00029    PJPG_W_EXTRA_BYTES_BEFORE_MARKER,
00030    PJPG_NO_ARITHMITIC_SUPPORT,
00031    PJPG_UNEXPECTED_MARKER,
00032    PJPG_NOT_JPEG,
00033    PJPG_UNSUPPORTED_MARKER,
00034    PJPG_BAD_DQT_LENGTH,
00035    PJPG_TOO_MANY_BLOCKS,
00036    PJPG_UNDEFINED_QUANT_TABLE,
00037    PJPG_UNDEFINED_HUFF_TABLE,
00038    PJPG_NOT_SINGLE_SCAN,
00039    PJPG_UNSUPPORTED_COLORSPACE,
00040    PJPG_UNSUPPORTED_SAMP_FACTORS,
00041    PJPG_DECODE_ERROR,
00042    PJPG_BAD_RESTART_MARKER,
00043    PJPG_ASSERTION_ERROR,
00044    PJPG_BAD_SOS_SPECTRAL,
00045    PJPG_BAD_SOS_SUCCESSIVE,
00046    PJPG_STREAM_READ_ERROR,
00047    PJPG_NOTENOUGHMEM,
00048    PJPG_UNSUPPORTED_COMP_IDENT,
00049    PJPG_UNSUPPORTED_QUANT_TABLE,
00050    PJPG_UNSUPPORTED_MODE,
00051 };  
00052 
00053 // Scan types - currently only GRAYSCALE, YH1V1, and YH2V2 are actually supported.
00054 typedef enum
00055 {
00056    PJPG_GRAYSCALE,
00057    PJPG_YH1V1,
00058    PJPG_YH2V1,
00059    PJPG_YH1V2,
00060    PJPG_YH2V2
00061 } pjpeg_scan_type_t;
00062 
00063 typedef struct
00064 {
00065    // Image resolution
00066    int m_width;
00067    int m_height;
00068    // Number of components (1 or 3)
00069    int m_comps;
00070    // Total number of minimum coded units (MCU's) per row/col.
00071    int m_MCUSPerRow;
00072    int m_MCUSPerCol;
00073    // Scan type
00074    pjpeg_scan_type_t m_scanType;
00075    // MCU width/height in pixels
00076    int m_MCUWidth;
00077    int m_MCUHeight;
00078    // Pointers to internal MCU pixel component buffers. 
00079    // These buffers Will be filled with pixels each time pjpegDecodeMCU() is called successfully.
00080    // Each MCU consists of (m_MCUWidth/8)*(m_MCUHeight/8) blocks (currently either 1 for greyscale/no subsampling, or 4 for H2V2 sampling factors), where each block is a contiguous array of 64 (8x8) bytes.
00081    // For greyscale images, only the values in m_pMCUBufR are valid.
00082    unsigned char *m_pMCUBufR;
00083    unsigned char *m_pMCUBufG;
00084    unsigned char *m_pMCUBufB;
00085 } pjpeg_image_info_t;
00086 
00087 typedef unsigned char (*pjpeg_need_bytes_callback_t)(unsigned char* pBuf, unsigned char buf_size, unsigned char *pBytes_actually_read, void *pCallback_data);
00088 
00089 // Initializes the decompressor. Returns 0 on success, or one of the above error codes on failure.
00090 // pNeed_bytes_callback will be called to fill the decompressor's internal input buffer.
00091 // Not thread safe.
00092 unsigned char pjpeg_decode_init(pjpeg_image_info_t *pInfo, pjpeg_need_bytes_callback_t pNeed_bytes_callback, void *pCallback_data);
00093 
00094 // Decompresses the file's next MCU. Returns 0 on success, PJPG_NO_MORE_BLOCKS if no more blocks are available, or an error code.
00095 // Must be called a total of m_MCUSPerRow*m_MCUSPerCol times to completely decompress the image.
00096 unsigned char pjpeg_decode_mcu(void);
00097 
00098 #ifdef __cplusplus
00099 }
00100 #endif
00101 
00102 #endif // PICOJPEG_H