📄 sw_jpeg_decoder.h
字号:
typedef struct
{
kal_bool insufficient_data; /* set TRUE after emitting warning */
kal_int32 vld_buffer; /* current bit-extraction buffer */
kal_uint16 bits_left; /* # of unused bits in it */
savable_state saved; /* Other state at start of MCU */
kal_uint16 restarts_to_go; /* MCUs left in this restart interval */
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
#else
d_derived_table dc_derived_tables[2];
d_derived_table ac_derived_tables[2];
#endif
d_derived_table *dc_cur_tables[10];
d_derived_table *ac_cur_tables[10];
d_derived_table *ac_derived_table; /* active table during an AC scan */
kal_bool dc_needed[10];
kal_bool ac_needed[10];
} huff_entropy_decoder;
typedef huff_entropy_decoder *huff_entropy_ptr;
#if defined(__SW_JPEG_USING_DCM__)
void sw_jpeg_dec_set_dcm_flag(kal_bool flag);
#endif
kal_uint8 sw_jpeg_decode(kal_uint32 file_handle);
void jpeg_dec_intmem_init(void *start_ptr,kal_uint32 length);
void jpeg_dec_intmem_deinit(void);
#define JPEG_SW_DECODER_INTMEM_OVERFLOW 0xff
/* IDCT Functions */
typedef enum
{
IDCT_COL_NONE=0x00,
IDCT_COL_0=0x01,
IDCT_COL_1=0x02,
IDCT_COL_2=0x04,
IDCT_COL_3=0x08,
IDCT_COL_4=0x10,
IDCT_COL_5=0x20,
IDCT_COL_6=0x40,
IDCT_COL_7=0x80,
IDCT_COL_0_7=0x81,
IDCT_COL_1_6=0x42,
IDCT_COL_2_5=0x24,
IDCT_COL_3_4=0x18,
IDCT_COL_0_3_4_7=0x99,
IDCT_COL_1_2_5_6=0x66,
IDCT_COL_ALL=0xff
}IDCT_COL;
#define jpeg_decoder_1st_idct_col_0_7(inptr,quantptr,wsptr,blk_zero_tbl)\
for (ctr = 0; ctr < 8; ctr++)\
{\
switch(blk_zero_tbl[ctr])\
{\
case 0:\
while(ctr<8){\
wsptr[0]=0;\
wsptr[7]=0;\
wsptr+= 8;\
ctr++;}\
goto _1st_idct_end;\
case 1:\
x1 = (inptr[0] * quantptr[0]);\
wsptr[0] = x1;\
wsptr[7] = x1;\
break;\
case 2:\
x1 = (inptr[1] * quantptr[1]);\
d12 = (x1 * 615)>>10;\
x1 = (x1 * 1204) >> 10;\
c7 = (x1 * 25)>>6;\
x3 = x1 - c7;\
x1 = (inptr[0] * quantptr[0]);\
x2=d12+x3;\
wsptr[0] = (x1 + x2);\
wsptr[7] = (x1 - x2);\
break;\
case 3:\
x1 = (inptr[1] * quantptr[1]);\
c4 = ((x1 ) * 922)>>10;\
b12 = (x1 * 1537)>>10;\
d12 = b12 - c4;\
x4 = ((x1) * 1204) >> 10;\
c7 = (x1 * 25)>>6;\
x3 = x4 - c7;\
b3 = (inptr[0] * quantptr[0]);\
d0 = (inptr[2] * quantptr[2]);\
x5 = (d0 * 784)>>10;\
x1 = ((d0) * 554)>>10;\
d1 = x1 + x5;\
x2=d12+x3;\
x1=b3+d1;\
wsptr[0] = (x1 + x2);\
wsptr[7] = (x1 - x2);\
break;\
default:\
x1 = (inptr[1] * quantptr[1]);\
x2 = (inptr[3] * quantptr[3]);\
x3 = (inptr[5] * quantptr[5]);\
x4 = (inptr[7] * quantptr[7]);\
c4 = ((x1 + x4) * 922)>>10;\
b12 = (x1 * 1537)>>10;\
d12 = b12 - c4;\
x4 = x2 + x4;\
x3 = x1 + x3;\
x1 = ((x4+x3) * 1204) >> 10;\
c7 = (x3 * 25)>>6;\
x3 = x1 - c7;\
x1 = (inptr[0] * quantptr[0]);\
x2 = (inptr[4] * quantptr[4]);\
b3 = (x1 + x2);\
x1 = (inptr[2] * quantptr[2]);\
x2 = (inptr[6] * quantptr[6]);\
x5 = (x1 * 784)>>10;\
x1 = ((x1 + x2) * 554)>>10;\
d1 = x1 + x5;\
x2=d12+x3;\
x1=b3+d1;\
wsptr[0] = (x1 + x2);\
wsptr[7] = (x1 - x2);\
break;\
}\
inptr+=8;\
quantptr+= 8;\
wsptr+= 8;\
}
#define jpeg_decoder_1st_idct_col_2_5(inptr,quantptr,wsptr,blk_zero_tbl)\
for (ctr = 0; ctr < 8; ctr++)\
{\
switch(blk_zero_tbl[ctr])\
{\
case 0:\
while(ctr<8){\
wsptr[2]=0;\
wsptr[5]=0;\
wsptr+= 8;\
ctr++;}\
goto _1st_idct_end;\
case 1:\
x1 = (inptr[1] * quantptr[1]);\
wsptr[2] = x1;\
wsptr[5] = x1;\
break;\
case 2:\
x1 = (inptr[1] * quantptr[1]);\
c7 = (x1 * 25)>>6;\
x3 = x1 - c7;\
x1 = (inptr[0] * quantptr[0]);\
wsptr[2] = (x1 + x3);\
wsptr[5] = (x1 - x3);\
break;\
case 3:\
x1 = (inptr[1] * quantptr[1]);\
x4 = ((x1) * 1204) >> 10;\
c7 = (x1 * 25)>>6;\
x3 = x4 - c7;\
b3 = (inptr[0] * quantptr[0]);\
d0 = (inptr[2] * quantptr[2]);\
x1 = b3 - d0;\
wsptr[2] = (x1 + x3);\
wsptr[5] = (x1 - x3);\
break;\
default:\
x1 = (inptr[1] * quantptr[1]);\
x2 = (inptr[3] * quantptr[3]);\
x3 = (inptr[5] * quantptr[5]);\
x4 = (inptr[7] * quantptr[7]);\
b10 = (x3 * 2102)>>10;\
c5 = ((x2 + x3) * 2624)>>10;\
d5 = b10 - c5;\
x4 = x2 + x4;\
x3 = x1 + x3;\
x1 = ((x4+x3) * 1204) >> 10;\
c7 = (x3 * 25)>>6;\
x3 = x1 - c7;\
x1 = (inptr[0] * quantptr[0]);\
x2 = (inptr[4] * quantptr[4]);\
b4 = (x1 - x2);\
x1 = (inptr[2] * quantptr[2]);\
x2 = (inptr[6] * quantptr[6]);\
x6 = (x2 * 1892)>>10;\
x1 = ((x1 + x2) * 554)>>10;\
d0 = x1 - x6;\
x1 = b4 - d0;\
x2 = d5 + x3;\
wsptr[2] = (x1 + x2);\
wsptr[5] = (x1 - x2);\
break;\
}\
inptr+=8;\
quantptr+= 8;\
wsptr+= 8;\
}
#define jpeg_decoder_1st_idct_col_3_4(inptr,quantptr,wsptr,blk_zero_tbl)\
for (ctr = 0; ctr < 8; ctr++)\
{\
switch(blk_zero_tbl[ctr])\
{\
case 0:\
while(ctr<8){\
wsptr[3]=0;\
wsptr[4]=0;\
wsptr+= 8;\
ctr++;}\
goto _1st_idct_end;\
case 1:\
x1 = (inptr[0] * quantptr[0]);\
wsptr[3] = x1;\
wsptr[4] = x1;\
break;\
case 2:\
x4 = (inptr[1] * quantptr[1]);\
c4 = (x4 * 922)>>10;\
x4 = ((x4) * 1204) >> 10;\
x1 = (inptr[0] * quantptr[0]);\
x2 = x4-c4;\
wsptr[3] = (x1 + x2);\
wsptr[4] = (x1 - x2);\
break;\
case 3:\
x1 = (inptr[1] * quantptr[1]);\
x4 = ((x1) * 1204) >> 10;\
b3 = (inptr[0] * quantptr[0]);\
d0 = (inptr[2] * quantptr[2]);\
x5 = (d0 * 784)>>10;\
x1 = ((d0) * 554)>>10;\
d1 = x1 + x5;\
x1 = b3 - d1;\
wsptr[3] = (x1 + x4);\
wsptr[4] = (x1 - x4);\
break;\
default:\
x1 = (inptr[1] * quantptr[1]);\
x2 = (inptr[3] * quantptr[3]);\
x3 = (inptr[5] * quantptr[5]);\
x4 = (inptr[7] * quantptr[7]);\
b9 = (x4 * 306)>>10;\
c4 = ((x1 + x4) * 922)>>10;\
d4 = b9 - c4;\
x4 = x2 + x4;\
x3 = x1 + x3;\
x1 = ((x4+x3) * 1204) >> 10;\
c6 = (x4 * 2009)>>10;\
x4 = x1 - c6;\
x1 = (inptr[0] * quantptr[0]);\
x2 = (inptr[4] * quantptr[4]);\
b3 = (x1 + x2);\
x1 = (inptr[2] * quantptr[2]);\
x2 = (inptr[6] * quantptr[6]);\
x5 = (x1 * 784)>>10;\
x1 = ((x1 + x2) * 554)>>10;\
d1 = x1 + x5;\
x1 = b3 - d1;\
x2 = d4 + x4;\
wsptr[3] = (x1 + x2);\
wsptr[4] = (x1 - x2);\
break;\
}\
inptr+=8;\
quantptr+= 8;\
wsptr+= 8;\
}
#define jpeg_decoder_1st_idct_col_1_6(inptr,quantptr,wsptr,blk_zero_tbl)\
for (ctr = 0; ctr < 8; ctr++)\
{\
switch(blk_zero_tbl[ctr])\
{\
case 0:\
while(ctr<8){\
wsptr[1]=0;\
wsptr[6]=0;\
wsptr+= 8;\
ctr++;}\
goto _1st_idct_end;\
case 1:\
x1 = (inptr[0] * quantptr[0]);\
wsptr[1] = x1;\
wsptr[6] = x1;\
break;\
case 2:\
x3 = (inptr[1] * quantptr[1]);\
x2 = ((x3) * 1204) >> 10;\
x1 = (inptr[0] * quantptr[0]);\
wsptr[1] = (x1 + x2);\
wsptr[6] = (x1 - x2);\
break;\
case 3:\
x1 = (inptr[1] * quantptr[1]);\
c4 = ((x1) * 922)>>10;\
b12 = (x1 * 1537)>>10;\
d12 = b12 - c4;\
x4 = ((x1) * 1204) >> 10;\
c7 = (x1 * 25)>>6;\
x3 = x4 - c7;\
b3 = (inptr[0] * quantptr[0]);\
d0 = (inptr[2] * quantptr[2]);\
x1 = ((d0) * 554)>>10;\
x2=d12+x3;\
x1 = b3 + d0;\
wsptr[1] = (x1 + x2);\
wsptr[6] = (x1 - x2);\
break;\
default:\
x1 = (inptr[1] * quantptr[1]);\
x2 = (inptr[3] * quantptr[3]);\
x3 = (inptr[5] * quantptr[5]);\
x4 = (inptr[7] * quantptr[7]);\
c5 = ((x2 + x3) * 2624)>>10;\
b11 = (x2 * 3146)>>10;\
d11 = b11 - c5;\
x4 = x2 + x4;\
x3 = x1 + x3;\
x1 = ((x4+x3) * 1204) >> 10;\
c6 = (x4 * 2009)>>10;\
x4 = x1 - c6;\
x1 = (inptr[0] * quantptr[0]);\
x2 = (inptr[4] * quantptr[4]);\
b4 = (x1 - x2);\
x1 = (inptr[2] * quantptr[2]);\
x2 = (inptr[6] * quantptr[6]);\
x6 = (x2 * 1892)>>10;\
d0 = x1 - x6;\
x2 = d11 + x4;\
x1 = b4 + d0;\
wsptr[1] = (x1 + x2);\
wsptr[6] = (x1 - x2);\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -