📄 jddctmgr.txt
字号:
000062 b329 CBZ r1,|L2.176|
000064 6941 LDR r1,[r0,#0x14]
000066 42b1 CMP r1,r6
000068 d02a BEQ |L2.192|
;;;151 continue;
;;;152 qtbl = compptr->quant_table;
;;;153 if (qtbl == NULL) /* happens if no data yet for component */
00006a 6ce9 LDR r1,[r5,#0x4c]
00006c b301 CBZ r1,|L2.176|
;;;154 continue;
;;;155 idct->cur_method[ci] = method;
;;;156 switch (method) {
00006e 6146 STR r6,[r0,#0x14]
000070 b136 CBZ r6,|L2.128|
000072 2e01 CMP r6,#1
000074 d11d BNE |L2.178|
;;;157 #ifdef PROVIDE_ISLOW_TABLES
;;;158 case JDCT_ISLOW:
;;;159 {
;;;160 /* For LL&M IDCT method, multipliers are equal to raw quantization
;;;161 * coefficients, but are stored as ints to ensure access efficiency.
;;;162 */
;;;163 ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table;
;;;164 for (i = 0; i < DCTSIZE2; i++) {
;;;165 ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
;;;166 }
;;;167 }
;;;168 break;
;;;169 #endif
;;;170 #ifdef DCT_IFAST_SUPPORTED
;;;171 case JDCT_IFAST:
;;;172 {
;;;173 /* For AA&N IDCT method, multipliers are equal to quantization
;;;174 * coefficients scaled by scalefactor[row]*scalefactor[col], where
;;;175 * scalefactor[0] = 1
;;;176 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
;;;177 * For integer operation, the multiplier table is to be scaled by
;;;178 * IFAST_SCALE_BITS.
;;;179 */
;;;180 IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table;
;;;181 #define CONST_BITS 14
;;;182 static const INT16 aanscales[DCTSIZE2] = {
;;;183 /* precomputed values scaled up by 14 bits */
;;;184 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
;;;185 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
;;;186 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
;;;187 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
;;;188 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
;;;189 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
;;;190 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
;;;191 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
;;;192 };
;;;193 SHIFT_TEMPS
;;;194
;;;195 for (i = 0; i < DCTSIZE2; i++) {
000076 2000 MOVS r0,#0
;;;196 ifmtbl[i] = (IFAST_MULT_TYPE)
000078 f8dfc05c LDR r12,|L2.216|
00007c 6d2b LDR r3,[r5,#0x50] ;195
00007e e009 B |L2.148|
|L2.128|
000080 6d2b LDR r3,[r5,#0x50] ;164
000082 2000 MOVS r0,#0 ;164
|L2.132|
000084 f8312010 LDRH r2,[r1,r0,LSL #1] ;165
000088 f8432020 STR r2,[r3,r0,LSL #2] ;165
00008c 1c40 ADDS r0,r0,#1 ;164
00008e 2840 CMP r0,#0x40 ;164
000090 dbf8 BLT |L2.132|
000092 e015 B |L2.192|
|L2.148|
000094 f8312010 LDRH r2,[r1,r0,LSL #1]
000098 f93ce010 LDRSH lr,[r12,r0,LSL #1]
00009c fb02f20e MUL r2,r2,lr
0000a0 f5026200 ADD r2,r2,#0x800
0000a4 1312 ASRS r2,r2,#12
0000a6 f8432020 STR r2,[r3,r0,LSL #2]
0000aa 1c40 ADDS r0,r0,#1 ;195
0000ac 2840 CMP r0,#0x40 ;195
0000ae dbf1 BLT |L2.148|
|L2.176|
0000b0 e006 B |L2.192|
|L2.178|
;;;197 DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
;;;198 (INT32) aanscales[i]),
;;;199 CONST_BITS-IFAST_SCALE_BITS);
;;;200 }
;;;201 }
;;;202 break;
;;;203 #endif
;;;204 #ifdef DCT_FLOAT_SUPPORTED
;;;205 case JDCT_FLOAT:
;;;206 {
;;;207 /* For float AA&N IDCT method, multipliers are equal to quantization
;;;208 * coefficients scaled by scalefactor[row]*scalefactor[col], where
;;;209 * scalefactor[0] = 1
;;;210 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
;;;211 */
;;;212 FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table;
;;;213 int row, col;
;;;214 static const double aanscalefactor[DCTSIZE] = {
;;;215 1.0, 1.387039845, 1.306562965, 1.175875602,
;;;216 1.0, 0.785694958, 0.541196100, 0.275899379
;;;217 };
;;;218
;;;219 i = 0;
;;;220 for (row = 0; row < DCTSIZE; row++) {
;;;221 for (col = 0; col < DCTSIZE; col++) {
;;;222 fmtbl[i] = (FLOAT_MULT_TYPE)
;;;223 ((double) qtbl->quantval[i] *
;;;224 aanscalefactor[row] * aanscalefactor[col]);
;;;225 i++;
;;;226 }
;;;227 }
;;;228 }
;;;229 break;
;;;230 #endif
;;;231 default:
;;;232 ERREXIT(cinfo, JERR_NOT_COMPILED);
0000b2 6821 LDR r1,[r4,#0]
0000b4 f8c1a014 STR r10,[r1,#0x14]
0000b8 6820 LDR r0,[r4,#0]
0000ba 6801 LDR r1,[r0,#0]
0000bc 4620 MOV r0,r4
0000be 4788 BLX r1
|L2.192|
0000c0 1c7f ADDS r7,r7,#1 ;96
0000c2 3554 ADDS r5,r5,#0x54 ;96
|L2.196|
0000c4 6a60 LDR r0,[r4,#0x24] ;96
0000c6 42b8 CMP r0,r7 ;96
0000c8 dca7 BGT |L2.26|
;;;233 break;
;;;234 }
;;;235 }
;;;236 }
0000ca e8bd87f0 POP {r4-r10,pc}
;;;237
ENDP
0000ce 0000 DCW 0x0000
|L2.208|
DCD jpeg_idct_ifast
|L2.212|
DCD jpeg_idct_islow
|L2.216|
DCD ||.constdata||
AREA ||.constdata||, DATA, READONLY, ALIGN=1
aanscales
000000 400058c5 DCW 0x4000,0x58c5
000004 539f4b42 DCW 0x539f,0x4b42
000008 40003249 DCW 0x4000,0x3249
00000c 22a311a8 DCW 0x22a3,0x11a8
000010 58c57b21 DCW 0x58c5,0x7b21
000014 73fc6862 DCW 0x73fc,0x6862
000018 58c545bf DCW 0x58c5,0x45bf
00001c 300b187e DCW 0x300b,0x187e
000020 539f73fc DCW 0x539f,0x73fc
000024 6d416254 DCW 0x6d41,0x6254
000028 539f41b3 DCW 0x539f,0x41b3
00002c 2d411712 DCW 0x2d41,0x1712
000030 4b426862 DCW 0x4b42,0x6862
000034 6254587e DCW 0x6254,0x587e
000038 4b423b21 DCW 0x4b42,0x3b21
00003c 28ba14c3 DCW 0x28ba,0x14c3
000040 400058c5 DCW 0x4000,0x58c5
000044 539f4b42 DCW 0x539f,0x4b42
000048 40003249 DCW 0x4000,0x3249
00004c 22a311a8 DCW 0x22a3,0x11a8
000050 324945bf DCW 0x3249,0x45bf
000054 41b33b21 DCW 0x41b3,0x3b21
000058 32492782 DCW 0x3249,0x2782
00005c 1b370de0 DCW 0x1b37,0x0de0
000060 22a3300b DCW 0x22a3,0x300b
000064 2d4128ba DCW 0x2d41,0x28ba
000068 22a31b37 DCW 0x22a3,0x1b37
00006c 12bf098e DCW 0x12bf,0x098e
000070 11a8187e DCW 0x11a8,0x187e
000074 171214c3 DCW 0x1712,0x14c3
000078 11a80de0 DCW 0x11a8,0x0de0
00007c 098e04df DCW 0x098e,0x04df
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -