📄 jdmerge.txt
字号:
000020 6fa8 LDR r0,[r5,#0x78]
000022 4342 MULS r2,r0,r2
;;;385
;;;386 if (cinfo->max_v_samp_factor == 2) {
000024 62a2 STR r2,[r4,#0x28]
000026 f8d50138 LDR r0,[r5,#0x138]
00002a 2802 CMP r0,#2
00002c d10a BNE |L4.68|
;;;387 upsample->pub.upsample = merged_2v_upsample;
00002e 480b LDR r0,|L4.92|
;;;388 upsample->upmethod = h2v2_merged_upsample;
000030 6060 STR r0,[r4,#4]
000032 480b LDR r0,|L4.96|
;;;389 /* Allocate a spare row buffer */
;;;390 upsample->spare_row = (JSAMPROW)
000034 60e0 STR r0,[r4,#0xc]
000036 6868 LDR r0,[r5,#4]
000038 2101 MOVS r1,#1
00003a 6843 LDR r3,[r0,#4]
00003c 4628 MOV r0,r5
00003e 4798 BLX r3
000040 6220 STR r0,[r4,#0x20]
000042 e004 B |L4.78|
|L4.68|
;;;391 (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;392 (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE)));
;;;393 } else {
;;;394 upsample->pub.upsample = merged_1v_upsample;
000044 4807 LDR r0,|L4.100|
;;;395 upsample->upmethod = h2v1_merged_upsample;
000046 6060 STR r0,[r4,#4]
000048 4807 LDR r0,|L4.104|
;;;396 /* No spare row needed */
;;;397 upsample->spare_row = NULL;
00004a 6221 STR r1,[r4,#0x20]
00004c 60e0 STR r0,[r4,#0xc]
|L4.78|
;;;398 }
;;;399
;;;400 build_ycc_rgb_table(cinfo);
00004e 4628 MOV r0,r5
000050 e8bd4070 POP {r4-r6,lr}
000054 f7ffbffe B.W build_ycc_rgb_table
;;;401 }
;;;402
ENDP
|L4.88|
DCD start_pass_merged_upsample
|L4.92|
DCD merged_2v_upsample
|L4.96|
DCD h2v2_merged_upsample
|L4.100|
DCD merged_1v_upsample
|L4.104|
DCD h2v1_merged_upsample
AREA ||i.merged_1v_upsample||, CODE, READONLY, ALIGN=1
merged_1v_upsample PROC
;;;193 METHODDEF(void)
;;;194 merged_1v_upsample (j_decompress_ptr cinfo,
000000 b570 PUSH {r4-r6,lr}
;;;195 JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
;;;196 JDIMENSION in_row_groups_avail,
;;;197 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;198 JDIMENSION out_rows_avail)
;;;199 /* 1:1 vertical sampling case: much easier, never need a spare row. */
;;;200 {
000002 4614 MOV r4,r2
;;;201 my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
000004 e9dd2504 LDRD r2,r5,[sp,#0x10]
;;;202
;;;203 GUI_USE_PARA(out_rows_avail);
;;;204 GUI_USE_PARA(in_row_groups_avail);
;;;205 /* Just do the upsampling. */
;;;206 (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr,
000008 f8d061c4 LDR r6,[r0,#0x1c4]
00000c 682b LDR r3,[r5,#0]
00000e 68f6 LDR r6,[r6,#0xc]
000010 eb020383 ADD r3,r2,r3,LSL #2
000014 6822 LDR r2,[r4,#0]
000016 47b0 BLX r6
;;;207 output_buf + *out_row_ctr);
;;;208 /* Adjust counts */
;;;209 (*out_row_ctr)++;
000018 6828 LDR r0,[r5,#0]
00001a 1c40 ADDS r0,r0,#1
;;;210 (*in_row_group_ctr)++;
00001c 6028 STR r0,[r5,#0]
00001e 6820 LDR r0,[r4,#0]
000020 1c40 ADDS r0,r0,#1
;;;211 }
000022 6020 STR r0,[r4,#0]
000024 bd70 POP {r4-r6,pc}
;;;212
ENDP
AREA ||i.merged_2v_upsample||, CODE, READONLY, ALIGN=1
merged_2v_upsample PROC
;;;143 METHODDEF(void)
;;;144 merged_2v_upsample (j_decompress_ptr cinfo,
000000 e92d41ff PUSH {r0-r8,lr}
;;;145 JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
;;;146 JDIMENSION in_row_groups_avail,
;;;147 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;148 JDIMENSION out_rows_avail)
;;;149 /* 2:1 vertical sampling case: may need a spare row. */
;;;150 {
;;;151 my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
;;;152 JSAMPROW work_ptrs[2];
;;;153 JDIMENSION num_rows; /* number of rows returned to caller */
;;;154
;;;155 GUI_USE_PARA(in_row_groups_avail);
;;;156 if (upsample->spare_full) {
000004 f8d041c4 LDR r4,[r0,#0x1c4]
000008 4690 MOV r8,r2 ;150
00000a e9dd760a LDRD r7,r6,[sp,#0x28] ;151
00000e 9a0c LDR r2,[sp,#0x30] ;151
000010 6a63 LDR r3,[r4,#0x24]
000012 b183 CBZ r3,|L6.54|
;;;157 /* If we have a spare row saved from a previous cycle, just return it. */
;;;158 jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0,
000014 6aa3 LDR r3,[r4,#0x28]
000016 2201 MOVS r2,#1
000018 e9cd2300 STRD r2,r3,[sp,#0]
00001c 6830 LDR r0,[r6,#0]
00001e 2300 MOVS r3,#0
000020 eb070280 ADD r2,r7,r0,LSL #2
000024 4619 MOV r1,r3
000026 f1040020 ADD r0,r4,#0x20
00002a f7fffffe BL jcopy_sample_rows
;;;159 1, upsample->out_row_width);
;;;160 num_rows = 1;
00002e 2501 MOVS r5,#1
;;;161 upsample->spare_full = FALSE;
000030 2000 MOVS r0,#0
000032 6260 STR r0,[r4,#0x24]
000034 e01d B |L6.114|
|L6.54|
;;;162 } else {
;;;163 /* Figure number of rows to return to caller. */
;;;164 num_rows = 2;
;;;165 /* Not more than the distance to the end of the image. */
;;;166 if (num_rows > upsample->rows_to_go)
000036 6ae3 LDR r3,[r4,#0x2c]
000038 2502 MOVS r5,#2 ;164
00003a 2b02 CMP r3,#2
00003c d200 BCS |L6.64|
;;;167 num_rows = upsample->rows_to_go;
00003e 461d MOV r5,r3
|L6.64|
;;;168 /* And not more than what the client can accept: */
;;;169 out_rows_avail -= *out_row_ctr;
000040 6833 LDR r3,[r6,#0]
000042 1ad2 SUBS r2,r2,r3
;;;170 if (num_rows > out_rows_avail)
000044 4295 CMP r5,r2
000046 d900 BLS |L6.74|
;;;171 num_rows = out_rows_avail;
000048 4615 MOV r5,r2
|L6.74|
;;;172 /* Create output pointer array for upsampler. */
;;;173 work_ptrs[0] = output_buf[*out_row_ctr];
00004a f8572023 LDR r2,[r7,r3,LSL #2]
;;;174 if (num_rows > 1) {
00004e 9202 STR r2,[sp,#8]
000050 2d01 CMP r5,#1
000052 d905 BLS |L6.96|
;;;175 work_ptrs[1] = output_buf[*out_row_ctr + 1];
000054 6832 LDR r2,[r6,#0]
000056 eb070282 ADD r2,r7,r2,LSL #2
00005a 6852 LDR r2,[r2,#4]
00005c 9203 STR r2,[sp,#0xc]
00005e e003 B |L6.104|
|L6.96|
;;;176 } else {
;;;177 work_ptrs[1] = upsample->spare_row;
000060 6a23 LDR r3,[r4,#0x20]
;;;178 upsample->spare_full = TRUE;
000062 2201 MOVS r2,#1
000064 9303 STR r3,[sp,#0xc]
000066 6262 STR r2,[r4,#0x24]
|L6.104|
;;;179 }
;;;180 /* Now do the upsampling. */
;;;181 (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs);
000068 68e7 LDR r7,[r4,#0xc]
00006a f8d82000 LDR r2,[r8,#0]
00006e ab02 ADD r3,sp,#8
000070 47b8 BLX r7
|L6.114|
;;;182 }
;;;183
;;;184 /* Adjust counts */
;;;185 *out_row_ctr += num_rows;
000072 6830 LDR r0,[r6,#0]
000074 4428 ADD r0,r0,r5
;;;186 upsample->rows_to_go -= num_rows;
000076 6030 STR r0,[r6,#0]
000078 6ae0 LDR r0,[r4,#0x2c]
00007a 1b40 SUBS r0,r0,r5
;;;187 /* When the buffer is emptied, declare this input row group consumed */
;;;188 if (! upsample->spare_full)
00007c 62e0 STR r0,[r4,#0x2c]
00007e 6a60 LDR r0,[r4,#0x24]
000080 2800 CMP r0,#0
000082 d104 BNE |L6.142|
;;;189 (*in_row_group_ctr)++;
000084 f8d80000 LDR r0,[r8,#0]
000088 1c40 ADDS r0,r0,#1
00008a f8c80000 STR r0,[r8,#0]
|L6.142|
;;;190 }
00008e e8bd81ff POP {r0-r8,pc}
;;;191
ENDP
AREA ||i.start_pass_merged_upsample||, CODE, READONLY, ALIGN=1
start_pass_merged_upsample PROC
;;;125 METHODDEF(void)
;;;126 start_pass_merged_upsample (j_decompress_ptr cinfo)
000000 f8d011c4 LDR r1,[r0,#0x1c4]
;;;127 {
;;;128 my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
;;;129
;;;130 /* Mark the spare buffer empty */
;;;131 upsample->spare_full = FALSE;
000004 2200 MOVS r2,#0
;;;132 /* Initialize total-height counter for detecting bottom of image */
;;;133 upsample->rows_to_go = cinfo->output_height;
000006 624a STR r2,[r1,#0x24]
000008 6f40 LDR r0,[r0,#0x74]
;;;134 }
00000a 62c8 STR r0,[r1,#0x2c]
00000c 4770 BX lr
;;;135
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -