📄 jdapistd.txt
字号:
000006 28ca CMP r0,#0xca
000008 d10b BNE |L4.34|
;;;41 /* First call: initialize master control, select active modules */
;;;42 jinit_master_decompress(cinfo);
00000a 4620 MOV r0,r4
00000c f7fffffe BL jinit_master_decompress
;;;43 if (cinfo->buffered_image) {
000010 6c20 LDR r0,[r4,#0x40]
000012 b118 CBZ r0,|L4.28|
;;;44 /* No more work here; expecting jpeg_start_output next */
;;;45 cinfo->global_state = DSTATE_BUFIMAGE;
000014 20cf MOVS r0,#0xcf
;;;46 return TRUE;
000016 6160 STR r0,[r4,#0x14]
000018 2001 MOVS r0,#1
|L4.26|
;;;47 }
;;;48 cinfo->global_state = DSTATE_PRELOAD;
;;;49 }
;;;50 if (cinfo->global_state == DSTATE_PRELOAD) {
;;;51 /* If file has multiple scans, absorb them all into the coef buffer */
;;;52 if (cinfo->inputctl->has_multiple_scans) {
;;;53 #ifdef D_MULTISCAN_FILES_SUPPORTED
;;;54 while (1) {
;;;55 int retcode;
;;;56 /* Call progress monitor hook if present */
;;;57 if (cinfo->progress != NULL)
;;;58 (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
;;;59 /* Absorb some more input */
;;;60 retcode = (*cinfo->inputctl->consume_input) (cinfo);
;;;61 if (retcode == JPEG_SUSPENDED)
;;;62 return FALSE;
;;;63 if (retcode == JPEG_REACHED_EOI)
;;;64 break;
;;;65 /* Advance progress counter if appropriate */
;;;66 if (cinfo->progress != NULL &&
;;;67 (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
;;;68 if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
;;;69 /* jdmaster underestimated number of scans; ratchet up one scan */
;;;70 cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
;;;71 }
;;;72 }
;;;73 }
;;;74 #else
;;;75 ERREXIT(cinfo, JERR_NOT_COMPILED);
;;;76 #endif /* D_MULTISCAN_FILES_SUPPORTED */
;;;77 }
;;;78 cinfo->output_scan_number = cinfo->input_scan_number;
;;;79 } else if (cinfo->global_state != DSTATE_PRESCAN)
;;;80 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
;;;81 /* Perform any dummy output passes, and set up for the final pass */
;;;82 return output_pass_setup(cinfo);
;;;83 }
00001a bd10 POP {r4,pc}
|L4.28|
00001c 20cb MOVS r0,#0xcb ;48
00001e 6160 STR r0,[r4,#0x14] ;48
000020 e001 B |L4.38|
|L4.34|
000022 28cb CMP r0,#0xcb ;50
000024 d129 BNE |L4.122|
|L4.38|
000026 f8d401b4 LDR r0,[r4,#0x1b4] ;52
00002a 6900 LDR r0,[r0,#0x10] ;52
00002c b300 CBZ r0,|L4.112|
|L4.46|
00002e 68a0 LDR r0,[r4,#8] ;57
000030 b110 CBZ r0,|L4.56|
000032 6801 LDR r1,[r0,#0] ;58
000034 4620 MOV r0,r4 ;58
000036 4788 BLX r1 ;58
|L4.56|
000038 f8d401b4 LDR r0,[r4,#0x1b4] ;60
00003c 6801 LDR r1,[r0,#0] ;60
00003e 4620 MOV r0,r4 ;60
000040 4788 BLX r1 ;60
000042 2800 CMP r0,#0 ;61
000044 d0e9 BEQ |L4.26|
000046 2802 CMP r0,#2 ;63
000048 d012 BEQ |L4.112|
00004a 68a1 LDR r1,[r4,#8] ;66
00004c 2900 CMP r1,#0 ;66
00004e d0ee BEQ |L4.46|
000050 2803 CMP r0,#3 ;67
000052 d001 BEQ |L4.88|
000054 2801 CMP r0,#1 ;67
000056 d1ea BNE |L4.46|
|L4.88|
000058 6848 LDR r0,[r1,#4] ;68
00005a 1c40 ADDS r0,r0,#1 ;68
00005c 6048 STR r0,[r1,#4] ;68
00005e 68a1 LDR r1,[r4,#8] ;68
000060 688a LDR r2,[r1,#8] ;68
000062 4290 CMP r0,r2 ;68
000064 dbe3 BLT |L4.46|
000066 f8d40140 LDR r0,[r4,#0x140] ;70
00006a 4410 ADD r0,r0,r2 ;70
00006c 6088 STR r0,[r1,#8] ;70
00006e e7de B |L4.46|
|L4.112|
000070 f8d40090 LDR r0,[r4,#0x90] ;78
000074 f8c40098 STR r0,[r4,#0x98] ;78
000078 e00b B |L4.146|
|L4.122|
00007a 28cc CMP r0,#0xcc ;79
00007c d009 BEQ |L4.146|
00007e 6821 LDR r1,[r4,#0] ;80
000080 2014 MOVS r0,#0x14 ;80
000082 6148 STR r0,[r1,#0x14] ;80
000084 6821 LDR r1,[r4,#0] ;80
000086 6960 LDR r0,[r4,#0x14] ;80
000088 6188 STR r0,[r1,#0x18] ;80
00008a 6820 LDR r0,[r4,#0] ;80
00008c 6801 LDR r1,[r0,#0] ;80
00008e 4620 MOV r0,r4 ;80
000090 4788 BLX r1 ;80
|L4.146|
000092 4620 MOV r0,r4 ;82
000094 e8bd4010 POP {r4,lr} ;82
000098 f7ffbffe B.W output_pass_setup
;;;84
ENDP
AREA ||i.jpeg_start_output||, CODE, READONLY, ALIGN=1
jpeg_start_output PROC
;;;227 GLOBAL(boolean)
;;;228 jpeg_start_output (j_decompress_ptr cinfo, int scan_number)
000000 b570 PUSH {r4-r6,lr}
;;;229 {
000002 4604 MOV r4,r0
;;;230 if (cinfo->global_state != DSTATE_BUFIMAGE &&
000004 6940 LDR r0,[r0,#0x14]
000006 460d MOV r5,r1 ;229
000008 28cf CMP r0,#0xcf
00000a d00b BEQ |L5.36|
;;;231 cinfo->global_state != DSTATE_PRESCAN)
00000c 28cc CMP r0,#0xcc
00000e d009 BEQ |L5.36|
;;;232 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
000010 6821 LDR r1,[r4,#0]
000012 2014 MOVS r0,#0x14
000014 6148 STR r0,[r1,#0x14]
000016 6821 LDR r1,[r4,#0]
000018 6960 LDR r0,[r4,#0x14]
00001a 6188 STR r0,[r1,#0x18]
00001c 6820 LDR r0,[r4,#0]
00001e 6801 LDR r1,[r0,#0]
000020 4620 MOV r0,r4
000022 4788 BLX r1
|L5.36|
;;;233 /* Limit scan number to valid range */
;;;234 if (scan_number <= 0)
000024 2d00 CMP r5,#0
000026 dc00 BGT |L5.42|
;;;235 scan_number = 1;
000028 2501 MOVS r5,#1
|L5.42|
;;;236 if (cinfo->inputctl->eoi_reached &&
00002a f8d401b4 LDR r0,[r4,#0x1b4]
00002e 6940 LDR r0,[r0,#0x14]
000030 b120 CBZ r0,|L5.60|
;;;237 scan_number > cinfo->input_scan_number)
000032 f8d40090 LDR r0,[r4,#0x90]
000036 42a8 CMP r0,r5
000038 da00 BGE |L5.60|
;;;238 scan_number = cinfo->input_scan_number;
00003a 4605 MOV r5,r0
|L5.60|
;;;239 cinfo->output_scan_number = scan_number;
;;;240 /* Perform any dummy output passes, and set up for the real pass */
;;;241 return output_pass_setup(cinfo);
00003c 4620 MOV r0,r4
00003e f8c45098 STR r5,[r4,#0x98]
000042 e8bd4070 POP {r4-r6,lr}
000046 f7ffbffe B.W output_pass_setup
;;;242 }
;;;243
ENDP
AREA ||i.output_pass_setup||, CODE, READONLY, ALIGN=1
output_pass_setup PROC
;;;94 LOCAL(boolean)
;;;95 output_pass_setup (j_decompress_ptr cinfo)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;96 {
000004 4604 MOV r4,r0
;;;97 if (cinfo->global_state != DSTATE_PRESCAN) {
000006 6940 LDR r0,[r0,#0x14]
;;;98 /* First call: do pass setup */
;;;99 (*cinfo->master->prepare_for_output_pass) (cinfo);
;;;100 cinfo->output_scanline = 0;
000008 2500 MOVS r5,#0
00000a 28cc CMP r0,#0xcc ;97
00000c d036 BEQ |L6.124|
00000e f8d401a4 LDR r0,[r4,#0x1a4] ;99
000012 6801 LDR r1,[r0,#0] ;99
000014 4620 MOV r0,r4 ;99
000016 4788 BLX r1 ;99
;;;101 cinfo->global_state = DSTATE_PRESCAN;
000018 20cc MOVS r0,#0xcc
00001a f8c4508c STR r5,[r4,#0x8c]
00001e 6160 STR r0,[r4,#0x14]
000020 e02c B |L6.124|
|L6.34|
;;;102 }
;;;103 /* Loop over any required dummy passes */
;;;104 while (cinfo->master->is_dummy_pass) {
;;;105 #ifdef QUANT_2PASS_SUPPORTED
;;;106 /* Crank through the dummy pass */
;;;107 while (cinfo->output_scanline < cinfo->output_height) {
;;;108 JDIMENSION last_scanline;
;;;109 /* Call progress monitor hook if present */
;;;110 if (cinfo->progress != NULL) {
000022 68a0 LDR r0,[r4,#8]
000024 b138 CBZ r0,|L6.54|
;;;111 cinfo->progress->pass_counter = (long) cinfo->output_scanline;
;;;112 cinfo->progress->pass_limit = (long) cinfo->output_height;
000026 6041 STR r1,[r0,#4]
000028 68a1 LDR r1,[r4,#8]
00002a 6f60 LDR r0,[r4,#0x74]
;;;113 (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
00002c 6088 STR r0,[r1,#8]
00002e 68a0 LDR r0,[r4,#8]
000030 6801 LDR r1,[r0,#0]
000032 4620 MOV r0,r4
000034 4788 BLX r1
|L6.54|
;;;114 }
;;;115 /* Process some data */
;;;116 last_scanline = cinfo->output_scanline;
;;;117 (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL,
000036 f8d401a8 LDR r0,[r4,#0x1a8]
00003a 2300 MOVS r3,#0
00003c 6846 LDR r6,[r0,#4]
00003e f8d4708c LDR r7,[r4,#0x8c]
000042 f104028c ADD r2,r4,#0x8c
000046 4619 MOV r1,r3
000048 4620 MOV r0,r4
00004a 47b0 BLX r6
;;;118 &cinfo->output_scanline, (JDIMENSION) 0);
;;;119 if (cinfo->output_scanline == last_scanline)
00004c f8d4008c LDR r0,[r4,#0x8c]
000050 42b8 CMP r0,r7
000052 d102 BNE |L6.90|
;;;120 return FALSE; /* No progress made, must suspend */
000054 2000 MOVS r0,#0
|L6.86|
;;;121 }
;;;122 /* Finish up dummy pass, and set up for another one */
;;;123 (*cinfo->master->finish_output_pass) (cinfo);
;;;124 (*cinfo->master->prepare_for_output_pass) (cinfo);
;;;125 cinfo->output_scanline = 0;
;;;126 #else
;;;127 ERREXIT(cinfo, JERR_NOT_COMPILED);
;;;128 #endif /* QUANT_2PASS_SUPPORTED */
;;;129 }
;;;130 /* Ready for application to drive output pass through
;;;131 * jpeg_read_scanlines or jpeg_read_raw_data.
;;;132 */
;;;133 cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING;
;;;134 return TRUE;
;;;135 }
000056 e8bd81f0 POP {r4-r8,pc}
|L6.90|
00005a f8d4108c LDR r1,[r4,#0x8c] ;107
00005e 6f60 LDR r0,[r4,#0x74] ;107
000060 4281 CMP r1,r0 ;107
000062 d3de BCC |L6.34|
000064 f8d401a4 LDR r0,[r4,#0x1a4] ;123
000068 6841 LDR r1,[r0,#4] ;123
00006a 4620 MOV r0,r4 ;123
00006c 4788 BLX r1 ;123
00006e f8d401a4 LDR r0,[r4,#0x1a4] ;124
000072 6801 LDR r1,[r0,#0] ;124
000074 4620 MOV r0,r4 ;124
000076 4788 BLX r1 ;124
000078 f8c4508c STR r5,[r4,#0x8c] ;125
|L6.124|
00007c f8d401a4 LDR r0,[r4,#0x1a4] ;104
000080 6880 LDR r0,[r0,#8] ;104
000082 2800 CMP r0,#0 ;104
000084 d1e9 BNE |L6.90|
000086 6c61 LDR r1,[r4,#0x44] ;133
000088 20ce MOVS r0,#0xce ;133
00008a b901 CBNZ r1,|L6.142|
00008c 20cd MOVS r0,#0xcd ;133
|L6.142|
00008e 6160 STR r0,[r4,#0x14] ;134
000090 2001 MOVS r0,#1 ;134
000092 e7e0 B |L6.86|
;;;136
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -