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

📄 jdhuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jdhuff.o --depend=.\Obj\jdhuff.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\JPEG\jdhuff.c]
                          THUMB

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

                  decode_mcu PROC
;;;516    METHODDEF(boolean)
;;;517    decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
000000  e92d4ff3          PUSH     {r0,r1,r4-r11,lr}
;;;518    {
000004  4605              MOV      r5,r0
;;;519      huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
;;;520      int blkn;
;;;521      BITREAD_STATE_VARS;
;;;522      savable_state state;
;;;523    
;;;524      /* Process restart marker if needed; may have to suspend */
;;;525      if (cinfo->restart_interval) {
000006  f8d041bc          LDR      r4,[r0,#0x1bc]
00000a  f8d00114          LDR      r0,[r0,#0x114]
00000e  b08b              SUB      sp,sp,#0x2c           ;518
000010  46a1              MOV      r9,r4                 ;519
000012  b330              CBZ      r0,|L1.98|
;;;526        if (entropy->restarts_to_go == 0)
000014  f8d90024          LDR      r0,[r9,#0x24]
000018  bb18              CBNZ     r0,|L1.98|
00001a  6920              LDR      r0,[r4,#0x10]
00001c  f8d511b8          LDR      r1,[r5,#0x1b8]
000020  17c3              ASRS     r3,r0,#31
000022  698a              LDR      r2,[r1,#0x18]
000024  eb007053          ADD      r0,r0,r3,LSR #29
000028  eb0200e0          ADD      r0,r2,r0,ASR #3
00002c  2600              MOVS     r6,#0
00002e  6188              STR      r0,[r1,#0x18]
000030  6126              STR      r6,[r4,#0x10]
000032  f8d501b8          LDR      r0,[r5,#0x1b8]
000036  6881              LDR      r1,[r0,#8]
000038  4628              MOV      r0,r5
00003a  4788              BLX      r1
00003c  2800              CMP      r0,#0
                  |L1.62|
00003e  d07e              BEQ      |L1.318|
000040  2000              MOVS     r0,#0
000042  e003              B        |L1.76|
                  |L1.68|
000044  eb040180          ADD      r1,r4,r0,LSL #2
000048  1c40              ADDS     r0,r0,#1
00004a  614e              STR      r6,[r1,#0x14]
                  |L1.76|
00004c  f8d51148          LDR      r1,[r5,#0x148]
000050  4281              CMP      r1,r0
000052  dcf7              BGT      |L1.68|
000054  f8d50114          LDR      r0,[r5,#0x114]
000058  6260              STR      r0,[r4,#0x24]
00005a  f8d501a0          LDR      r0,[r5,#0x1a0]
00005e  b900              CBNZ     r0,|L1.98|
000060  60a6              STR      r6,[r4,#8]
                  |L1.98|
;;;527          if (! process_restart(cinfo))
;;;528    	return FALSE;
;;;529      }
;;;530    
;;;531      /* If we've run out of data, just leave the MCU set to zeroes.
;;;532       * This way, we return uniform gray for the remainder of the segment.
;;;533       */
;;;534      if (! entropy->pub.insufficient_data) {
000062  f8d90008          LDR      r0,[r9,#8]
000066  2800              CMP      r0,#0
000068  d16a              BNE      |L1.320|
;;;535    
;;;536        /* Load up working state */
;;;537        BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
00006a  9509              STR      r5,[sp,#0x24]
;;;538        ASSIGN_STATE(state, entropy->saved);
00006c  f1090114          ADD      r1,r9,#0x14
000070  69a8              LDR      r0,[r5,#0x18]
000072  910a              STR      r1,[sp,#0x28]         ;537
000074  6803              LDR      r3,[r0,#0]            ;537
000076  9305              STR      r3,[sp,#0x14]         ;537
000078  6840              LDR      r0,[r0,#4]            ;537
00007a  9006              STR      r0,[sp,#0x18]         ;537
00007c  c98e              LDM      r1,{r1-r3,r7}         ;537
00007e  e9d96003          LDRD     r6,r0,[r9,#0xc]       ;537
000082  ac01              ADD      r4,sp,#4
000084  c48e              STM      r4!,{r1-r3,r7}        ;537
;;;539    
;;;540        /* Outer loop handles each block in the MCU */
;;;541    
;;;542        for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
000086  f04f0800          MOV      r8,#0
00008a  4631              MOV      r1,r6                 ;537
00008c  4602              MOV      r2,r0                 ;537
00008e  e0fb              B        |L1.648|
                  |L1.144|
;;;543          JBLOCKROW block = MCU_data[blkn];
000090  980c              LDR      r0,[sp,#0x30]
;;;544          d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn];
;;;545          d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn];
;;;546          register int s, k, r;
;;;547    
;;;548          /* Decode a single block's worth of coefficients */
;;;549    
;;;550          /* Section F.2.2.1: decode the DC coefficient difference */
;;;551          HUFF_DECODE(s, br_state, dctbl, return FALSE, label1);
000092  2a08              CMP      r2,#8
000094  f850a028          LDR      r10,[r0,r8,LSL #2]    ;543
000098  eb090088          ADD      r0,r9,r8,LSL #2       ;544
00009c  6f07              LDR      r7,[r0,#0x70]
00009e  6c84              LDR      r4,[r0,#0x48]
0000a0  4683              MOV      r11,r0                ;544
0000a2  da0b              BGE      |L1.188|
0000a4  2300              MOVS     r3,#0
0000a6  a805              ADD      r0,sp,#0x14
0000a8  f7fffffe          BL       jpeg_fill_bit_buffer
0000ac  2800              CMP      r0,#0
0000ae  d0c6              BEQ      |L1.62|
0000b0  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
0000b4  2a08              CMP      r2,#8
0000b6  da01              BGE      |L1.188|
0000b8  2301              MOVS     r3,#1
0000ba  e00f              B        |L1.220|
                  |L1.188|
0000bc  f1a20008          SUB      r0,r2,#8
0000c0  fa41f000          ASR      r0,r1,r0
0000c4  b2c0              UXTB     r0,r0
0000c6  eb040380          ADD      r3,r4,r0,LSL #2
0000ca  f8d33090          LDR      r3,[r3,#0x90]
0000ce  b123              CBZ      r3,|L1.218|
0000d0  4420              ADD      r0,r0,r4
0000d2  1ad2              SUBS     r2,r2,r3
0000d4  f8904490          LDRB     r4,[r0,#0x490]
0000d8  e009              B        |L1.238|
                  |L1.218|
0000da  2309              MOVS     r3,#9
                  |L1.220|
0000dc  9300              STR      r3,[sp,#0]
0000de  4623              MOV      r3,r4
0000e0  a805              ADD      r0,sp,#0x14
0000e2  f7fffffe          BL       jpeg_huff_decode
0000e6  1e04              SUBS     r4,r0,#0
0000e8  db29              BLT      |L1.318|
0000ea  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
                  |L1.238|
;;;552          if (s) {
0000ee  b1dc              CBZ      r4,|L1.296|
;;;553    	CHECK_BIT_BUFFER(br_state, s, return FALSE);
0000f0  42a2              CMP      r2,r4
0000f2  da07              BGE      |L1.260|
0000f4  4623              MOV      r3,r4
0000f6  a805              ADD      r0,sp,#0x14
0000f8  f7fffffe          BL       jpeg_fill_bit_buffer
0000fc  2800              CMP      r0,#0
0000fe  d09e              BEQ      |L1.62|
000100  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
                  |L1.260|
;;;554    	r = GET_BITS(s);
000104  1b12              SUBS     r2,r2,r4
000106  fa41f002          ASR      r0,r1,r2
00010a  2301              MOVS     r3,#1
00010c  40a3              LSLS     r3,r3,r4
00010e  1e5b              SUBS     r3,r3,#1
000110  4018              ANDS     r0,r0,r3
;;;555    	s = HUFF_EXTEND(r, s);
000112  4b69              LDR      r3,|L1.696|
000114  f8533024          LDR      r3,[r3,r4,LSL #2]
000118  4283              CMP      r3,r0
00011a  dd04              BLE      |L1.294|
00011c  4b66              LDR      r3,|L1.696|
00011e  3340              ADDS     r3,r3,#0x40
000120  f8533024          LDR      r3,[r3,r4,LSL #2]
000124  4418              ADD      r0,r0,r3
                  |L1.294|
000126  4604              MOV      r4,r0
                  |L1.296|
;;;556          }
;;;557    
;;;558          if (entropy->dc_needed[blkn]) {
000128  f8db0098          LDR      r0,[r11,#0x98]
00012c  b170              CBZ      r0,|L1.332|
;;;559    	/* Convert DC difference to actual value, update last_dc_val */
;;;560    	int ci = cinfo->MCU_membership[blkn];
00012e  eb050088          ADD      r0,r5,r8,LSL #2
000132  f8d00168          LDR      r0,[r0,#0x168]
;;;561    	s += state.last_dc_val[ci];
000136  ae01              ADD      r6,sp,#4
000138  f8563020          LDR      r3,[r6,r0,LSL #2]
00013c  e001              B        |L1.322|
                  |L1.318|
00013e  e091              B        |L1.612|
                  |L1.320|
000140  e0b3              B        |L1.682|
                  |L1.322|
000142  4423              ADD      r3,r3,r4
;;;562    	state.last_dc_val[ci] = s;
000144  f8463020          STR      r3,[r6,r0,LSL #2]
;;;563    	/* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
;;;564    	(*block)[0] = (JCOEF) s;
000148  f8aa3000          STRH     r3,[r10,#0]
                  |L1.332|
;;;565          }
;;;566    
;;;567          if (entropy->ac_needed[blkn]) {
00014c  f8db00c0          LDR      r0,[r11,#0xc0]
000150  2800              CMP      r0,#0
000152  d054              BEQ      |L1.510|
;;;568    
;;;569    	/* Section F.2.2.2: decode the AC coefficients */
;;;570    	/* Since zeroes are skipped, output area must be cleared beforehand */
;;;571    	for (k = 1; k < DCTSIZE2; k++) {
000154  2601              MOVS     r6,#1
                  |L1.342|
;;;572    	  HUFF_DECODE(s, br_state, actbl, return FALSE, label2);
000156  2a08              CMP      r2,#8
000158  da0b              BGE      |L1.370|
00015a  2300              MOVS     r3,#0
00015c  a805              ADD      r0,sp,#0x14
00015e  f7fffffe          BL       jpeg_fill_bit_buffer
000162  2800              CMP      r0,#0
000164  d07e              BEQ      |L1.612|
000166  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
00016a  2a08              CMP      r2,#8
00016c  da01              BGE      |L1.370|
00016e  2301              MOVS     r3,#1
000170  e00f              B        |L1.402|
                  |L1.370|
000172  f1a20008          SUB      r0,r2,#8
000176  fa41f000          ASR      r0,r1,r0
00017a  b2c0              UXTB     r0,r0
00017c  eb070380          ADD      r3,r7,r0,LSL #2
000180  f8d33090          LDR      r3,[r3,#0x90]
000184  b123              CBZ      r3,|L1.400|
000186  4438              ADD      r0,r0,r7
000188  1ad2              SUBS     r2,r2,r3
00018a  f8900490          LDRB     r0,[r0,#0x490]
00018e  e009              B        |L1.420|
                  |L1.400|
000190  2309              MOVS     r3,#9
                  |L1.402|
000192  9300              STR      r3,[sp,#0]
000194  463b              MOV      r3,r7
000196  a805              ADD      r0,sp,#0x14
000198  f7fffffe          BL       jpeg_huff_decode
00019c  2800              CMP      r0,#0
00019e  db63              BLT      |L1.616|
0001a0  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
                  |L1.420|
;;;573          
;;;574    	  r = s >> 4;
0001a4  1103              ASRS     r3,r0,#4
;;;575    	  s &= 15;
0001a6  f010040f          ANDS     r4,r0,#0xf
;;;576          
;;;577    	  if (s) {
0001aa  d021              BEQ      |L1.496|
;;;578    	    k += r;
0001ac  441e              ADD      r6,r6,r3
;;;579    	    CHECK_BIT_BUFFER(br_state, s, return FALSE);
0001ae  42a2              CMP      r2,r4
0001b0  da07              BGE      |L1.450|
0001b2  4623              MOV      r3,r4
0001b4  a805              ADD      r0,sp,#0x14
0001b6  f7fffffe          BL       jpeg_fill_bit_buffer
0001ba  2800              CMP      r0,#0
0001bc  d054              BEQ      |L1.616|
0001be  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
                  |L1.450|
;;;580    	    r = GET_BITS(s);
0001c2  1b12              SUBS     r2,r2,r4
0001c4  fa41f002          ASR      r0,r1,r2
0001c8  2301              MOVS     r3,#1
0001ca  40a3              LSLS     r3,r3,r4
0001cc  1e5b              SUBS     r3,r3,#1
0001ce  4018              ANDS     r0,r0,r3
;;;581    	    s = HUFF_EXTEND(r, s);
0001d0  4b39              LDR      r3,|L1.696|
0001d2  f8533024          LDR      r3,[r3,r4,LSL #2]
0001d6  4283              CMP      r3,r0
0001d8  dd04              BLE      |L1.484|
0001da  4b37              LDR      r3,|L1.696|
0001dc  3340              ADDS     r3,r3,#0x40
0001de  f8533024          LDR      r3,[r3,r4,LSL #2]
0001e2  4418              ADD      r0,r0,r3
                  |L1.484|
;;;582    	    /* Output coefficient in natural (dezigzagged) order.
;;;583    	     * Note: the extra entries in jpeg_natural_order[] will save us
;;;584    	     * if k >= DCTSIZE2, which could happen if the data is corrupted.
;;;585    	     */
;;;586    	    (*block)[jpeg_natural_order[k]] = (JCOEF) s;
0001e4  4b35              LDR      r3,|L1.700|
0001e6  f8533026          LDR      r3,[r3,r6,LSL #2]
0001ea  f82a0013          STRH     r0,[r10,r3,LSL #1]
0001ee  e002              B        |L1.502|
                  |L1.496|
;;;587    	  } else {
;;;588    	    if (r != 15)
0001f0  2b0f              CMP      r3,#0xf
0001f2  d147              BNE      |L1.644|
;;;589    	      break;
;;;590    	    k += 15;
0001f4  360f              ADDS     r6,r6,#0xf
                  |L1.502|
0001f6  1c76              ADDS     r6,r6,#1              ;571
0001f8  2e40              CMP      r6,#0x40              ;571
0001fa  dbac              BLT      |L1.342|
0001fc  e042              B        |L1.644|
                  |L1.510|
;;;591    	  }
;;;592    	}
;;;593    
;;;594          } else {
;;;595    
;;;596    	/* Section F.2.2.2: decode the AC coefficients */
;;;597    	/* In this path we just discard the values */
;;;598    	for (k = 1; k < DCTSIZE2; k++) {
0001fe  2401              MOVS     r4,#1
                  |L1.512|
;;;599    	  HUFF_DECODE(s, br_state, actbl, return FALSE, label3);
000200  2a08              CMP      r2,#8
000202  da0a              BGE      |L1.538|
000204  2300              MOVS     r3,#0
000206  a805              ADD      r0,sp,#0x14
000208  f7fffffe          BL       jpeg_fill_bit_buffer
00020c  b350              CBZ      r0,|L1.612|
00020e  e9dd1207          LDRD     r1,r2,[sp,#0x1c]
000212  2a08              CMP      r2,#8
000214  da01              BGE      |L1.538|
000216  2301              MOVS     r3,#1

⌨️ 快捷键说明

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