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

📄 jdhuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000118  5c32              LDRB     r2,[r6,r0]
00011a  b172              CBZ      r2,|L5.314|
;;;218          /* valoffset[l] = huffval[] index of 1st symbol of code length l,
;;;219           * minus the minimum code of length l
;;;220           */
;;;221          dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p];
00011c  f85b2021          LDR      r2,[r11,r1,LSL #2]
000120  eb050780          ADD      r7,r5,r0,LSL #2
000124  1a8a              SUBS     r2,r1,r2
;;;222          p += htbl->bits[l];
000126  64ba              STR      r2,[r7,#0x48]
000128  5c32              LDRB     r2,[r6,r0]
00012a  4411              ADD      r1,r1,r2
;;;223          dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
00012c  eb0b0281          ADD      r2,r11,r1,LSL #2
000130  f8522c04          LDR      r2,[r2,#-4]
000134  f8452020          STR      r2,[r5,r0,LSL #2]
000138  e001              B        |L5.318|
                  |L5.314|
;;;224        } else {
;;;225          dtbl->maxcode[l] = -1;	/* -1 if no codes of this length */
00013a  f845c020          STR      r12,[r5,r0,LSL #2]
                  |L5.318|
00013e  1c40              ADDS     r0,r0,#1              ;216
000140  2810              CMP      r0,#0x10              ;216
000142  dde9              BLE      |L5.280|
;;;226        }
;;;227      }
;;;228      dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */
000144  4826              LDR      r0,|L5.480|
;;;229    
;;;230      /* Compute lookahead tables to speed up decoding.
;;;231       * First we set all the table entries to 0, indicating "too long";
;;;232       * then we iterate through the Huffman codes that are short enough and
;;;233       * fill in all the entries that correspond to bit sequences starting
;;;234       * with that code.
;;;235       */
;;;236    
;;;237      MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits));
000146  6468              STR      r0,[r5,#0x44]
000148  f44f6180          MOV      r1,#0x400
00014c  f1050090          ADD      r0,r5,#0x90
000150  f7fffffe          BL       __aeabi_memclr4
;;;238    
;;;239      p = 0;
000154  f04f0c00          MOV      r12,#0
;;;240      for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
000158  f05f0001          MOVS.W   r0,#1
                  |L5.348|
;;;241        for (i = 1; i <= (int) htbl->bits[l]; i++, p++) {
;;;242          /* l = current code's length, p = its index in huffcode[] & huffval[]. */
;;;243          /* Generate left-justified code followed by all possible bit sequences */
;;;244          lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
00015c  f1c00108          RSB      r1,r0,#8
000160  f04f0801          MOV      r8,#1                 ;241
000164  468a              MOV      r10,r1
;;;245          for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
000166  fa08f901          LSL      r9,r8,r1
00016a  e018              B        |L5.414|
                  |L5.364|
00016c  f85b102c          LDR      r1,[r11,r12,LSL #2]   ;244
000170  464a              MOV      r2,r9                 ;244
000172  fa01f10a          LSL      r1,r1,r10             ;244
;;;246    	dtbl->look_nbits[lookbits] = l;
;;;247    	dtbl->look_sym[lookbits] = htbl->huffval[p];
000176  eb060e0c          ADD      lr,r6,r12
00017a  e00a              B        |L5.402|
                  |L5.380|
00017c  eb050381          ADD      r3,r5,r1,LSL #2       ;246
000180  186f              ADDS     r7,r5,r1
000182  f8c30090          STR      r0,[r3,#0x90]
000186  f89e3011          LDRB     r3,[lr,#0x11]
;;;248    	lookbits++;
00018a  1c49              ADDS     r1,r1,#1
00018c  f8873490          STRB     r3,[r7,#0x490]        ;247
000190  1e52              SUBS     r2,r2,#1              ;245
                  |L5.402|
000192  2a00              CMP      r2,#0                 ;245
000194  dcf2              BGT      |L5.380|
000196  f1080801          ADD      r8,r8,#1              ;241
00019a  f10c0c01          ADD      r12,r12,#1            ;241
                  |L5.414|
00019e  5c31              LDRB     r1,[r6,r0]            ;241
0001a0  4541              CMP      r1,r8                 ;241
0001a2  dae3              BGE      |L5.364|
0001a4  1c40              ADDS     r0,r0,#1              ;240
0001a6  2808              CMP      r0,#8                 ;240
0001a8  ddd8              BLE      |L5.348|
;;;249          }
;;;250        }
;;;251      }
;;;252    
;;;253      /* Validate symbols as being reasonable.
;;;254       * For AC tables, we make no check, but accept all byte values 0..255.
;;;255       * For DC tables, we require the symbols to be in range 0..15.
;;;256       * (Tighter bounds could be applied depending on the data depth and mode,
;;;257       * but this is sufficient to ensure safe decoding.)
;;;258       */
;;;259      if (isDC) {
0001aa  f8dd0510          LDR      r0,[sp,#0x510]
0001ae  2800              CMP      r0,#0
0001b0  d011              BEQ      |L5.470|
;;;260        for (i = 0; i < numsymbols; i++) {
0001b2  2500              MOVS     r5,#0
0001b4  2708              MOVS     r7,#8                 ;186
0001b6  e00a              B        |L5.462|
                  |L5.440|
;;;261          int sym = htbl->huffval[i];
0001b8  1970              ADDS     r0,r6,r5
0001ba  7c40              LDRB     r0,[r0,#0x11]
;;;262          if (sym < 0 || sym > 15)
0001bc  2810              CMP      r0,#0x10
0001be  d305              BCC      |L5.460|
;;;263    	ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
0001c0  6820              LDR      r0,[r4,#0]
0001c2  6147              STR      r7,[r0,#0x14]
0001c4  6820              LDR      r0,[r4,#0]
0001c6  6801              LDR      r1,[r0,#0]
0001c8  4620              MOV      r0,r4
0001ca  4788              BLX      r1
                  |L5.460|
0001cc  1c6d              ADDS     r5,r5,#1              ;260
                  |L5.462|
0001ce  f8dd0508          LDR      r0,[sp,#0x508]        ;260
0001d2  4285              CMP      r5,r0                 ;260
0001d4  dbf0              BLT      |L5.440|
                  |L5.470|
;;;264        }
;;;265      }
;;;266    }
0001d6  f20d5d1c          ADD      sp,sp,#0x51c
0001da  e8bd8ff0          POP      {r4-r11,pc}
;;;267    
                          ENDP

0001de  0000              DCW      0x0000
                  |L5.480|
                          DCD      0x000fffff

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

                  start_pass_huff_decoder PROC
;;;85     METHODDEF(void)
;;;86     start_pass_huff_decoder (j_decompress_ptr cinfo)
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;87     {
000004  4604              MOV      r4,r0
;;;88       huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
;;;89       int ci, blkn, dctbl, actbl;
;;;90       jpeg_component_info * compptr;
;;;91     
;;;92       /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
;;;93        * This ought to be an error condition, but we make it a warning because
;;;94        * there are some baseline files out there with all zeroes in these bytes.
;;;95        */
;;;96       if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 ||
000006  f8d051bc          LDR      r5,[r0,#0x1bc]
00000a  f8d00190          LDR      r0,[r0,#0x190]
00000e  b948              CBNZ     r0,|L6.36|
000010  f8d40194          LDR      r0,[r4,#0x194]
000014  283f              CMP      r0,#0x3f
000016  d105              BNE      |L6.36|
;;;97           cinfo->Ah != 0 || cinfo->Al != 0)
000018  f8d40198          LDR      r0,[r4,#0x198]
00001c  b910              CBNZ     r0,|L6.36|
00001e  f8d4019c          LDR      r0,[r4,#0x19c]
000022  b140              CBZ      r0,|L6.54|
                  |L6.36|
;;;98         WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
000024  6821              LDR      r1,[r4,#0]
000026  207a              MOVS     r0,#0x7a
000028  6148              STR      r0,[r1,#0x14]
00002a  6820              LDR      r0,[r4,#0]
00002c  f04f31ff          MOV      r1,#0xffffffff
000030  6842              LDR      r2,[r0,#4]
000032  4620              MOV      r0,r4
000034  4790              BLX      r2
                  |L6.54|
;;;99     
;;;100      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000036  2600              MOVS     r6,#0
000038  46b0              MOV      r8,r6                 ;96
00003a  e019              B        |L6.112|
                  |L6.60|
;;;101        compptr = cinfo->cur_comp_info[ci];
00003c  eb040086          ADD      r0,r4,r6,LSL #2
000040  f8d0014c          LDR      r0,[r0,#0x14c]
;;;102        dctbl = compptr->dc_tbl_no;
;;;103        actbl = compptr->ac_tbl_no;
;;;104        /* Compute derived values for Huffman tables */
;;;105        /* We may do this more than once for a table, but it's not expensive */
;;;106        jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl,
000044  2101              MOVS     r1,#1
000046  e9d02705          LDRD     r2,r7,[r0,#0x14]
00004a  eb050382          ADD      r3,r5,r2,LSL #2
00004e  3328              ADDS     r3,r3,#0x28
000050  4620              MOV      r0,r4
000052  f7fffffe          BL       jpeg_make_d_derived_tbl
;;;107    			    & entropy->dc_derived_tbls[dctbl]);
;;;108        jpeg_make_d_derived_tbl(cinfo, FALSE, actbl,
000056  eb050387          ADD      r3,r5,r7,LSL #2
00005a  3338              ADDS     r3,r3,#0x38
00005c  463a              MOV      r2,r7
00005e  2100              MOVS     r1,#0
000060  4620              MOV      r0,r4
000062  f7fffffe          BL       jpeg_make_d_derived_tbl
;;;109    			    & entropy->ac_derived_tbls[actbl]);
;;;110        /* Initialize DC predictions to 0 */
;;;111        entropy->saved.last_dc_val[ci] = 0;
000066  eb050186          ADD      r1,r5,r6,LSL #2
00006a  1c76              ADDS     r6,r6,#1              ;100
00006c  f8c18014          STR      r8,[r1,#0x14]         ;100
                  |L6.112|
000070  f8d40148          LDR      r0,[r4,#0x148]        ;100
000074  42b0              CMP      r0,r6                 ;100
000076  dce1              BGT      |L6.60|
;;;112      }
;;;113    
;;;114      /* Precalculate decoding info for each block in an MCU of this scan */
;;;115      for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
000078  2300              MOVS     r3,#0
00007a  e025              B        |L6.200|
                  |L6.124|
;;;116        ci = cinfo->MCU_membership[blkn];
00007c  eb040083          ADD      r0,r4,r3,LSL #2
000080  f8d00168          LDR      r0,[r0,#0x168]
;;;117        compptr = cinfo->cur_comp_info[ci];
000084  eb040080          ADD      r0,r4,r0,LSL #2
;;;118        /* Precalculate which table to use for each block */
;;;119        entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no];
000088  f8d0114c          LDR      r1,[r0,#0x14c]
00008c  eb050083          ADD      r0,r5,r3,LSL #2
000090  694a              LDR      r2,[r1,#0x14]
000092  eb050282          ADD      r2,r5,r2,LSL #2
000096  6a92              LDR      r2,[r2,#0x28]
;;;120        entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no];
000098  6482              STR      r2,[r0,#0x48]
00009a  698a              LDR      r2,[r1,#0x18]
00009c  eb050282          ADD      r2,r5,r2,LSL #2
0000a0  6b92              LDR      r2,[r2,#0x38]
;;;121        /* Decide whether we really care about the coefficient values */
;;;122        if (compptr->component_needed) {
0000a2  6702              STR      r2,[r0,#0x70]
0000a4  6b0a              LDR      r2,[r1,#0x30]
0000a6  b14a              CBZ      r2,|L6.188|
;;;123          entropy->dc_needed[blkn] = TRUE;
0000a8  2201              MOVS     r2,#1
;;;124          /* we don't need the ACs if producing a 1/8th-size image */
;;;125          entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1);
0000aa  f8c02098          STR      r2,[r0,#0x98]
0000ae  6a49              LDR      r1,[r1,#0x24]
0000b0  2901              CMP      r1,#1
0000b2  dc00              BGT      |L6.182|
0000b4  2200              MOVS     r2,#0
                  |L6.182|
0000b6  f8c020c0          STR      r2,[r0,#0xc0]
0000ba  e004              B        |L6.198|
                  |L6.188|
0000bc  3098              ADDS     r0,r0,#0x98
;;;126        } else {
;;;127          entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE;
0000be  f8c08028          STR      r8,[r0,#0x28]
0000c2  f8c08000          STR      r8,[r0,#0]
                  |L6.198|
0000c6  1c5b              ADDS     r3,r3,#1              ;115
                  |L6.200|
0000c8  f8d40164          LDR      r0,[r4,#0x164]        ;115
0000cc  4298              CMP      r0,r3                 ;115
0000ce  dcd5              BGT      |L6.124|
;;;128        }
;;;129      }
;;;130    
;;;131      /* Initialize bitread state variables */
;;;132      entropy->bitstate.bits_left = 0;
;;;133      entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
0000d0  f8c58010          STR      r8,[r5,#0x10]
;;;134      entropy->pub.insufficient_data = FALSE;
0000d4  f8c5800c          STR      r8,[r5,#0xc]
;;;135    
;;;136      /* Initialize restart counter */
;;;137      entropy->restarts_to_go = cinfo->restart_interval;
0000d8  f8c58008          STR      r8,[r5,#8]
0000dc  f8d40114          LDR      r0,[r4,#0x114]
;;;138    }
0000e0  6268              STR      r0,[r5,#0x24]
0000e2  e8bd81f0          POP      {r4-r8,pc}
;;;139    
                          ENDP


                          AREA ||.constdata||, DATA, READONLY, ALIGN=2

                  extend_test
                          DCD      0x00000000
                          DCD      0x00000001
                          DCD      0x00000002
                          DCD      0x00000004
                          DCD      0x00000008
                          DCD      0x00000010
                          DCD      0x00000020
                          DCD      0x00000040
                          DCD      0x00000080
                          DCD      0x00000100
                          DCD      0x00000200
                          DCD      0x00000400
                          DCD      0x00000800
                          DCD      0x00001000
                          DCD      0x00002000
                          DCD      0x00004000
                  extend_offset
                          DCD      0x00000000
                          DCD      0xffffffff
                          DCD      0xfffffffd
                          DCD      0xfffffff9
                          DCD      0xfffffff1
                          DCD      0xffffffe1
                          DCD      0xffffffc1
                          DCD      0xffffff81
                          DCD      0xffffff01
                          DCD      0xfffffe01
                          DCD      0xfffffc01
                          DCD      0xfffff801
                          DCD      0xfffff001
                          DCD      0xffffe001
                          DCD      0xffffc001
                          DCD      0xffff8001

⌨️ 快捷键说明

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