📄 jdsample.txt
字号:
00009e 6aa8 LDR r0,[r5,#0x28]
0000a0 2802 CMP r0,#2
0000a2 d901 BLS |L7.168|
;;;459 upsample->methods[ci] = h2v1_fancy_upsample;
0000a4 4829 LDR r0,|L7.332|
0000a6 e000 B |L7.170|
|L7.168|
;;;460 else
;;;461 upsample->methods[ci] = h2v1_upsample;
0000a8 4829 LDR r0,|L7.336|
|L7.170|
0000aa f8c8001c STR r0,[r8,#0x1c] ;459
0000ae e02e B |L7.270|
|L7.176|
;;;462 } else if (h_in_group * 2 == h_out_group &&
0000b0 ebb60f4c CMP r6,r12,LSL #1
0000b4 d111 BNE |L7.218|
;;;463 v_in_group * 2 == v_out_group) {
0000b6 ebb70f40 CMP r7,r0,LSL #1
0000ba d10e BNE |L7.218|
;;;464 /* Special cases for 2h2v upsampling */
;;;465 if (do_fancy && compptr->downsampled_width > 2) {
0000bc f1bb0f00 CMP r11,#0
0000c0 d009 BEQ |L7.214|
0000c2 6aa8 LDR r0,[r5,#0x28]
0000c4 2802 CMP r0,#2
0000c6 d906 BLS |L7.214|
;;;466 upsample->methods[ci] = h2v2_fancy_upsample;
0000c8 4822 LDR r0,|L7.340|
;;;467 upsample->pub.need_context_rows = TRUE;
0000ca f8c8001c STR r0,[r8,#0x1c]
0000ce 2001 MOVS r0,#1
0000d0 f8c90008 STR r0,[r9,#8]
0000d4 e01b B |L7.270|
|L7.214|
;;;468 } else
;;;469 upsample->methods[ci] = h2v2_upsample;
0000d6 4820 LDR r0,|L7.344|
0000d8 e7e7 B |L7.170|
|L7.218|
;;;470 } else if ((h_out_group % h_in_group) == 0 &&
0000da fb96f1fc SDIV r1,r6,r12
0000de fb0c6211 MLS r2,r12,r1,r6
0000e2 b96a CBNZ r2,|L7.256|
;;;471 (v_out_group % v_in_group) == 0) {
0000e4 fb97f2f0 SDIV r2,r7,r0
0000e8 fb007012 MLS r0,r0,r2,r7
0000ec b940 CBNZ r0,|L7.256|
;;;472 /* Generic integral-factors upsampling method */
;;;473 upsample->methods[ci] = int_upsample;
0000ee 481b LDR r0,|L7.348|
;;;474 upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group);
0000f0 f8c8001c STR r0,[r8,#0x1c]
0000f4 eb09000a ADD r0,r9,r10
0000f8 f8001f44 STRB r1,[r0,#0x44]!
;;;475 upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group);
0000fc 7102 STRB r2,[r0,#4]
0000fe e006 B |L7.270|
|L7.256|
;;;476 } else
;;;477 ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
000100 6821 LDR r1,[r4,#0]
000102 2026 MOVS r0,#0x26
000104 6148 STR r0,[r1,#0x14]
000106 6820 LDR r0,[r4,#0]
000108 6801 LDR r1,[r0,#0]
00010a 4620 MOV r0,r4
00010c 4788 BLX r1
|L7.270|
;;;478 if (need_buffer) {
;;;479 upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray)
00010e f8d41134 LDR r1,[r4,#0x134]
000112 6f20 LDR r0,[r4,#0x70]
000114 f7fffffe BL jround_up
000118 6861 LDR r1,[r4,#4]
00011a 4602 MOV r2,r0
00011c 688e LDR r6,[r1,#8]
00011e f8d43138 LDR r3,[r4,#0x138]
000122 2101 MOVS r1,#1
000124 4620 MOV r0,r4
000126 47b0 BLX r6
000128 f8c8000c STR r0,[r8,#0xc]
|L7.300|
00012c f10a0a01 ADD r10,r10,#1 ;435
000130 3554 ADDS r5,r5,#0x54 ;435
|L7.306|
000132 6a60 LDR r0,[r4,#0x24] ;434
000134 4550 CMP r0,r10 ;434
000136 dc8c BGT |L7.82|
;;;480 ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;481 (JDIMENSION) jround_up((long) cinfo->output_width,
;;;482 (long) cinfo->max_h_samp_factor),
;;;483 (JDIMENSION) cinfo->max_v_samp_factor);
;;;484 }
;;;485 }
;;;486 }
000138 e8bd9ff0 POP {r4-r12,pc}
ENDP
|L7.316|
DCD start_pass_upsample
|L7.320|
DCD sep_upsample
|L7.324|
DCD noop_upsample
|L7.328|
DCD fullsize_upsample
|L7.332|
DCD h2v1_fancy_upsample
|L7.336|
DCD h2v1_upsample
|L7.340|
DCD h2v2_fancy_upsample
|L7.344|
DCD h2v2_upsample
|L7.348|
DCD int_upsample
AREA ||i.noop_upsample||, CODE, READONLY, ALIGN=1
noop_upsample PROC
;;;172 METHODDEF(void)
;;;173 noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
000000 2000 MOVS r0,#0
;;;174 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
;;;175 {
;;;176 GUI_USE_PARA(cinfo);
;;;177 GUI_USE_PARA(compptr);
;;;178 GUI_USE_PARA(input_data);
;;;179 *output_data_ptr = NULL; /* safety check */
;;;180 }
000002 6018 STR r0,[r3,#0]
000004 4770 BX lr
;;;181
ENDP
AREA ||i.sep_upsample||, CODE, READONLY, ALIGN=1
sep_upsample PROC
;;;88 METHODDEF(void)
;;;89 sep_upsample (j_decompress_ptr cinfo,
000000 e92d4ff8 PUSH {r3-r11,lr}
;;;90 JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
;;;91 JDIMENSION in_row_groups_avail,
;;;92 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;93 JDIMENSION out_rows_avail)
;;;94 {
000004 4606 MOV r6,r0
;;;95 my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
;;;96 int ci;
;;;97 jpeg_component_info * compptr;
;;;98 JDIMENSION num_rows;
;;;99
;;;100 GUI_USE_PARA(in_row_groups_avail);
;;;101 /* Fill the conversion buffer, if it's empty */
;;;102 if (upsample->next_row_out >= cinfo->max_v_samp_factor) {
000006 f8d041c4 LDR r4,[r0,#0x1c4]
00000a 468b MOV r11,r1 ;94
00000c 6ae0 LDR r0,[r4,#0x2c]
00000e f8d61138 LDR r1,[r6,#0x138]
000012 f8dda02c LDR r10,[sp,#0x2c] ;95
000016 4691 MOV r9,r2 ;94
000018 4288 CMP r0,r1
00001a db1c BLT |L9.86|
;;;103 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
00001c 2500 MOVS r5,#0
00001e f8d600d8 LDR r0,[r6,#0xd8]
000022 e012 B |L9.74|
|L9.36|
;;;104 ci++, compptr++) {
;;;105 /* Invoke per-component upsample method. Notice we pass a POINTER
;;;106 * to color_buf[ci], so that fullsize_upsample can change it.
;;;107 */
;;;108 (*upsample->methods[ci]) (cinfo, compptr,
000024 eb040085 ADD r0,r4,r5,LSL #2
000028 f8d91000 LDR r1,[r9,#0]
00002c 6b42 LDR r2,[r0,#0x34]
00002e f100030c ADD r3,r0,#0xc
000032 4351 MULS r1,r2,r1
000034 f85b2025 LDR r2,[r11,r5,LSL #2]
000038 69c7 LDR r7,[r0,#0x1c]
00003a eb020281 ADD r2,r2,r1,LSL #2
00003e 4641 MOV r1,r8
000040 4630 MOV r0,r6
000042 47b8 BLX r7
000044 1c6d ADDS r5,r5,#1 ;104
000046 f1080054 ADD r0,r8,#0x54 ;104
|L9.74|
00004a 4680 MOV r8,r0 ;103
00004c 6a70 LDR r0,[r6,#0x24] ;103
00004e 42a8 CMP r0,r5 ;103
000050 dce8 BGT |L9.36|
;;;109 input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]),
;;;110 upsample->color_buf + ci);
;;;111 }
;;;112 upsample->next_row_out = 0;
000052 2000 MOVS r0,#0
000054 62e0 STR r0,[r4,#0x2c]
|L9.86|
;;;113 }
;;;114
;;;115 /* Color-convert and emit rows */
;;;116
;;;117 /* How many we have in the buffer: */
;;;118 num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out);
000056 4602 MOV r2,r0
;;;119 /* Not more than the distance to the end of the image. Need this test
;;;120 * in case the image height is not a multiple of max_v_samp_factor:
;;;121 */
;;;122 if (num_rows > upsample->rows_to_go)
000058 f8d61138 LDR r1,[r6,#0x138]
00005c 6b20 LDR r0,[r4,#0x30]
00005e 1a8d SUBS r5,r1,r2 ;118
000060 42a8 CMP r0,r5
000062 d200 BCS |L9.102|
;;;123 num_rows = upsample->rows_to_go;
000064 4605 MOV r5,r0
|L9.102|
;;;124 /* And not more than what the client can accept: */
;;;125 out_rows_avail -= *out_row_ctr;
000066 f8da1000 LDR r1,[r10,#0]
00006a 980c LDR r0,[sp,#0x30]
00006c 1a40 SUBS r0,r0,r1
;;;126 if (num_rows > out_rows_avail)
00006e 4285 CMP r5,r0
000070 d900 BLS |L9.116|
;;;127 num_rows = out_rows_avail;
000072 4605 MOV r5,r0
|L9.116|
;;;128
;;;129 (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf,
000074 9500 STR r5,[sp,#0]
000076 980a LDR r0,[sp,#0x28]
000078 eb000381 ADD r3,r0,r1,LSL #2
00007c f8d601c8 LDR r0,[r6,#0x1c8]
000080 f104010c ADD r1,r4,#0xc
000084 6847 LDR r7,[r0,#4]
000086 4630 MOV r0,r6
000088 47b8 BLX r7
;;;130 (JDIMENSION) upsample->next_row_out,
;;;131 output_buf + *out_row_ctr,
;;;132 (int) num_rows);
;;;133
;;;134 /* Adjust counts */
;;;135 *out_row_ctr += num_rows;
00008a f8da0000 LDR r0,[r10,#0]
00008e 1941 ADDS r1,r0,r5
;;;136 upsample->rows_to_go -= num_rows;
000090 f8ca1000 STR r1,[r10,#0]
000094 6b20 LDR r0,[r4,#0x30]
000096 1b40 SUBS r0,r0,r5
;;;137 upsample->next_row_out += num_rows;
000098 6320 STR r0,[r4,#0x30]
00009a 6ae0 LDR r0,[r4,#0x2c]
00009c 4428 ADD r0,r0,r5
;;;138 /* When the buffer is emptied, declare this input row group consumed */
;;;139 if (upsample->next_row_out >= cinfo->max_v_samp_factor)
00009e 62e0 STR r0,[r4,#0x2c]
0000a0 f8d61138 LDR r1,[r6,#0x138]
0000a4 4288 CMP r0,r1
0000a6 db04 BLT |L9.178|
;;;140 (*in_row_group_ctr)++;
0000a8 f8d90000 LDR r0,[r9,#0]
0000ac 1c40 ADDS r0,r0,#1
0000ae f8c90000 STR r0,[r9,#0]
|L9.178|
;;;141 }
0000b2 e8bd8ff8 POP {r3-r11,pc}
;;;142
ENDP
AREA ||i.start_pass_upsample||, CODE, READONLY, ALIGN=1
start_pass_upsample PROC
;;;68 METHODDEF(void)
;;;69 start_pass_upsample (j_decompress_ptr cinfo)
000000 f8d011c4 LDR r1,[r0,#0x1c4]
;;;70 {
;;;71 my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
;;;72
;;;73 /* Mark the conversion buffer empty */
;;;74 upsample->next_row_out = cinfo->max_v_samp_factor;
000004 f8d02138 LDR r2,[r0,#0x138]
;;;75 /* Initialize total-height counter for detecting bottom of image */
;;;76 upsample->rows_to_go = cinfo->output_height;
000008 62ca STR r2,[r1,#0x2c]
00000a 6f40 LDR r0,[r0,#0x74]
;;;77 }
00000c 6308 STR r0,[r1,#0x30]
00000e 4770 BX lr
;;;78
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -