⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdphuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00002c  984c              LDR      r0,[sp,#0x130]
00002e  6a80              LDR      r0,[r0,#0x28]
000030  b920              CBNZ     r0,|L2.60|
;;;509          if (! process_restart(cinfo))
000032  4658              MOV      r0,r11
000034  f7fffffe          BL       process_restart
000038  2800              CMP      r0,#0
00003a  d071              BEQ      |L2.288|
                  |L2.60|
;;;510    	return FALSE;
;;;511      }
;;;512    
;;;513      /* If we've run out of data, don't modify the MCU.
;;;514       */
;;;515      if (! entropy->pub.insufficient_data) {
00003c  984c              LDR      r0,[sp,#0x130]
00003e  6880              LDR      r0,[r0,#8]
000040  2800              CMP      r0,#0
000042  d16e              BNE      |L2.290|
;;;516    
;;;517        /* Load up working state */
;;;518        BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
000044  f8cdb11c          STR      r11,[sp,#0x11c]
;;;519        EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
;;;520    
;;;521        /* There is always only one block per MCU */
;;;522        block = MCU_data[0];
;;;523        tbl = entropy->ac_derived_tbl;
000048  f8db0018          LDR      r0,[r11,#0x18]
;;;524    
;;;525        /* If we are forced to suspend, we must undo the assignments to any newly
;;;526         * nonzero coefficients in the block, because otherwise we'd get confused
;;;527         * next time about which coefficients were already nonzero.
;;;528         * But we need not undo addition of bits to already-nonzero coefficients;
;;;529         * instead, we can test the current bit to see if we already did it.
;;;530         */
;;;531        num_newnz = 0;
00004c  2200              MOVS     r2,#0
00004e  9241              STR      r2,[sp,#0x104]        ;518
000050  6803              LDR      r3,[r0,#0]            ;518
000052  9343              STR      r3,[sp,#0x10c]        ;518
000054  6840              LDR      r0,[r0,#4]            ;518
000056  994c              LDR      r1,[sp,#0x130]
000058  9044              STR      r0,[sp,#0x110]        ;518
00005a  e9d16403          LDRD     r6,r4,[r1,#0xc]       ;522
00005e  6948              LDR      r0,[r1,#0x14]         ;522
000060  682b              LDR      r3,[r5,#0]            ;523
000062  6bc9              LDR      r1,[r1,#0x3c]         ;523
;;;532    
;;;533        /* initialize coefficient loop counter to start of band */
;;;534        k = cinfo->Ss;
000064  9049              STR      r0,[sp,#0x124]
000066  f8db5190          LDR      r5,[r11,#0x190]       ;522
;;;535    
;;;536        if (EOBRUN == 0) {
00006a  9348              STR      r3,[sp,#0x120]
00006c  2800              CMP      r0,#0
00006e  9142              STR      r1,[sp,#0x108]
000070  d178              BNE      |L2.356|
000072  e0b9              B        |L2.488|
                  |L2.116|
;;;537          for (; k <= Se; k++) {
;;;538    	HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
000074  2c08              CMP      r4,#8
000076  da0d              BGE      |L2.148|
000078  2300              MOVS     r3,#0
00007a  4622              MOV      r2,r4
00007c  4631              MOV      r1,r6
00007e  a843              ADD      r0,sp,#0x10c
000080  f7fffffe          BL       jpeg_fill_bit_buffer
000084  2800              CMP      r0,#0
                  |L2.134|
000086  d06e              BEQ      |L2.358|
000088  9c46              LDR      r4,[sp,#0x118]
00008a  9e45              LDR      r6,[sp,#0x114]
00008c  2c08              CMP      r4,#8
00008e  da01              BGE      |L2.148|
000090  2301              MOVS     r3,#1
000092  e011              B        |L2.184|
                  |L2.148|
000094  f1a40008          SUB      r0,r4,#8
000098  fa46f000          ASR      r0,r6,r0
00009c  9942              LDR      r1,[sp,#0x108]
00009e  b2c0              UXTB     r0,r0
0000a0  eb010180          ADD      r1,r1,r0,LSL #2
0000a4  f8d11090          LDR      r1,[r1,#0x90]
0000a8  b129              CBZ      r1,|L2.182|
0000aa  1a64              SUBS     r4,r4,r1
0000ac  9942              LDR      r1,[sp,#0x108]
0000ae  4408              ADD      r0,r0,r1
0000b0  f8900490          LDRB     r0,[r0,#0x490]
0000b4  e00b              B        |L2.206|
                  |L2.182|
0000b6  2309              MOVS     r3,#9
                  |L2.184|
0000b8  9300              STR      r3,[sp,#0]
0000ba  4622              MOV      r2,r4
0000bc  4631              MOV      r1,r6
0000be  a843              ADD      r0,sp,#0x10c
0000c0  9b42              LDR      r3,[sp,#0x108]
0000c2  f7fffffe          BL       jpeg_huff_decode
0000c6  2800              CMP      r0,#0
0000c8  db4d              BLT      |L2.358|
0000ca  9e45              LDR      r6,[sp,#0x114]
0000cc  9c46              LDR      r4,[sp,#0x118]
                  |L2.206|
;;;539    	r = s >> 4;
0000ce  ea4f1920          ASR      r9,r0,#4
;;;540    	s &= 15;
0000d2  f010080f          ANDS     r8,r0,#0xf
;;;541    	if (s) {
0000d6  d025              BEQ      |L2.292|
;;;542    	  if (s != 1)		/* size of new coef should always be 1 */
0000d8  f1b80f01          CMP      r8,#1
0000dc  d00a              BEQ      |L2.244|
;;;543    	    WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
0000de  f8db1000          LDR      r1,[r11,#0]
0000e2  2076              MOVS     r0,#0x76
0000e4  6148              STR      r0,[r1,#0x14]
0000e6  f8db0000          LDR      r0,[r11,#0]
0000ea  f04f31ff          MOV      r1,#0xffffffff
0000ee  6842              LDR      r2,[r0,#4]
0000f0  4658              MOV      r0,r11
0000f2  4790              BLX      r2
                  |L2.244|
;;;544    	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
0000f4  2c01              CMP      r4,#1
0000f6  da09              BGE      |L2.268|
0000f8  2301              MOVS     r3,#1
0000fa  4622              MOV      r2,r4
0000fc  4631              MOV      r1,r6
0000fe  a843              ADD      r0,sp,#0x10c
000100  f7fffffe          BL       jpeg_fill_bit_buffer
000104  2800              CMP      r0,#0
000106  d0be              BEQ      |L2.134|
000108  9e45              LDR      r6,[sp,#0x114]
00010a  9c46              LDR      r4,[sp,#0x118]
                  |L2.268|
;;;545    	  if (GET_BITS(1))
00010c  1e64              SUBS     r4,r4,#1
00010e  fa46f004          ASR      r0,r6,r4
000112  07c0              LSLS     r0,r0,#31
000114  d001              BEQ      |L2.282|
;;;546    	    s = p1;		/* newly nonzero coef is positive */
000116  4650              MOV      r0,r10
000118  e000              B        |L2.284|
                  |L2.282|
;;;547    	  else
;;;548    	    s = m1;		/* newly nonzero coef is negative */
00011a  984a              LDR      r0,[sp,#0x128]
                  |L2.284|
00011c  4680              MOV      r8,r0
00011e  e023              B        |L2.360|
                  |L2.288|
000120  e0ba              B        |L2.664|
                  |L2.290|
000122  e0a2              B        |L2.618|
                  |L2.292|
;;;549    	} else {
;;;550    	  if (r != 15) {
000124  f1b90f0f          CMP      r9,#0xf
000128  d01e              BEQ      |L2.360|
;;;551    	    EOBRUN = 1 << r;	/* EOBr, run length is 2^r + appended bits */
00012a  2701              MOVS     r7,#1
00012c  fa07f709          LSL      r7,r7,r9
;;;552    	    if (r) {
000130  9749              STR      r7,[sp,#0x124]
000132  f1b90f00          CMP      r9,#0
000136  d05b              BEQ      |L2.496|
;;;553    	      CHECK_BIT_BUFFER(br_state, r, goto undoit);
000138  454c              CMP      r4,r9
00013a  da09              BGE      |L2.336|
00013c  464b              MOV      r3,r9
00013e  4622              MOV      r2,r4
000140  4631              MOV      r1,r6
000142  a843              ADD      r0,sp,#0x10c
000144  f7fffffe          BL       jpeg_fill_bit_buffer
000148  2800              CMP      r0,#0
00014a  d09c              BEQ      |L2.134|
00014c  9e45              LDR      r6,[sp,#0x114]
00014e  9c46              LDR      r4,[sp,#0x118]
                  |L2.336|
;;;554    	      r = GET_BITS(r);
;;;555    	      EOBRUN += r;
000150  9949              LDR      r1,[sp,#0x124]
000152  eba40409          SUB      r4,r4,r9              ;554
000156  fa46f004          ASR      r0,r6,r4              ;554
00015a  1e7f              SUBS     r7,r7,#1              ;554
00015c  4038              ANDS     r0,r0,r7              ;554
00015e  4408              ADD      r0,r0,r1
000160  9049              STR      r0,[sp,#0x124]
000162  e045              B        |L2.496|
                  |L2.356|
000164  e06c              B        |L2.576|
                  |L2.358|
000166  e089              B        |L2.636|
                  |L2.360|
;;;556    	    }
;;;557    	    break;		/* rest of block is handled by EOB logic */
;;;558    	  }
;;;559    	  /* note s = 0 for processing ZRL */
;;;560    	}
;;;561    	/* Advance over already-nonzero coefs and r still-zero coefs,
;;;562    	 * appending correction bits to the nonzeroes.  A correction bit is 1
;;;563    	 * if the absolute value of the coefficient must be increased.
;;;564    	 */
;;;565    	do {
;;;566    	  thiscoef = *block + jpeg_natural_order[k];
000168  484c              LDR      r0,|L2.668|
00016a  9948              LDR      r1,[sp,#0x120]
00016c  f8500025          LDR      r0,[r0,r5,LSL #2]
000170  eb010740          ADD      r7,r1,r0,LSL #1
;;;567    	  if (*thiscoef != 0) {
000174  8838              LDRH     r0,[r7,#0]
000176  b1e8              CBZ      r0,|L2.436|
;;;568    	    CHECK_BIT_BUFFER(br_state, 1, goto undoit);
000178  2c01              CMP      r4,#1
00017a  da09              BGE      |L2.400|
00017c  2301              MOVS     r3,#1
00017e  4622              MOV      r2,r4
000180  4631              MOV      r1,r6
000182  a843              ADD      r0,sp,#0x10c
000184  f7fffffe          BL       jpeg_fill_bit_buffer
000188  2800              CMP      r0,#0
00018a  d077              BEQ      |L2.636|
00018c  9e45              LDR      r6,[sp,#0x114]
00018e  9c46              LDR      r4,[sp,#0x118]
                  |L2.400|
;;;569    	    if (GET_BITS(1)) {
000190  1e64              SUBS     r4,r4,#1
000192  fa46f004          ASR      r0,r6,r4
000196  07c0              LSLS     r0,r0,#31
000198  d011              BEQ      |L2.446|
;;;570    	      if ((*thiscoef & p1) == 0) { /* do nothing if already set it */
00019a  f9b70000          LDRSH    r0,[r7,#0]
00019e  ea100f0a          TST      r0,r10
0001a2  d10c              BNE      |L2.446|
;;;571    		if (*thiscoef >= 0)
0001a4  2800              CMP      r0,#0
0001a6  db01              BLT      |L2.428|
;;;572    		  *thiscoef += p1;
0001a8  4651              MOV      r1,r10
0001aa  e000              B        |L2.430|
                  |L2.428|
;;;573    		else
;;;574    		  *thiscoef += m1;
0001ac  994a              LDR      r1,[sp,#0x128]
                  |L2.430|
0001ae  4408              ADD      r0,r0,r1              ;572
0001b0  8038              STRH     r0,[r7,#0]            ;572
0001b2  e004              B        |L2.446|
                  |L2.436|
;;;575    	      }
;;;576    	    }
;;;577    	  } else {
;;;578    	    if (--r < 0)
0001b4  f1a90001          SUB      r0,r9,#1
0001b8  f1b00900          SUBS     r9,r0,#0
0001bc  db03              BLT      |L2.454|
                  |L2.446|
;;;579    	      break;		/* reached target zero coefficient */
;;;580    	  }
;;;581    	  k++;
;;;582    	} while (k <= Se);
0001be  984b              LDR      r0,[sp,#0x12c]
0001c0  1c6d              ADDS     r5,r5,#1              ;581
0001c2  4285              CMP      r5,r0
0001c4  ddd0              BLE      |L2.360|
                  |L2.454|
;;;583    	if (s) {
0001c6  f1b80f00          CMP      r8,#0
0001ca  d00c              BEQ      |L2.486|
;;;584    	  int pos = jpeg_natural_order[k];
0001cc  4833              LDR      r0,|L2.668|
;;;585    	  /* Output newly nonzero coefficient */
;;;586    	  (*block)[pos] = (JCOEF) s;
0001ce  9a48              LDR      r2,[sp,#0x120]
0001d0  f8500025          LDR      r0,[r0,r5,LSL #2]     ;584
0001d4  f8228010          STRH     r8,[r2,r0,LSL #1]
;;;587    	  /* Remember its position in case we have to suspend */
;;;588    	  newnz_pos[num_newnz++] = pos;
0001d8  9941              LDR      r1,[sp,#0x104]
0001da  aa01              ADD      r2,sp,#4
0001dc  f8420021          STR      r0,[r2,r1,LSL #2]
0001e0  9841              LDR      r0,[sp,#0x104]
0001e2  1c40              ADDS     r0,r0,#1
0001e4  9041              STR      r0,[sp,#0x104]
                  |L2.486|
0001e6  1c6d              ADDS     r5,r5,#1              ;537
                  |L2.488|
0001e8  984b              LDR      r0,[sp,#0x12c]        ;537

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -