📄 jdpostct.txt
字号:
000060 6838 LDR r0,[r7,#0]
000062 4428 ADD r0,r0,r5
;;;238
;;;239 /* Advance if we filled the strip. */
;;;240 post->next_row += num_rows;
000064 6038 STR r0,[r7,#0]
000066 69a0 LDR r0,[r4,#0x18]
000068 4428 ADD r0,r0,r5
;;;241 if (post->next_row >= post->strip_height) {
00006a 61a0 STR r0,[r4,#0x18]
00006c 6921 LDR r1,[r4,#0x10]
00006e 4288 CMP r0,r1
000070 d304 BCC |L3.124|
;;;242 post->starting_row += post->strip_height;
000072 6960 LDR r0,[r4,#0x14]
;;;243 post->next_row = 0;
000074 2200 MOVS r2,#0
000076 4408 ADD r0,r0,r1 ;242
000078 e9c40205 STRD r0,r2,[r4,#0x14]
|L3.124|
;;;244 }
;;;245 }
00007c e8bd83f8 POP {r3-r9,pc}
;;;246
ENDP
AREA ||i.post_process_prepass||, CODE, READONLY, ALIGN=1
post_process_prepass PROC
;;;157 METHODDEF(void)
;;;158 post_process_prepass (j_decompress_ptr cinfo,
000000 e92d4ffe PUSH {r1-r11,lr}
;;;159 JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
;;;160 JDIMENSION in_row_groups_avail,
;;;161 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;162 JDIMENSION out_rows_avail)
;;;163 {
;;;164 my_post_ptr post = (my_post_ptr) cinfo->post;
;;;165 JDIMENSION old_next_row, num_rows;
;;;166
;;;167 GUI_USE_PARA(out_rows_avail);
;;;168 GUI_USE_PARA(output_buf);
;;;169 /* Reposition virtual buffer if at start of strip. */
;;;170 if (post->next_row == 0) {
000004 f8d041b0 LDR r4,[r0,#0x1b0]
000008 4605 MOV r5,r0 ;163
00000a f8dd8034 LDR r8,[sp,#0x34] ;164
00000e 69a0 LDR r0,[r4,#0x18]
000010 4689 MOV r9,r1 ;163
000012 4692 MOV r10,r2 ;163
000014 469b MOV r11,r3 ;163
000016 b948 CBNZ r0,|L4.44|
;;;171 post->buffer = (*cinfo->mem->access_virt_sarray)
000018 2301 MOVS r3,#1
00001a 9300 STR r3,[sp,#0]
00001c 6868 LDR r0,[r5,#4]
00001e e9d43204 LDRD r3,r2,[r4,#0x10]
000022 69c6 LDR r6,[r0,#0x1c]
000024 68a1 LDR r1,[r4,#8]
000026 4628 MOV r0,r5
000028 47b0 BLX r6
00002a 60e0 STR r0,[r4,#0xc]
|L4.44|
;;;172 ((j_common_ptr) cinfo, post->whole_image,
;;;173 post->starting_row, post->strip_height, TRUE);
;;;174 }
;;;175
;;;176 /* Upsample some data (up to a strip height's worth). */
;;;177 old_next_row = post->next_row;
;;;178 (*cinfo->upsample->upsample) (cinfo,
00002c e9d41303 LDRD r1,r3,[r4,#0xc]
000030 f1040218 ADD r2,r4,#0x18
000034 69a6 LDR r6,[r4,#0x18]
000036 e88d000e STM sp,{r1-r3}
00003a f8d501c4 LDR r0,[r5,#0x1c4]
00003e 465b MOV r3,r11
000040 6847 LDR r7,[r0,#4]
000042 4652 MOV r2,r10
000044 4649 MOV r1,r9
000046 4628 MOV r0,r5
000048 47b8 BLX r7
;;;179 input_buf, in_row_group_ctr, in_row_groups_avail,
;;;180 post->buffer, &post->next_row, post->strip_height);
;;;181
;;;182 /* Allow quantizer to scan new data. No data is emitted, */
;;;183 /* but we advance out_row_ctr so outer loop can tell when we're done. */
;;;184 if (post->next_row > old_next_row) {
00004a 69a0 LDR r0,[r4,#0x18]
00004c 42b0 CMP r0,r6
00004e d90f BLS |L4.112|
;;;185 num_rows = post->next_row - old_next_row;
000050 1b87 SUBS r7,r0,r6
;;;186 (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row,
000052 68e0 LDR r0,[r4,#0xc]
000054 463b MOV r3,r7
000056 eb000186 ADD r1,r0,r6,LSL #2
00005a f8d501cc LDR r0,[r5,#0x1cc]
00005e 2200 MOVS r2,#0
000060 6846 LDR r6,[r0,#4]
000062 4628 MOV r0,r5
000064 47b0 BLX r6
;;;187 (JSAMPARRAY) NULL, (int) num_rows);
;;;188 *out_row_ctr += num_rows;
000066 f8d80000 LDR r0,[r8,#0]
00006a 19c1 ADDS r1,r0,r7
00006c f8c81000 STR r1,[r8,#0]
|L4.112|
;;;189 }
;;;190
;;;191 /* Advance if we filled the strip. */
;;;192 if (post->next_row >= post->strip_height) {
000070 69a1 LDR r1,[r4,#0x18]
000072 6920 LDR r0,[r4,#0x10]
000074 4281 CMP r1,r0
000076 d304 BCC |L4.130|
;;;193 post->starting_row += post->strip_height;
000078 6961 LDR r1,[r4,#0x14]
;;;194 post->next_row = 0;
00007a 2200 MOVS r2,#0
00007c 4408 ADD r0,r0,r1 ;193
00007e e9c40205 STRD r0,r2,[r4,#0x14]
|L4.130|
;;;195 }
;;;196 }
000082 e8bd8ffe POP {r1-r11,pc}
;;;197
ENDP
AREA ||i.start_pass_dpost||, CODE, READONLY, ALIGN=2
start_pass_dpost PROC
;;;72 METHODDEF(void)
;;;73 start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
000000 b538 PUSH {r3-r5,lr}
;;;74 {
;;;75 my_post_ptr post = (my_post_ptr) cinfo->post;
;;;76
;;;77 switch (pass_mode) {
000002 f8d041b0 LDR r4,[r0,#0x1b0]
000006 b171 CBZ r1,|L5.38|
;;;78 case JBUF_PASS_THRU:
;;;79 if (cinfo->quantize_colors) {
;;;80 /* Single-pass processing with color quantization. */
;;;81 post->pub.post_process_data = post_process_1pass;
;;;82 /* We could be doing buffered-image output before starting a 2-pass
;;;83 * color quantization; in that case, jinit_d_post_controller did not
;;;84 * allocate a strip buffer. Use the virtual-array buffer as workspace.
;;;85 */
;;;86 if (post->buffer == NULL) {
;;;87 post->buffer = (*cinfo->mem->access_virt_sarray)
;;;88 ((j_common_ptr) cinfo, post->whole_image,
;;;89 (JDIMENSION) 0, post->strip_height, TRUE);
;;;90 }
;;;91 } else {
;;;92 /* For single-pass processing without color quantization,
;;;93 * I have no work to do; just call the upsampler directly.
;;;94 */
;;;95 post->pub.post_process_data = cinfo->upsample->upsample;
;;;96 }
;;;97 break;
;;;98 #ifdef QUANT_2PASS_SUPPORTED
;;;99 case JBUF_SAVE_AND_PASS:
;;;100 /* First pass of 2-pass quantization */
;;;101 if (post->whole_image == NULL)
;;;102 ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
000008 2204 MOVS r2,#4
00000a 2902 CMP r1,#2 ;77
00000c d01f BEQ |L5.78|
00000e 2903 CMP r1,#3 ;77
000010 d126 BNE |L5.96|
000012 68a1 LDR r1,[r4,#8] ;101
000014 b921 CBNZ r1,|L5.32|
000016 6801 LDR r1,[r0,#0]
000018 614a STR r2,[r1,#0x14]
00001a 6801 LDR r1,[r0,#0]
00001c 6809 LDR r1,[r1,#0]
00001e 4788 BLX r1
|L5.32|
;;;103 post->pub.post_process_data = post_process_prepass;
000020 4814 LDR r0,|L5.116|
|L5.34|
000022 6060 STR r0,[r4,#4] ;95
000024 e021 B |L5.106|
|L5.38|
000026 6d41 LDR r1,[r0,#0x54] ;79
000028 b169 CBZ r1,|L5.70|
00002a 4913 LDR r1,|L5.120|
00002c 6061 STR r1,[r4,#4] ;86
00002e 68e1 LDR r1,[r4,#0xc] ;86
000030 b9d9 CBNZ r1,|L5.106|
000032 2301 MOVS r3,#1 ;87
000034 9300 STR r3,[sp,#0] ;87
000036 6842 LDR r2,[r0,#4] ;87
000038 6923 LDR r3,[r4,#0x10] ;87
00003a 69d5 LDR r5,[r2,#0x1c] ;87
00003c 68a1 LDR r1,[r4,#8] ;87
00003e 2200 MOVS r2,#0 ;87
000040 47a8 BLX r5 ;87
000042 60e0 STR r0,[r4,#0xc] ;87
000044 e011 B |L5.106|
|L5.70|
000046 f8d001c4 LDR r0,[r0,#0x1c4] ;95
00004a 6840 LDR r0,[r0,#4] ;95
00004c e7e9 B |L5.34|
|L5.78|
;;;104 break;
;;;105 case JBUF_CRANK_DEST:
;;;106 /* Second pass of 2-pass quantization */
;;;107 if (post->whole_image == NULL)
00004e 68a1 LDR r1,[r4,#8]
000050 b921 CBNZ r1,|L5.92|
;;;108 ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
000052 6801 LDR r1,[r0,#0]
000054 614a STR r2,[r1,#0x14]
000056 6801 LDR r1,[r0,#0]
000058 6809 LDR r1,[r1,#0]
00005a 4788 BLX r1
|L5.92|
;;;109 post->pub.post_process_data = post_process_2pass;
00005c 4807 LDR r0,|L5.124|
;;;110 break;
00005e e7e0 B |L5.34|
|L5.96|
;;;111 #endif /* QUANT_2PASS_SUPPORTED */
;;;112 default:
;;;113 ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
000060 6801 LDR r1,[r0,#0]
000062 614a STR r2,[r1,#0x14]
000064 6801 LDR r1,[r0,#0]
000066 6809 LDR r1,[r1,#0]
000068 4788 BLX r1
|L5.106|
;;;114 break;
;;;115 }
;;;116 post->starting_row = post->next_row = 0;
00006a 2000 MOVS r0,#0
00006c 61a0 STR r0,[r4,#0x18]
;;;117 }
00006e 6160 STR r0,[r4,#0x14]
000070 bd38 POP {r3-r5,pc}
;;;118
ENDP
000072 0000 DCW 0x0000
|L5.116|
DCD post_process_prepass
|L5.120|
DCD post_process_1pass
|L5.124|
DCD post_process_2pass
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -