📄 jdmaster.txt
字号:
00018a e7ff B |L5.396|
|L5.396|
;;;413 } else {
;;;414 /* For a nonprogressive multiscan file, estimate 1 scan per component. */
;;;415 nscans = cinfo->num_components;
;;;416 }
;;;417 cinfo->progress->pass_counter = 0L;
;;;418 cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
00018c 604f STR r7,[r1,#4]
00018e f8d41140 LDR r1,[r4,#0x140]
000192 68a2 LDR r2,[r4,#8]
000194 4341 MULS r1,r0,r1
;;;419 cinfo->progress->completed_passes = 0;
000196 6091 STR r1,[r2,#8]
000198 68a1 LDR r1,[r4,#8]
;;;420 cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2);
00019a 2003 MOVS r0,#3
00019c 60cf STR r7,[r1,#0xc]
00019e 6ee1 LDR r1,[r4,#0x6c]
0001a0 b901 CBNZ r1,|L5.420|
0001a2 2002 MOVS r0,#2
|L5.420|
0001a4 68a1 LDR r1,[r4,#8]
;;;421 /* Count the input pass as done */
;;;422 master->pass_number++;
0001a6 6108 STR r0,[r1,#0x10]
0001a8 68e8 LDR r0,[r5,#0xc]
0001aa 1c40 ADDS r0,r0,#1
;;;423 }
0001ac 60e8 STR r0,[r5,#0xc]
|L5.430|
;;;424 #endif /* D_MULTISCAN_FILES_SUPPORTED */
;;;425 }
0001ae e8bd81f0 POP {r4-r8,pc}
;;;426
ENDP
AREA ||i.prepare_for_output_pass||, CODE, READONLY, ALIGN=1
prepare_for_output_pass PROC
;;;437 METHODDEF(void)
;;;438 prepare_for_output_pass (j_decompress_ptr cinfo)
000000 b570 PUSH {r4-r6,lr}
;;;439 {
;;;440 my_master_ptr master = (my_master_ptr) cinfo->master;
;;;441
;;;442 if (master->pub.is_dummy_pass) {
000002 f8d051a4 LDR r5,[r0,#0x1a4]
000006 4604 MOV r4,r0 ;439
000008 68a8 LDR r0,[r5,#8]
00000a b190 CBZ r0,|L6.50|
;;;443 #ifdef QUANT_2PASS_SUPPORTED
;;;444 /* Final pass of 2-pass quantization */
;;;445 master->pub.is_dummy_pass = FALSE;
00000c 2000 MOVS r0,#0
;;;446 (*cinfo->cquantize->start_pass) (cinfo, FALSE);
00000e 60a8 STR r0,[r5,#8]
000010 f8d401cc LDR r0,[r4,#0x1cc]
000014 2100 MOVS r1,#0
000016 6802 LDR r2,[r0,#0]
000018 4620 MOV r0,r4
00001a 4790 BLX r2
;;;447 (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST);
00001c f8d401b0 LDR r0,[r4,#0x1b0]
000020 2102 MOVS r1,#2
000022 6802 LDR r2,[r0,#0]
000024 4620 MOV r0,r4
000026 4790 BLX r2
;;;448 (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST);
000028 f8d401a8 LDR r0,[r4,#0x1a8]
00002c 2102 MOVS r1,#2
00002e 6802 LDR r2,[r0,#0]
000030 e049 B |L6.198|
|L6.50|
;;;449 #else
;;;450 ERREXIT(cinfo, JERR_NOT_COMPILED);
;;;451 #endif /* QUANT_2PASS_SUPPORTED */
;;;452 } else {
;;;453 if (cinfo->quantize_colors && cinfo->colormap == NULL) {
000032 6d60 LDR r0,[r4,#0x54]
000034 b1c8 CBZ r0,|L6.106|
000036 f8d40088 LDR r0,[r4,#0x88]
00003a b9b0 CBNZ r0,|L6.106|
;;;454 /* Select new quantization method */
;;;455 if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) {
00003c 6de0 LDR r0,[r4,#0x5c]
00003e b138 CBZ r0,|L6.80|
000040 6ee0 LDR r0,[r4,#0x6c]
000042 b128 CBZ r0,|L6.80|
;;;456 cinfo->cquantize = master->quantizer_2pass;
000044 69a9 LDR r1,[r5,#0x18]
;;;457 master->pub.is_dummy_pass = TRUE;
000046 2001 MOVS r0,#1
000048 f8c411cc STR r1,[r4,#0x1cc]
00004c 60a8 STR r0,[r5,#8]
00004e e00c B |L6.106|
|L6.80|
;;;458 } else if (cinfo->enable_1pass_quant) {
000050 6e60 LDR r0,[r4,#0x64]
000052 b118 CBZ r0,|L6.92|
;;;459 cinfo->cquantize = master->quantizer_1pass;
000054 6968 LDR r0,[r5,#0x14]
000056 f8c401cc STR r0,[r4,#0x1cc]
00005a e006 B |L6.106|
|L6.92|
;;;460 } else {
;;;461 ERREXIT(cinfo, JERR_MODE_CHANGE);
00005c 6821 LDR r1,[r4,#0]
00005e 202e MOVS r0,#0x2e
000060 6148 STR r0,[r1,#0x14]
000062 6820 LDR r0,[r4,#0]
000064 6801 LDR r1,[r0,#0]
000066 4620 MOV r0,r4
000068 4788 BLX r1
|L6.106|
;;;462 }
;;;463 }
;;;464 (*cinfo->idct->start_pass) (cinfo);
00006a f8d401c0 LDR r0,[r4,#0x1c0]
00006e 6801 LDR r1,[r0,#0]
000070 4620 MOV r0,r4
000072 4788 BLX r1
;;;465 (*cinfo->coef->start_output_pass) (cinfo);
000074 f8d401ac LDR r0,[r4,#0x1ac]
000078 6881 LDR r1,[r0,#8]
00007a 4620 MOV r0,r4
00007c 4788 BLX r1
;;;466 if (! cinfo->raw_data_out) {
00007e 6c60 LDR r0,[r4,#0x44]
000080 bb18 CBNZ r0,|L6.202|
;;;467 if (! master->using_merged_upsample)
000082 6928 LDR r0,[r5,#0x10]
000084 b920 CBNZ r0,|L6.144|
;;;468 (*cinfo->cconvert->start_pass) (cinfo);
000086 f8d401c8 LDR r0,[r4,#0x1c8]
00008a 6801 LDR r1,[r0,#0]
00008c 4620 MOV r0,r4
00008e 4788 BLX r1
|L6.144|
;;;469 (*cinfo->upsample->start_pass) (cinfo);
000090 f8d401c4 LDR r0,[r4,#0x1c4]
000094 6801 LDR r1,[r0,#0]
000096 4620 MOV r0,r4
000098 4788 BLX r1
;;;470 if (cinfo->quantize_colors)
00009a 6d60 LDR r0,[r4,#0x54]
00009c b128 CBZ r0,|L6.170|
;;;471 (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass);
00009e f8d401cc LDR r0,[r4,#0x1cc]
0000a2 68a9 LDR r1,[r5,#8]
0000a4 6802 LDR r2,[r0,#0]
0000a6 4620 MOV r0,r4
0000a8 4790 BLX r2
|L6.170|
;;;472 (*cinfo->post->start_pass) (cinfo,
0000aa 68a8 LDR r0,[r5,#8]
0000ac b108 CBZ r0,|L6.178|
;;;473 (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
0000ae 2103 MOVS r1,#3
0000b0 e000 B |L6.180|
|L6.178|
0000b2 2100 MOVS r1,#0
|L6.180|
0000b4 f8d401b0 LDR r0,[r4,#0x1b0]
0000b8 6802 LDR r2,[r0,#0]
0000ba 4620 MOV r0,r4
0000bc 4790 BLX r2
;;;474 (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
0000be f8d401a8 LDR r0,[r4,#0x1a8]
0000c2 2100 MOVS r1,#0
0000c4 6802 LDR r2,[r0,#0]
|L6.198|
0000c6 4620 MOV r0,r4
0000c8 4790 BLX r2
|L6.202|
;;;475 }
;;;476 }
;;;477
;;;478 /* Set up progress monitor's pass info if present */
;;;479 if (cinfo->progress != NULL) {
0000ca 68a0 LDR r0,[r4,#8]
0000cc 2800 CMP r0,#0
0000ce d018 BEQ |L6.258|
;;;480 cinfo->progress->completed_passes = master->pass_number;
0000d0 68eb LDR r3,[r5,#0xc]
;;;481 cinfo->progress->total_passes = master->pass_number +
0000d2 60c3 STR r3,[r0,#0xc]
;;;482 (master->pub.is_dummy_pass ? 2 : 1);
0000d4 e9d53002 LDRD r3,r0,[r5,#8]
0000d8 2102 MOVS r1,#2
0000da 460a MOV r2,r1
0000dc b903 CBNZ r3,|L6.224|
0000de 2201 MOVS r2,#1
|L6.224|
0000e0 4410 ADD r0,r0,r2
0000e2 68a2 LDR r2,[r4,#8]
;;;483 /* In buffered-image mode, we assume one more output pass if EOI not
;;;484 * yet reached, but no more passes if EOI has been reached.
;;;485 */
;;;486 if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) {
0000e4 6110 STR r0,[r2,#0x10]
0000e6 6c22 LDR r2,[r4,#0x40]
0000e8 2a00 CMP r2,#0
0000ea d00a BEQ |L6.258|
0000ec f8d421b4 LDR r2,[r4,#0x1b4]
0000f0 6952 LDR r2,[r2,#0x14]
0000f2 2a00 CMP r2,#0
0000f4 d105 BNE |L6.258|
;;;487 cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1);
0000f6 6ee3 LDR r3,[r4,#0x6c]
0000f8 68a2 LDR r2,[r4,#8]
0000fa b903 CBNZ r3,|L6.254|
0000fc 2101 MOVS r1,#1
|L6.254|
0000fe 4408 ADD r0,r0,r1
000100 6110 STR r0,[r2,#0x10]
|L6.258|
;;;488 }
;;;489 }
;;;490 }
000102 bd70 POP {r4-r6,pc}
;;;491
ENDP
AREA ||i.use_merged_upsample||, CODE, READONLY, ALIGN=1
use_merged_upsample PROC
;;;43 LOCAL(boolean)
;;;44 use_merged_upsample (j_decompress_ptr cinfo)
000000 6cc1 LDR r1,[r0,#0x4c]
;;;45 {
;;;46 #ifdef UPSAMPLE_MERGING_SUPPORTED
;;;47 /* Merging is the equivalent of plain box-filter upsampling */
;;;48 if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
000002 bb91 CBNZ r1,|L7.106|
000004 f8d0112c LDR r1,[r0,#0x12c]
000008 bb79 CBNZ r1,|L7.106|
;;;49 return FALSE;
;;;50 /* jdmerge.c only supports YCC=>RGB color conversion */
;;;51 if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 ||
00000a f8901028 LDRB r1,[r0,#0x28]
00000e 2903 CMP r1,#3
000010 d12b BNE |L7.106|
000012 6a41 LDR r1,[r0,#0x24]
000014 2903 CMP r1,#3
000016 d128 BNE |L7.106|
;;;52 cinfo->out_color_space != JCS_RGB ||
000018 f8901029 LDRB r1,[r0,#0x29]
00001c 2902 CMP r1,#2
00001e d124 BNE |L7.106|
;;;53 cinfo->out_color_components != RGB_PIXELSIZE)
000020 6f81 LDR r1,[r0,#0x78]
000022 2903 CMP r1,#3
000024 d121 BNE |L7.106|
;;;54 return FALSE;
;;;55 /* and it only handles 2h1v or 2h2v sampling ratios */
;;;56 if (cinfo->comp_info[0].h_samp_factor != 2 ||
000026 f8d010d8 LDR r1,[r0,#0xd8]
00002a 688a LDR r2,[r1,#8]
00002c 2a02 CMP r2,#2
00002e d11c BNE |L7.106|
;;;57 cinfo->comp_info[1].h_samp_factor != 1 ||
000030 6dca LDR r2,[r1,#0x5c]
000032 2a01 CMP r2,#1
000034 d119 BNE |L7.106|
;;;58 cinfo->comp_info[2].h_samp_factor != 1 ||
000036 f8d120b0 LDR r2,[r1,#0xb0]
00003a 2a01 CMP r2,#1
00003c d115 BNE |L7.106|
;;;59 cinfo->comp_info[0].v_samp_factor > 2 ||
00003e 68ca LDR r2,[r1,#0xc]
000040 2a02 CMP r2,#2
000042 dc12 BGT |L7.106|
;;;60 cinfo->comp_info[1].v_samp_factor != 1 ||
000044 6e0a LDR r2,[r1,#0x60]
000046 2a01 CMP r2,#1
000048 d10f BNE |L7.106|
;;;61 cinfo->comp_info[2].v_samp_factor != 1)
00004a f8d120b4 LDR r2,[r1,#0xb4]
00004e 2a01 CMP r2,#1
000050 d10b BNE |L7.106|
;;;62 return FALSE;
;;;63 /* furthermore, it doesn't work if we've scaled the IDCTs differently */
;;;64 if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
000052 6a4a LDR r2,[r1,#0x24]
000054 f8d0013c LDR r0,[r0,#0x13c]
000058 4282 CMP r2,r0
00005a d106 BNE |L7.106|
;;;65 cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
00005c 6f8a LDR r2,[r1,#0x78]
00005e 4282 CMP r2,r0
000060 d103 BNE |L7.106|
;;;66 cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size)
000062 f8d110cc LDR r1,[r1,#0xcc]
000066 4281 CMP r1,r0
000068 d001 BEQ |L7.110|
|L7.106|
;;;67 return FALSE;
00006a 2000 MOVS r0,#0
;;;68 /* ??? also need to test for upsample-time rescaling, when & if supported */
;;;69 return TRUE; /* by golly, it'll work... */
;;;70 #else
;;;71 return FALSE;
;;;72 #endif
;;;73 }
00006c 4770 BX lr
|L7.110|
00006e 2001 MOVS r0,#1 ;69
000070 4770 BX lr
;;;74
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -