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

📄 jdphuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0001ea  4285              CMP      r5,r0                 ;537
0001ec  f77faf42          BLE      |L2.116|
                  |L2.496|
;;;589    	}
;;;590          }
;;;591        }
;;;592    
;;;593        if (EOBRUN > 0) {
0001f0  9849              LDR      r0,[sp,#0x124]
0001f2  b358              CBZ      r0,|L2.588|
0001f4  e024              B        |L2.576|
                  |L2.502|
;;;594          /* Scan any remaining coefficient positions after the end-of-band
;;;595           * (the last newly nonzero coefficient, if any).  Append a correction
;;;596           * bit to each already-nonzero coefficient.  A correction bit is 1
;;;597           * if the absolute value of the coefficient must be increased.
;;;598           */
;;;599          for (; k <= Se; k++) {
;;;600    	thiscoef = *block + jpeg_natural_order[k];
0001f6  4829              LDR      r0,|L2.668|
0001f8  9948              LDR      r1,[sp,#0x120]
0001fa  f8500025          LDR      r0,[r0,r5,LSL #2]
0001fe  eb010740          ADD      r7,r1,r0,LSL #1
;;;601    	if (*thiscoef != 0) {
000202  8838              LDRH     r0,[r7,#0]
000204  b1d8              CBZ      r0,|L2.574|
;;;602    	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
000206  2c01              CMP      r4,#1
000208  da08              BGE      |L2.540|
00020a  2301              MOVS     r3,#1
00020c  4622              MOV      r2,r4
00020e  4631              MOV      r1,r6
000210  a843              ADD      r0,sp,#0x10c
000212  f7fffffe          BL       jpeg_fill_bit_buffer
000216  b388              CBZ      r0,|L2.636|
000218  9e45              LDR      r6,[sp,#0x114]
00021a  9c46              LDR      r4,[sp,#0x118]
                  |L2.540|
;;;603    	  if (GET_BITS(1)) {
00021c  1e64              SUBS     r4,r4,#1
00021e  fa46f004          ASR      r0,r6,r4
000222  07c0              LSLS     r0,r0,#31
000224  d00b              BEQ      |L2.574|
;;;604    	    if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */
000226  f9b70000          LDRSH    r0,[r7,#0]
00022a  ea100f0a          TST      r0,r10
00022e  d106              BNE      |L2.574|
;;;605    	      if (*thiscoef >= 0)
000230  2800              CMP      r0,#0
000232  db01              BLT      |L2.568|
;;;606    		*thiscoef += p1;
000234  4651              MOV      r1,r10
000236  e000              B        |L2.570|
                  |L2.568|
;;;607    	      else
;;;608    		*thiscoef += m1;
000238  994a              LDR      r1,[sp,#0x128]
                  |L2.570|
00023a  4408              ADD      r0,r0,r1              ;606
00023c  8038              STRH     r0,[r7,#0]            ;606
                  |L2.574|
00023e  1c6d              ADDS     r5,r5,#1              ;599
                  |L2.576|
000240  984b              LDR      r0,[sp,#0x12c]        ;599
000242  4285              CMP      r5,r0                 ;599
000244  ddd7              BLE      |L2.502|
;;;609    	    }
;;;610    	  }
;;;611    	}
;;;612          }
;;;613          /* Count one block completed in EOB run */
;;;614          EOBRUN--;
000246  9849              LDR      r0,[sp,#0x124]
000248  1e40              SUBS     r0,r0,#1
00024a  9049              STR      r0,[sp,#0x124]
                  |L2.588|
;;;615        }
;;;616    
;;;617        /* Completed MCU, so update state */
;;;618        BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
00024c  f8db1018          LDR      r1,[r11,#0x18]
000250  9843              LDR      r0,[sp,#0x10c]
000252  6008              STR      r0,[r1,#0]
000254  f8db0018          LDR      r0,[r11,#0x18]
000258  9944              LDR      r1,[sp,#0x110]
00025a  6041              STR      r1,[r0,#4]
00025c  984c              LDR      r0,[sp,#0x130]
00025e  60c6              STR      r6,[r0,#0xc]
000260  984c              LDR      r0,[sp,#0x130]
;;;619        entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
000262  6104              STR      r4,[r0,#0x10]
000264  994c              LDR      r1,[sp,#0x130]
000266  9849              LDR      r0,[sp,#0x124]
000268  6148              STR      r0,[r1,#0x14]
                  |L2.618|
;;;620      }
;;;621    
;;;622      /* Account for restart interval (no-op if not using restarts) */
;;;623      entropy->restarts_to_go--;
00026a  984c              LDR      r0,[sp,#0x130]
00026c  994c              LDR      r1,[sp,#0x130]
00026e  6a80              LDR      r0,[r0,#0x28]
000270  1e40              SUBS     r0,r0,#1
;;;624    
;;;625      return TRUE;
000272  6288              STR      r0,[r1,#0x28]
000274  2001              MOVS     r0,#1
                  |L2.630|
;;;626    
;;;627    undoit:
;;;628      /* Re-zero any output coefficients that we made newly nonzero */
;;;629      while (num_newnz > 0)
;;;630        (*block)[newnz_pos[--num_newnz]] = 0;
;;;631    
;;;632      return FALSE;
;;;633    }
000276  b04d              ADD      sp,sp,#0x134
000278  e8bd8ff0          POP      {r4-r11,pc}
                  |L2.636|
00027c  e007              B        |L2.654|
                  |L2.638|
00027e  1e40              SUBS     r0,r0,#1              ;630
000280  9041              STR      r0,[sp,#0x104]        ;630
000282  f8520020          LDR      r0,[r2,r0,LSL #2]     ;630
000286  9b48              LDR      r3,[sp,#0x120]        ;630
000288  f8231010          STRH     r1,[r3,r0,LSL #1]     ;630
00028c  e001              B        |L2.658|
                  |L2.654|
00028e  aa01              ADD      r2,sp,#4              ;504
000290  2100              MOVS     r1,#0                 ;507
                  |L2.658|
000292  9841              LDR      r0,[sp,#0x104]        ;629
000294  2800              CMP      r0,#0                 ;629
000296  dcf2              BGT      |L2.638|
                  |L2.664|
000298  2000              MOVS     r0,#0                 ;632
00029a  e7ec              B        |L2.630|
;;;634    
                          ENDP

                  |L2.668|
                          DCD      jpeg_natural_order

                          AREA ||i.decode_mcu_DC_first||, CODE, READONLY, ALIGN=2

                  decode_mcu_DC_first PROC
;;;285    METHODDEF(boolean)
;;;286    decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
000000  e92d4ff3          PUSH     {r0,r1,r4-r11,lr}
;;;287    {   
000004  4606              MOV      r6,r0
;;;288      phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;289      int Al = cinfo->Al;
000006  f8d071bc          LDR      r7,[r0,#0x1bc]
00000a  b08d              SUB      sp,sp,#0x34           ;287
00000c  f8d0019c          LDR      r0,[r0,#0x19c]
000010  f8d61114          LDR      r1,[r6,#0x114]
;;;290      register int s, r;
;;;291      int blkn, ci;
;;;292      JBLOCKROW block;
;;;293      BITREAD_STATE_VARS;
;;;294      savable_state state;
;;;295      d_derived_tbl * tbl;
;;;296      jpeg_component_info * compptr;
;;;297    
;;;298      /* Process restart marker if needed; may have to suspend */
;;;299      if (cinfo->restart_interval) {
000014  900b              STR      r0,[sp,#0x2c]
000016  b131              CBZ      r1,|L3.38|
;;;300        if (entropy->restarts_to_go == 0)
000018  6ab8              LDR      r0,[r7,#0x28]
00001a  b920              CBNZ     r0,|L3.38|
;;;301          if (! process_restart(cinfo))
00001c  4630              MOV      r0,r6
00001e  f7fffffe          BL       process_restart
000022  2800              CMP      r0,#0
000024  d056              BEQ      |L3.212|
                  |L3.38|
;;;302    	return FALSE;
;;;303      }
;;;304    
;;;305      /* If we've run out of data, just leave the MCU set to zeroes.
;;;306       * This way, we return uniform gray for the remainder of the segment.
;;;307       */
;;;308      if (! entropy->pub.insufficient_data) {
000026  68b8              LDR      r0,[r7,#8]
000028  2800              CMP      r0,#0
00002a  d17e              BNE      |L3.298|
;;;309    
;;;310        /* Load up working state */
;;;311        BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
00002c  960a              STR      r6,[sp,#0x28]
00002e  69b0              LDR      r0,[r6,#0x18]
;;;312        ASSIGN_STATE(state, entropy->saved);
000030  2214              MOVS     r2,#0x14
000032  6801              LDR      r1,[r0,#0]            ;311
000034  9106              STR      r1,[sp,#0x18]         ;311
000036  6840              LDR      r0,[r0,#4]            ;311
000038  9007              STR      r0,[sp,#0x1c]         ;311
00003a  e9d78403          LDRD     r8,r4,[r7,#0xc]
00003e  f1070114          ADD      r1,r7,#0x14
000042  a801              ADD      r0,sp,#4
000044  910c              STR      r1,[sp,#0x30]
000046  f7fffffe          BL       __aeabi_memcpy4
;;;313    
;;;314        /* Outer loop handles each block in the MCU */
;;;315    
;;;316        for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
00004a  2000              MOVS     r0,#0
00004c  e066              B        |L3.284|
                  |L3.78|
;;;317          block = MCU_data[blkn];
00004e  980e              LDR      r0,[sp,#0x38]
;;;318          ci = cinfo->MCU_membership[blkn];
;;;319          compptr = cinfo->cur_comp_info[ci];
;;;320          tbl = entropy->derived_tbls[compptr->dc_tbl_no];
;;;321    
;;;322          /* Decode a single block's worth of coefficients */
;;;323    
;;;324          /* Section F.2.2.1: decode the DC coefficient difference */
;;;325          HUFF_DECODE(s, br_state, tbl, return FALSE, label1);
000050  2c08              CMP      r4,#8
000052  f850b029          LDR      r11,[r0,r9,LSL #2]    ;317
000056  eb060089          ADD      r0,r6,r9,LSL #2       ;318
00005a  f8d0a168          LDR      r10,[r0,#0x168]       ;319
00005e  eb06008a          ADD      r0,r6,r10,LSL #2      ;319
000062  f8d0014c          LDR      r0,[r0,#0x14c]        ;319
000066  6940              LDR      r0,[r0,#0x14]         ;320
000068  eb070080          ADD      r0,r7,r0,LSL #2       ;320
00006c  6ac5              LDR      r5,[r0,#0x2c]
00006e  da0c              BGE      |L3.138|
000070  2300              MOVS     r3,#0
000072  4622              MOV      r2,r4
000074  4641              MOV      r1,r8
000076  a806              ADD      r0,sp,#0x18
000078  f7fffffe          BL       jpeg_fill_bit_buffer
00007c  b350              CBZ      r0,|L3.212|
00007e  e9dd8408          LDRD     r8,r4,[sp,#0x20]
000082  2c08              CMP      r4,#8
000084  da01              BGE      |L3.138|
000086  2301              MOVS     r3,#1
000088  e00f              B        |L3.170|
                  |L3.138|
00008a  f1a40008          SUB      r0,r4,#8
00008e  fa48f100          ASR      r1,r8,r0
000092  b2c8              UXTB     r0,r1
000094  eb050180          ADD      r1,r5,r0,LSL #2
000098  f8d11090          LDR      r1,[r1,#0x90]
00009c  b121              CBZ      r1,|L3.168|
00009e  4428              ADD      r0,r0,r5
0000a0  1a64              SUBS     r4,r4,r1
0000a2  f8905490          LDRB     r5,[r0,#0x490]
0000a6  e00b              B        |L3.192|
                  |L3.168|
0000a8  2309              MOVS     r3,#9
                  |L3.170|
0000aa  9300              STR      r3,[sp,#0]
0000ac  462b              MOV      r3,r5
0000ae  4622              MOV      r2,r4
0000b0  4641              MOV      r1,r8
0000b2  a806              ADD      r0,sp,#0x18
0000b4  f7fffffe          BL       jpeg_huff_decode
0000b8  1e05              SUBS     r5,r0,#0
0000ba  db0b              BLT      |L3.212|
0000bc  e9dd8408          LDRD     r8,r4,[sp,#0x20]
                  |L3.192|
;;;326          if (s) {
0000c0  b305              CBZ      r5,|L3.260|
;;;327    	CHECK_BIT_BUFFER(br_state, s, return FALSE);
0000c2  42ac              CMP      r4,r5
0000c4  da0c              BGE      |L3.224|
0000c6  462b              MOV      r3,r5
0000c8  4622              MOV      r2,r4
0000ca  4641              MOV      r1,r8
0000cc  a806              ADD      r0,sp,#0x18
0000ce  f7fffffe          BL       jpeg_fill_bit_buffer
0000d2  b918              CBNZ     r0,|L3.220|
                  |L3.212|
0000d4  2000              MOVS     r0,#0
                  |L3.214|
;;;328    	r = GET_BITS(s);
;;;329    	s = HUFF_EXTEND(r, s);
;;;330          }
;;;331    
;;;332          /* Convert DC difference to actual value, update last_dc_val */
;;;333          s += state.last_dc_val[ci];
;;;334          state.last_dc_val[ci] = s;
;;;335          /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */
;;;336          (*block)[0] = (JCOEF) (s << Al);
;;;337        }
;;;338    

⌨️ 快捷键说明

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