⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 djpg.h

📁 jpeg快速算法,用于TI和philips的DSP开发
💻 H
字号:
/*
 *********************************************************************
 * File name: djpg.h
 * Version: 5.0(release v1.0)    Date: Jan 12, 2006
 * Author:  xiezm                Email: xiezm@wxintech.cn
 * Company: Wuxi Intech co., ltd.
 *
 * Project: Jpeg Decoder for Trio
 *********************************************************************
 */

#ifndef __DJPG_H
    #define __DJPG_H
    
    /* Define markers */
    #define SOF0  0xc0		//Baseline DCT
    #define JPG	  0xc8		//Reserved for JPEG extensions
    #define DHT	  0xc4
    #define RST0  0xd0
    #define RST1  0xd1
    #define RST2  0xd2
    #define RST3  0xd3
    #define RST4  0xd4
    #define RST5  0xd5
    #define RST6  0xd6
    #define RST7  0xd7
    #define SOI	  0xd8
    #define EOI	  0xd9
    #define SOS	  0xda
    #define DQT	  0xdb
    #define DNL	  0xdc
    #define DRI	  0xdd
    #define EXP	  0xdf
    #define APP0  0xe0		//JFIF Extension APP0
    #define COM	  0xfe
    
    /* Various constants defination */
    #define MAX_COMPS		3
    #define NUM_Q_TBL		4
    #define NUM_H_TBL		2
    #define DCT_SIZE		8
    #define DCT_SIZE2		64

    /* functions & global variables */

    //djpg
    #ifdef DJPG_GLOBALS
        #define DJPG_EXT
    #else
        #define DJPG_EXT extern
    #endif
    
    DJPG_EXT int error_flag;
    DJPG_EXT void error(int eflag);

#ifdef WIN32    
	DJPG_EXT FILE *INPUT;
	DJPG_EXT FILE *OUTPUT;
	DJPG_EXT FILE *BMP;
#else
    DJPG_EXT volatile int chess_storage(IOMEM:1) INPUT;
    DJPG_EXT volatile int chess_storage(IOMEM:2) OUTPUT;    
#endif

    //bitstream
    #ifdef BITSTREAM_GLOBALS
        #define BITSTREAM_EXT
    #else
        #define BITSTREAM_EXT extern
    #endif

    BITSTREAM_EXT void bitstream_init(void);
	BITSTREAM_EXT void decode_bitstream_initial(void);
    BITSTREAM_EXT unsigned int get_byte(void);
    BITSTREAM_EXT unsigned int get_word(void);
    BITSTREAM_EXT unsigned int get_bits(unsigned int n_bits);
    BITSTREAM_EXT unsigned int peek_byte(void);
	BITSTREAM_EXT void drop_bits(unsigned int num_bits);

	#define BUFFER_SIZE 683
    BITSTREAM_EXT unsigned int input_buffer[BUFFER_SIZE];
	BITSTREAM_EXT unsigned int *buffer_inop;
	BITSTREAM_EXT unsigned int *buffer_end;
    BITSTREAM_EXT unsigned int is_stuff;
    BITSTREAM_EXT unsigned int current;
    BITSTREAM_EXT unsigned int bits_left;
    BITSTREAM_EXT unsigned int next;
    BITSTREAM_EXT unsigned int bits_next;
    BITSTREAM_EXT unsigned int bits_mask[16];

    //parse
    #ifdef PARSE_GLOBALS
        #define PARSE_EXT
    #else
        #define PARSE_EXT extern
    #endif

    PARSE_EXT void parse_initial(void);
    PARSE_EXT void parse_header(void);
	PARSE_EXT int find_ffd8(void);

    /* Derived huffman table */
    typedef struct {
        int maxcode[18];
        int valoffset[17];
        int symbol[256];
        /* Lookahead tables */
        int look_nbits[256];		/* # bits, or 0 if too long */
        int look_sym[256];		/* symbol, or unused */
    } DERIVED_H_TBL;
    
    PARSE_EXT int chess_storage(YMEM) quant_tbl[NUM_Q_TBL][DCT_SIZE2];
    PARSE_EXT DERIVED_H_TBL	dc_huff_tbl[NUM_H_TBL];
    PARSE_EXT DERIVED_H_TBL	ac_huff_tbl[NUM_H_TBL];
    
    /* Frame header define */
    PARSE_EXT unsigned int Y;			//Number of lines
    PARSE_EXT unsigned int X;			//Number of samples per line
	PARSE_EXT unsigned int Nf;		    //Number of image components in frame
    PARSE_EXT unsigned int Ci[MAX_COMPS];		//Component identifier !!
    PARSE_EXT unsigned int Hi[MAX_COMPS];		//Horizontal sampling factor
    PARSE_EXT unsigned int Vi[MAX_COMPS];		//Vertical sampling factor
    PARSE_EXT unsigned int Tqi[MAX_COMPS];	    //Quantization table destination selector
    
    /* Scan header define */
    PARSE_EXT unsigned int Ns;		//Number of image components in scan
    PARSE_EXT unsigned int Csi[MAX_COMPS];		//Scan component selector
    PARSE_EXT unsigned int Tdi[MAX_COMPS];		//DC entropy coding table destination selector
    PARSE_EXT unsigned int Tai[MAX_COMPS];		//AC entropy coding table destination selector

	PARSE_EXT unsigned int dri_rst_interval;
    
    PARSE_EXT int num_mcu;

    //decode
    #ifdef DECODE_GLOBALS
        #define DECODE_EXT
    #else
        #define DECODE_EXT extern
    #endif

    DECODE_EXT void decode_initial(void);
	DECODE_EXT void restart_decode(void);

	DECODE_EXT int ZZ[DCT_SIZE2];
	DECODE_EXT int reconstruc_buffer[6][64];

	DECODE_EXT int shift_std[16];
	DECODE_EXT int shift_offset[16];
	
	DECODE_EXT int chess_storage(YMEM) INT_P362;
	DECODE_EXT int chess_storage(YMEM) INT_P473;
	DECODE_EXT int chess_storage(YMEM) INT_P277;
	DECODE_EXT int chess_storage(YMEM) INT_M669;
	
	DECODE_EXT int chess_storage(YMEM) INT_P454;
	DECODE_EXT int chess_storage(YMEM) INT_M88;
	DECODE_EXT int chess_storage(YMEM) INT_M183;
	DECODE_EXT int chess_storage(YMEM) INT_P359;	
	
	DECODE_EXT int cellingR_tab[128];
	DECODE_EXT int cellingG_tab[128];
	DECODE_EXT int cellingB_tab[128];

	DECODE_EXT int cellingR_tab1[512];
	DECODE_EXT int cellingG_tab1[512];
	DECODE_EXT int cellingB_tab1[512];


	DECODE_EXT int *reconstruct_prt;
	DECODE_EXT DERIVED_H_TBL *htbl;
	DECODE_EXT int PreDC[MAX_COMPS];
	DECODE_EXT unsigned int restart_marker;
	
	DECODE_EXT int decode_data_unit(int comp, int rec_idx);

	#ifdef RECONSTRUCT_GLOBALS
        #define RECONSTRUCT_EXT
    #else
        #define RECONSTRUCT_EXT extern
    #endif

	RECONSTRUCT_EXT int *cellingR;
	RECONSTRUCT_EXT int *cellingG;
	RECONSTRUCT_EXT int *cellingB;

	RECONSTRUCT_EXT int decode_mcu_2x2(void);
	RECONSTRUCT_EXT void decode_mcu_2x1(void);
	RECONSTRUCT_EXT void decode_mcu_1x2(void);
	RECONSTRUCT_EXT void decode_mcu_1x1(void);

#ifdef WIN32
    #ifdef OUTPUT_GLOBALS
        #define OUTPUT_EXT
    #else
        #define OUTPUT_EXT extern
    #endif

    OUTPUT_EXT void output_header(void);
    OUTPUT_EXT void output_mcu(void);
	OUTPUT_EXT void write_to_bmp(void);
#endif


#endif /* __DJPG_H */
/****************************End of File*****************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -