📄 jdcoefct.txt
字号:
000098 580f LDR r7,[r1,r0]
;;;357 output_ptr = output_buf[ci];
00009a 9808 LDR r0,[sp,#0x20]
00009c f8500029 LDR r0,[r0,r9,LSL #2]
;;;358 /* Loop over all DCT blocks to be processed. */
;;;359 for (block_row = 0; block_row < block_rows; block_row++) {
0000a0 9002 STR r0,[sp,#8]
0000a2 2000 MOVS r0,#0
0000a4 e01c B |L2.224|
|L2.166|
;;;360 buffer_ptr = buffer[block_row];
0000a6 9803 LDR r0,[sp,#0xc]
;;;361 output_col = 0;
0000a8 f04f0a00 MOV r10,#0
0000ac f850b028 LDR r11,[r0,r8,LSL #2] ;360
;;;362 for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) {
0000b0 4656 MOV r6,r10
0000b2 e00b B |L2.204|
|L2.180|
;;;363 (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr,
0000b4 f8cda000 STR r10,[sp,#0]
0000b8 465a MOV r2,r11
0000ba 4629 MOV r1,r5
0000bc 4620 MOV r0,r4
0000be 9b02 LDR r3,[sp,#8]
0000c0 47b8 BLX r7
;;;364 output_ptr, output_col);
;;;365 buffer_ptr++;
;;;366 output_col += compptr->DCT_scaled_size;
0000c2 6a68 LDR r0,[r5,#0x24]
0000c4 f10b0b80 ADD r11,r11,#0x80 ;365
0000c8 4482 ADD r10,r10,r0
0000ca 1c76 ADDS r6,r6,#1 ;362
|L2.204|
0000cc 69e8 LDR r0,[r5,#0x1c] ;362
0000ce 42b0 CMP r0,r6 ;362
0000d0 d8f0 BHI |L2.180|
;;;367 }
;;;368 output_ptr += compptr->DCT_scaled_size;
0000d2 6a69 LDR r1,[r5,#0x24]
0000d4 9a02 LDR r2,[sp,#8]
0000d6 f1080001 ADD r0,r8,#1 ;359
0000da eb020181 ADD r1,r2,r1,LSL #2
0000de 9102 STR r1,[sp,#8]
|L2.224|
0000e0 9904 LDR r1,[sp,#0x10] ;359
0000e2 4680 MOV r8,r0 ;359
0000e4 4288 CMP r0,r1 ;359
0000e6 dbde BLT |L2.166|
|L2.232|
0000e8 f1090901 ADD r9,r9,#1 ;339
0000ec 3554 ADDS r5,r5,#0x54 ;339
|L2.238|
0000ee 6a60 LDR r0,[r4,#0x24] ;338
0000f0 4548 CMP r0,r9 ;338
0000f2 dcaa BGT |L2.74|
;;;369 }
;;;370 }
;;;371
;;;372 if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows)
0000f4 f8540f9c LDR r0,[r4,#0x9c]!
0000f8 1c40 ADDS r0,r0,#1
0000fa 6020 STR r0,[r4,#0]
0000fc f8d410a4 LDR r1,[r4,#0xa4]
000100 4288 CMP r0,r1
000102 d203 BCS |L2.268|
;;;373 return JPEG_ROW_COMPLETED;
000104 2003 MOVS r0,#3
|L2.262|
;;;374 return JPEG_SCAN_COMPLETED;
;;;375 }
000106 b009 ADD sp,sp,#0x24
000108 e8bd8ff0 POP {r4-r11,pc}
|L2.268|
00010c 2004 MOVS r0,#4 ;374
00010e e7fa B |L2.262|
;;;376
ENDP
AREA ||i.decompress_onepass||, CODE, READONLY, ALIGN=2
decompress_onepass PROC
;;;146 METHODDEF(int)
;;;147 decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
000000 e92d4ff3 PUSH {r0,r1,r4-r11,lr}
;;;148 {
;;;149 my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
;;;150 JDIMENSION MCU_col_num; /* index of current MCU within row */
;;;151 JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
000004 f8d0a1ac LDR r10,[r0,#0x1ac]
000008 4605 MOV r5,r0 ;148
00000a f8d0015c LDR r0,[r0,#0x15c]
;;;152 JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
;;;153 int blkn, ci, xindex, yindex, yoffset, useful_width;
;;;154 JSAMPARRAY output_ptr;
;;;155 JDIMENSION start_col, output_col;
;;;156 jpeg_component_info *compptr;
;;;157 inverse_DCT_method_ptr inverse_DCT;
;;;158
;;;159 /* Loop to process as much as one whole iMCU row */
;;;160 for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
00000e f8d51140 LDR r1,[r5,#0x140]
000012 b089 SUB sp,sp,#0x24 ;148
000014 1e40 SUBS r0,r0,#1 ;151
000016 f8da2018 LDR r2,[r10,#0x18] ;151
00001a 1e49 SUBS r1,r1,#1 ;152
00001c 9205 STR r2,[sp,#0x14]
00001e e9cd1007 STRD r1,r0,[sp,#0x1c]
000022 e086 B |L3.306|
|L3.36|
;;;161 yoffset++) {
;;;162 for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col;
000024 f8da0014 LDR r0,[r10,#0x14]
000028 e079 B |L3.286|
;;;163 MCU_col_num++) {
;;;164 /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */
;;;165 jzero_far((void FAR *) coef->MCU_buffer[0],
00002a bf00 NOP
|L3.44|
00002c f8d50164 LDR r0,[r5,#0x164]
000030 01c1 LSLS r1,r0,#7
000032 f8da0020 LDR r0,[r10,#0x20]
000036 f7fffffe BL jzero_far
;;;166 (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK)));
;;;167 if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
00003a f8d501bc LDR r0,[r5,#0x1bc]
00003e f10a0120 ADD r1,r10,#0x20
000042 6842 LDR r2,[r0,#4]
000044 4628 MOV r0,r5
000046 4790 BLX r2
000048 b930 CBNZ r0,|L3.88|
;;;168 /* Suspension forced; update state counters and exit */
;;;169 coef->MCU_vert_offset = yoffset;
00004a 9805 LDR r0,[sp,#0x14]
;;;170 coef->MCU_ctr = MCU_col_num;
;;;171 return JPEG_SUSPENDED;
00004c e9cab005 STRD r11,r0,[r10,#0x14]
000050 2000 MOVS r0,#0
|L3.82|
;;;172 }
;;;173 /* Determine where data should go in output_buf and do the IDCT thing.
;;;174 * We skip dummy blocks at the right and bottom edges (but blkn gets
;;;175 * incremented past them!). Note the inner loop relies on having
;;;176 * allocated the MCU_buffer[] blocks sequentially.
;;;177 */
;;;178 blkn = 0; /* index of current DCT block within MCU */
;;;179 for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
;;;180 compptr = cinfo->cur_comp_info[ci];
;;;181 /* Don't bother to IDCT an uninteresting component. */
;;;182 if (! compptr->component_needed) {
;;;183 blkn += compptr->MCU_blocks;
;;;184 continue;
;;;185 }
;;;186 inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index];
;;;187 useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
;;;188 : compptr->last_col_width;
;;;189 output_ptr = output_buf[compptr->component_index] +
;;;190 yoffset * compptr->DCT_scaled_size;
;;;191 start_col = MCU_col_num * compptr->MCU_sample_width;
;;;192 for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
;;;193 if (cinfo->input_iMCU_row < last_iMCU_row ||
;;;194 yoffset+yindex < compptr->last_row_height) {
;;;195 output_col = start_col;
;;;196 for (xindex = 0; xindex < useful_width; xindex++) {
;;;197 (*inverse_DCT) (cinfo, compptr,
;;;198 (JCOEFPTR) coef->MCU_buffer[blkn+xindex],
;;;199 output_ptr, output_col);
;;;200 output_col += compptr->DCT_scaled_size;
;;;201 }
;;;202 }
;;;203 blkn += compptr->MCU_width;
;;;204 output_ptr += compptr->DCT_scaled_size;
;;;205 }
;;;206 }
;;;207 }
;;;208 /* Completed an MCU row, but perhaps not an iMCU row */
;;;209 coef->MCU_ctr = 0;
;;;210 }
;;;211 /* Completed the iMCU row, advance counters for next one */
;;;212 cinfo->output_iMCU_row++;
;;;213 if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
;;;214 start_iMCU_row(cinfo);
;;;215 return JPEG_ROW_COMPLETED;
;;;216 }
;;;217 /* Completed the scan */
;;;218 (*cinfo->inputctl->finish_input_pass) (cinfo);
;;;219 return JPEG_SCAN_COMPLETED;
;;;220 }
000052 b00b ADD sp,sp,#0x2c
000054 e8bd8ff0 POP {r4-r11,pc}
|L3.88|
000058 f04f0800 MOV r8,#0 ;178
00005c 4640 MOV r0,r8 ;179
00005e e056 B |L3.270|
|L3.96|
000060 eb050081 ADD r0,r5,r1,LSL #2 ;180
000064 f8d0414c LDR r4,[r0,#0x14c] ;182
000068 6b20 LDR r0,[r4,#0x30] ;182
00006a b910 CBNZ r0,|L3.114|
00006c 6be0 LDR r0,[r4,#0x3c] ;183
00006e 4480 ADD r8,r8,r0 ;183
000070 e04b B |L3.266|
|L3.114|
000072 6861 LDR r1,[r4,#4] ;187
000074 f8d501c0 LDR r0,[r5,#0x1c0] ;186
000078 2204 MOVS r2,#4 ;186
00007a 9e08 LDR r6,[sp,#0x20] ;187
00007c eb020281 ADD r2,r2,r1,LSL #2 ;186
000080 5887 LDR r7,[r0,r2] ;186
000082 45b3 CMP r11,r6 ;187
000084 d201 BCS |L3.138|
000086 6b60 LDR r0,[r4,#0x34] ;187
000088 e000 B |L3.140|
|L3.138|
00008a 6c60 LDR r0,[r4,#0x44] ;188
|L3.140|
00008c 9004 STR r0,[sp,#0x10] ;189
00008e 980a LDR r0,[sp,#0x28] ;189
000090 9b05 LDR r3,[sp,#0x14] ;191
000092 f8502021 LDR r2,[r0,r1,LSL #2] ;189
000096 6a60 LDR r0,[r4,#0x24] ;189
000098 6c21 LDR r1,[r4,#0x40] ;191
00009a 4358 MULS r0,r3,r0 ;189
00009c fb01f10b MUL r1,r1,r11 ;191
0000a0 eb020080 ADD r0,r2,r0,LSL #2 ;189
0000a4 e9cd1002 STRD r1,r0,[sp,#8] ;192
0000a8 f04f0900 MOV r9,#0 ;192
0000ac e02a B |L3.260|
0000ae bf00 NOP ;193
|L3.176|
0000b0 f8d50094 LDR r0,[r5,#0x94] ;193
0000b4 9907 LDR r1,[sp,#0x1c] ;193
0000b6 4288 CMP r0,r1 ;193
0000b8 d304 BCC |L3.196|
0000ba 9805 LDR r0,[sp,#0x14] ;194
0000bc 6ca1 LDR r1,[r4,#0x48] ;194
0000be 4448 ADD r0,r0,r9 ;194
0000c0 4288 CMP r0,r1 ;194
0000c2 da16 BGE |L3.242|
|L3.196|
0000c4 9802 LDR r0,[sp,#8] ;195
0000c6 2600 MOVS r6,#0 ;196
0000c8 9001 STR r0,[sp,#4] ;196
0000ca e00f B |L3.236|
|L3.204|
0000cc 9b01 LDR r3,[sp,#4] ;197
0000ce eb080006 ADD r0,r8,r6 ;197
0000d2 9300 STR r3,[sp,#0] ;197
0000d4 eb0a0080 ADD r0,r10,r0,LSL #2 ;197
0000d8 6a02 LDR r2,[r0,#0x20] ;197
0000da 4621 MOV r1,r4 ;197
0000dc 4628 MOV r0,r5 ;197
0000de 9b03 LDR r3,[sp,#0xc] ;197
0000e0 47b8 BLX r7 ;197
0000e2 6a60 LDR r0,[r4,#0x24] ;200
0000e4 9901 LDR r1,[sp,#4] ;200
0000e6 1c76 ADDS r6,r6,#1 ;196
0000e8 4408 ADD r0,r0,r1 ;200
0000ea 9001 STR r0,[sp,#4] ;196
|L3.236|
0000ec 9804 LDR r0,[sp,#0x10] ;196
0000ee 4286 CMP r6,r0 ;196
0000f0 dbec BLT |L3.204|
|L3.242|
0000f2 6b60 LDR r0,[r4,#0x34] ;204
0000f4 6a62 LDR r2,[r4,#0x24] ;204
0000f6 9b03 LDR r3,[sp,#0xc] ;204
0000f8 4480 ADD r8,r8,r0 ;203
0000fa eb030082 ADD r0,r3,r2,LSL #2 ;204
0000fe f1090901 ADD r9,r9,#1 ;192
000102 9003 STR r0,[sp,#0xc] ;204
|L3.260|
000104 6ba0 LDR r0,[r4,#0x38] ;192
000106 4548 CMP r0,r9 ;192
000108 dcd2 BGT |L3.176|
|L3.266|
00010a 9806 LDR r0,[sp,#0x18] ;179
00010c 1c40 ADDS r0,r0,#1 ;179
|L3.270|
00010e 9006 STR r0,[sp,#0x18] ;179
000110 f8d50148 LDR r0,[r5,#0x148] ;179
000114 9906 LDR r1,[sp,#0x18] ;179
000116 4288 CMP r0,r1 ;179
000118 dca2 BGT |L3.96|
00011a f10b0001 ADD r0,r11,#1 ;163
|L3.286|
00011e 9908 LDR r1,[sp,#0x20] ;162
000120 4683 MOV r11,r0 ;162
000122 4288 CMP r0,r1 ;162
000124 d982 BLS |L3.44|
000126 2000 MOVS r0,#0 ;209
000128 f8ca0014 STR r0,[r10,#0x14] ;161
00012c 9805 LDR r0,[sp,#0x14] ;161
00012e 1c40 ADDS r0,r0,#1 ;161
000130 9005 STR r0,[sp,#0x14] ;161
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -