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

📄 jdhuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000074  2075              MOVS     r0,#0x75              ;373
000076  6148              STR      r0,[r1,#0x14]         ;373
000078  6830              LDR      r0,[r6,#0]            ;373
00007a  f04f31ff          MOV      r1,#0xffffffff        ;373
00007e  6842              LDR      r2,[r0,#4]            ;373
000080  4630              MOV      r0,r6                 ;373
000082  4790              BLX      r2                    ;373
000084  f8d611bc          LDR      r1,[r6,#0x1bc]        ;374
000088  2001              MOVS     r0,#1                 ;374
00008a  6088              STR      r0,[r1,#8]            ;374
                  |L3.140|
00008c  f1c70119          RSB      r1,r7,#0x19           ;377
000090  fa09f901          LSL      r9,r9,r1              ;377
000094  2719              MOVS     r7,#0x19              ;378
                  |L3.150|
000096  e8880230          STM      r8,{r4,r5,r9}         ;388
00009a  2001              MOVS     r0,#1                 ;388
00009c  f8c8700c          STR      r7,[r8,#0xc]          ;388
0000a0  e7ce              B        |L3.64|
;;;390    
                          ENDP


                          AREA ||i.jpeg_huff_decode||, CODE, READONLY, ALIGN=1

                  jpeg_huff_decode PROC
;;;397    GLOBAL(int)
;;;398    jpeg_huff_decode (bitread_working_state * state,
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;399    		  register bit_buf_type get_buffer, register int bits_left,
;;;400    		  d_derived_tbl * htbl, int min_bits)
;;;401    {
;;;402      register int l = min_bits;
;;;403      register INT32 code;
;;;404    
;;;405      /* HUFF_DECODE has determined that the code is at least min_bits */
;;;406      /* bits long, so fetch that many bits in one swoop. */
;;;407    
;;;408      CHECK_BIT_BUFFER(*state, l, return -1);
000004  9c06              LDR      r4,[sp,#0x18]
000006  4605              MOV      r5,r0                 ;401
000008  461e              MOV      r6,r3                 ;401
00000a  f04f38ff          MOV      r8,#0xffffffff
00000e  42a2              CMP      r2,r4
000010  da06              BGE      |L4.32|
000012  4623              MOV      r3,r4
000014  4628              MOV      r0,r5
000016  f7fffffe          BL       jpeg_fill_bit_buffer
00001a  b188              CBZ      r0,|L4.64|
00001c  e9d51202          LDRD     r1,r2,[r5,#8]
                  |L4.32|
;;;409      code = GET_BITS(l);
000020  1b12              SUBS     r2,r2,r4
000022  fa41f002          ASR      r0,r1,r2
000026  2301              MOVS     r3,#1
000028  40a3              LSLS     r3,r3,r4
00002a  1e5b              SUBS     r3,r3,#1
00002c  4018              ANDS     r0,r0,r3
;;;410    
;;;411      /* Collect the rest of the Huffman code one bit at a time. */
;;;412      /* This is per Figure F.16 in the JPEG spec. */
;;;413    
;;;414      while (code > htbl->maxcode[l]) {
00002e  e013              B        |L4.88|
                  |L4.48|
;;;415        code <<= 1;
000030  0047              LSLS     r7,r0,#1
;;;416        CHECK_BIT_BUFFER(*state, 1, return -1);
000032  2a01              CMP      r2,#1
000034  da09              BGE      |L4.74|
000036  2301              MOVS     r3,#1
000038  4628              MOV      r0,r5
00003a  f7fffffe          BL       jpeg_fill_bit_buffer
00003e  b910              CBNZ     r0,|L4.70|
                  |L4.64|
000040  4640              MOV      r0,r8
                  |L4.66|
;;;417        code |= GET_BITS(1);
;;;418        l++;
;;;419      }
;;;420    
;;;421      /* Unload the local registers */
;;;422      state->get_buffer = get_buffer;
;;;423      state->bits_left = bits_left;
;;;424    
;;;425      /* With garbage input we may reach the sentinel value l = 17. */
;;;426    
;;;427      if (l > 16) {
;;;428        WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE);
;;;429        return 0;			/* fake a zero as the safest result */
;;;430      }
;;;431    
;;;432      return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ];
;;;433    }
000042  e8bd81f0          POP      {r4-r8,pc}
                  |L4.70|
000046  e9d51202          LDRD     r1,r2,[r5,#8]         ;416
                  |L4.74|
00004a  1e52              SUBS     r2,r2,#1              ;417
00004c  fa41f002          ASR      r0,r1,r2              ;417
000050  f0000001          AND      r0,r0,#1              ;417
000054  4338              ORRS     r0,r0,r7              ;417
000056  1c64              ADDS     r4,r4,#1              ;418
                  |L4.88|
000058  f8563024          LDR      r3,[r6,r4,LSL #2]     ;414
00005c  4283              CMP      r3,r0                 ;414
00005e  dbe7              BLT      |L4.48|
000060  e9c51202          STRD     r1,r2,[r5,#8]         ;427
000064  2c10              CMP      r4,#0x10              ;427
000066  dd0a              BLE      |L4.126|
000068  6929              LDR      r1,[r5,#0x10]         ;428
00006a  2076              MOVS     r0,#0x76              ;428
00006c  6809              LDR      r1,[r1,#0]            ;428
00006e  6148              STR      r0,[r1,#0x14]         ;428
000070  6928              LDR      r0,[r5,#0x10]         ;428
000072  6801              LDR      r1,[r0,#0]            ;428
000074  684a              LDR      r2,[r1,#4]            ;428
000076  4641              MOV      r1,r8                 ;428
000078  4790              BLX      r2                    ;428
00007a  2000              MOVS     r0,#0                 ;429
00007c  e7e1              B        |L4.66|
                  |L4.126|
00007e  eb060284          ADD      r2,r6,r4,LSL #2       ;432
000082  f8d6108c          LDR      r1,[r6,#0x8c]         ;432
000086  6c92              LDR      r2,[r2,#0x48]         ;432
000088  3011              ADDS     r0,r0,#0x11           ;432
00008a  4411              ADD      r1,r1,r2              ;432
00008c  5c08              LDRB     r0,[r1,r0]            ;432
00008e  e7d8              B        |L4.66|
;;;434    
                          ENDP


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

                  jpeg_make_d_derived_tbl PROC
;;;148    GLOBAL(void)
;;;149    jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;150    			 d_derived_tbl ** pdtbl)
;;;151    {
000004  f2ad5d0c          SUB      sp,sp,#0x50c
000008  4604              MOV      r4,r0
00000a  4615              MOV      r5,r2
00000c  461f              MOV      r7,r3
;;;152      JHUFF_TBL *htbl;
;;;153      d_derived_tbl *dtbl;
;;;154      int p, i, l, si, numsymbols;
;;;155      int lookbits, ctr;
;;;156      char huffsize[257];
;;;157      unsigned int huffcode[257];
;;;158      unsigned int code;
;;;159    
;;;160      /* Note that huffsize[] and huffcode[] are filled in code-length order,
;;;161       * paralleling the order of the symbols themselves in htbl->huffval[].
;;;162       */
;;;163    
;;;164      /* Find the input Huffman table */
;;;165      if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
;;;166        ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
00000e  f04f0832          MOV      r8,#0x32
000012  2a04              CMP      r2,#4                 ;165
000014  d308              BCC      |L5.40|
000016  6821              LDR      r1,[r4,#0]
000018  f8c18014          STR      r8,[r1,#0x14]
00001c  6820              LDR      r0,[r4,#0]
00001e  6185              STR      r5,[r0,#0x18]
000020  6820              LDR      r0,[r4,#0]
000022  6801              LDR      r1,[r0,#0]
000024  4620              MOV      r0,r4
000026  4788              BLX      r1
                  |L5.40|
;;;167      htbl =
000028  f8dd1510          LDR      r1,[sp,#0x510]
;;;168        isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno];
00002c  eb040085          ADD      r0,r4,r5,LSL #2
000030  b111              CBZ      r1,|L5.56|
000032  f8d060b4          LDR      r6,[r0,#0xb4]
000036  e001              B        |L5.60|
                  |L5.56|
000038  f8d060c4          LDR      r6,[r0,#0xc4]
                  |L5.60|
;;;169      if (htbl == NULL)
00003c  b946              CBNZ     r6,|L5.80|
;;;170        ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
00003e  6821              LDR      r1,[r4,#0]
000040  f8c18014          STR      r8,[r1,#0x14]
000044  6820              LDR      r0,[r4,#0]
000046  6185              STR      r5,[r0,#0x18]
000048  6820              LDR      r0,[r4,#0]
00004a  6801              LDR      r1,[r0,#0]
00004c  4620              MOV      r0,r4
00004e  4788              BLX      r1
                  |L5.80|
;;;171    
;;;172      /* Allocate a workspace if we haven't already done so. */
;;;173      if (*pdtbl == NULL)
000050  6838              LDR      r0,[r7,#0]
000052  b938              CBNZ     r0,|L5.100|
;;;174        *pdtbl = (d_derived_tbl *)
000054  6860              LDR      r0,[r4,#4]
000056  f44f62b2          MOV      r2,#0x590
00005a  6803              LDR      r3,[r0,#0]
00005c  2101              MOVS     r1,#1
00005e  4620              MOV      r0,r4
000060  4798              BLX      r3
000062  6038              STR      r0,[r7,#0]
                  |L5.100|
;;;175          (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;176    				  SIZEOF(d_derived_tbl));
;;;177      dtbl = *pdtbl;
000064  4605              MOV      r5,r0
;;;178      dtbl->pub = htbl;		/* fill in back link */
;;;179      
;;;180      /* Figure C.1: make table of Huffman code length for each symbol */
;;;181    
;;;182      p = 0;
000066  2700              MOVS     r7,#0
;;;183      for (l = 1; l <= 16; l++) {
000068  f04f0901          MOV      r9,#1
00006c  f20d4a04          ADD      r10,sp,#0x404         ;156
;;;184        i = (int) htbl->bits[l];
;;;185        if (i < 0 || p + i > 256)	/* protect against table overrun */
;;;186          ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
000070  f04f0b08          MOV      r11,#8
000074  f8c0608c          STR      r6,[r0,#0x8c]
                  |L5.120|
000078  f8168009          LDRB     r8,[r6,r9]            ;184
00007c  f1b80f00          CMP      r8,#0                 ;185
000080  db04              BLT      |L5.140|
000082  eb070008          ADD      r0,r7,r8              ;185
000086  f5b07f80          CMP      r0,#0x100             ;185
00008a  dd06              BLE      |L5.154|
                  |L5.140|
00008c  6821              LDR      r1,[r4,#0]
00008e  f8c1b014          STR      r11,[r1,#0x14]
000092  6820              LDR      r0,[r4,#0]
000094  6801              LDR      r1,[r0,#0]
000096  4620              MOV      r0,r4
000098  4788              BLX      r1
                  |L5.154|
;;;187        while (i--)
;;;188          huffsize[p++] = (char) l;
00009a  f00901ff          AND      r1,r9,#0xff
00009e  4652              MOV      r2,r10                ;156
0000a0  e001              B        |L5.166|
                  |L5.162|
0000a2  55d1              STRB     r1,[r2,r7]
0000a4  1c7f              ADDS     r7,r7,#1
                  |L5.166|
0000a6  f1b80001          SUBS     r0,r8,#1              ;187
0000aa  4680              MOV      r8,r0                 ;187
0000ac  d2f9              BCS      |L5.162|
0000ae  f1090901          ADD      r9,r9,#1              ;183
0000b2  f1b90f10          CMP      r9,#0x10              ;183
0000b6  dddf              BLE      |L5.120|
;;;189      }
;;;190      huffsize[p] = 0;
0000b8  2100              MOVS     r1,#0
0000ba  f80a1007          STRB     r1,[r10,r7]
;;;191      numsymbols = p;
;;;192      
;;;193      /* Figure C.2: generate the codes themselves */
;;;194      /* We also validate that the counts represent a legal Huffman code tree. */
;;;195      
;;;196      code = 0;
0000be  f8cd7508          STR      r7,[sp,#0x508]
0000c2  460f              MOV      r7,r1
;;;197      si = huffsize[0];
0000c4  f89d9404          LDRB     r9,[sp,#0x404]
;;;198      p = 0;
0000c8  4688              MOV      r8,r1
0000ca  46ea              MOV      r10,sp                ;157
;;;199      while (huffsize[p]) {
;;;200        while (((int) huffsize[p]) == si) {
;;;201          huffcode[p++] = code;
;;;202          code++;
;;;203        }
;;;204        /* code is now 1 more than the last code used for codelength si; but
;;;205         * it must still fit in si bits, since no code is allowed to be all ones.
;;;206         */
;;;207        if (((INT32) code) >= (((INT32) 1) << si))
;;;208          ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
;;;209        code <<= 1;
;;;210        si++;
0000cc  e01a              B        |L5.260|
0000ce  bf00              NOP                            ;201
                  |L5.208|
0000d0  f8417028          STR      r7,[r1,r8,LSL #2]     ;201
0000d4  f1080801          ADD      r8,r8,#1              ;201
0000d8  1c7f              ADDS     r7,r7,#1              ;202
0000da  e000              B        |L5.222|
                  |L5.220|
0000dc  4651              MOV      r1,r10                ;157
                  |L5.222|
0000de  f8102008          LDRB     r2,[r0,r8]            ;200
0000e2  454a              CMP      r2,r9                 ;200
0000e4  d0f4              BEQ      |L5.208|
0000e6  2001              MOVS     r0,#1                 ;207
0000e8  fa00f009          LSL      r0,r0,r9              ;207
0000ec  42b8              CMP      r0,r7                 ;207
0000ee  dc06              BGT      |L5.254|
0000f0  6821              LDR      r1,[r4,#0]            ;208
0000f2  2008              MOVS     r0,#8                 ;208
0000f4  6148              STR      r0,[r1,#0x14]         ;208
0000f6  6820              LDR      r0,[r4,#0]            ;208
0000f8  6801              LDR      r1,[r0,#0]            ;208
0000fa  4620              MOV      r0,r4                 ;208
0000fc  4788              BLX      r1                    ;208
                  |L5.254|
0000fe  007f              LSLS     r7,r7,#1              ;209
000100  f1090901          ADD      r9,r9,#1
                  |L5.260|
000104  f20d4004          ADD      r0,sp,#0x404          ;199
000108  f8101008          LDRB     r1,[r0,r8]            ;199
00010c  2900              CMP      r1,#0                 ;199
00010e  d1e5              BNE      |L5.220|
;;;211      }
;;;212    
;;;213      /* Figure F.15: generate decoding tables for bit-sequential decoding */
;;;214    
;;;215      p = 0;
;;;216      for (l = 1; l <= 16; l++) {
000110  2001              MOVS     r0,#1
000112  f04f3cff          MOV      r12,#0xffffffff       ;187
000116  46d3              MOV      r11,r10               ;157
                  |L5.280|
;;;217        if (htbl->bits[l]) {

⌨️ 快捷键说明

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