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

📄 jdphuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;236      entropy->bitstate.bits_left = 0;
00001a  2600              MOVS     r6,#0
00001c  6188              STR      r0,[r1,#0x18]
;;;237    
;;;238      /* Advance past the RSTn marker */
;;;239      if (! (*cinfo->marker->read_restart_marker) (cinfo))
00001e  6126              STR      r6,[r4,#0x10]
000020  f8d501b8          LDR      r0,[r5,#0x1b8]
000024  6881              LDR      r1,[r0,#8]
000026  4628              MOV      r0,r5
000028  4788              BLX      r1
00002a  2800              CMP      r0,#0
00002c  d013              BEQ      |L6.86|
;;;240        return FALSE;
;;;241    
;;;242      /* Re-initialize DC predictions to 0 */
;;;243      for (ci = 0; ci < cinfo->comps_in_scan; ci++)
00002e  2000              MOVS     r0,#0
000030  e004              B        |L6.60|
;;;244        entropy->saved.last_dc_val[ci] = 0;
000032  bf00              NOP      
                  |L6.52|
000034  eb040180          ADD      r1,r4,r0,LSL #2
000038  1c40              ADDS     r0,r0,#1              ;243
00003a  618e              STR      r6,[r1,#0x18]         ;243
                  |L6.60|
00003c  f8d51148          LDR      r1,[r5,#0x148]        ;243
000040  4281              CMP      r1,r0                 ;243
000042  dcf7              BGT      |L6.52|
;;;245      /* Re-init EOB run count, too */
;;;246      entropy->saved.EOBRUN = 0;
;;;247    
;;;248      /* Reset restart counter */
;;;249      entropy->restarts_to_go = cinfo->restart_interval;
000044  6166              STR      r6,[r4,#0x14]
000046  f8d50114          LDR      r0,[r5,#0x114]
;;;250    
;;;251      /* Reset out-of-data flag, unless read_restart_marker left us smack up
;;;252       * against a marker.  In that case we will end up treating the next data
;;;253       * segment as empty, and we can avoid producing bogus output pixels by
;;;254       * leaving the flag set.
;;;255       */
;;;256      if (cinfo->unread_marker == 0)
00004a  62a0              STR      r0,[r4,#0x28]
00004c  f8d501a0          LDR      r0,[r5,#0x1a0]
000050  b900              CBNZ     r0,|L6.84|
;;;257        entropy->pub.insufficient_data = FALSE;
000052  60a6              STR      r6,[r4,#8]
                  |L6.84|
;;;258    
;;;259      return TRUE;
000054  2001              MOVS     r0,#1
                  |L6.86|
;;;260    }
000056  bd70              POP      {r4-r6,pc}
;;;261    
                          ENDP


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

                  start_pass_phuff_decoder PROC
;;;91     METHODDEF(void)
;;;92     start_pass_phuff_decoder (j_decompress_ptr cinfo)
000000  e92d5ff0          PUSH     {r4-r12,lr}
;;;93     {
;;;94       phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;95       boolean is_DC_band, bad;
;;;96       int ci, coefi, tbl;
;;;97       int *coef_bit_ptr;
;;;98       jpeg_component_info * compptr;
;;;99     
;;;100      is_DC_band = (cinfo->Ss == 0);
000004  f8d061bc          LDR      r6,[r0,#0x1bc]
000008  f8d03190          LDR      r3,[r0,#0x190]
00000c  4604              MOV      r4,r0                 ;93
00000e  2201              MOVS     r2,#1
000010  b103              CBZ      r3,|L7.20|
000012  2200              MOVS     r2,#0
                  |L7.20|
;;;101    
;;;102      /* Validate scan parameters */
;;;103      bad = FALSE;
;;;104      if (is_DC_band) {
000014  f8d41194          LDR      r1,[r4,#0x194]
000018  ea5f0a02          MOVS     r10,r2                ;100
00001c  f04f0000          MOV      r0,#0                 ;103
000020  d001              BEQ      |L7.38|
;;;105        if (cinfo->Se != 0)
000022  b151              CBZ      r1,|L7.58|
000024  e008              B        |L7.56|
                  |L7.38|
;;;106          bad = TRUE;
;;;107      } else {
;;;108        /* need not check Ss/Se < 0 since they came from unsigned bytes */
;;;109        if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2)
000026  428b              CMP      r3,r1
000028  dc01              BGT      |L7.46|
00002a  2940              CMP      r1,#0x40
00002c  db00              BLT      |L7.48|
                  |L7.46|
;;;110          bad = TRUE;
00002e  2001              MOVS     r0,#1
                  |L7.48|
;;;111        /* AC scans may have only one component */
;;;112        if (cinfo->comps_in_scan != 1)
000030  f8d41148          LDR      r1,[r4,#0x148]
000034  2901              CMP      r1,#1
000036  d000              BEQ      |L7.58|
                  |L7.56|
;;;113          bad = TRUE;
000038  2001              MOVS     r0,#1
                  |L7.58|
;;;114      }
;;;115      if (cinfo->Ah != 0) {
;;;116        /* Successive approximation refinement scan: must have Al = Ah-1. */
;;;117        if (cinfo->Al != cinfo->Ah-1)
00003a  f8d42198          LDR      r2,[r4,#0x198]
00003e  f8d4119c          LDR      r1,[r4,#0x19c]        ;115
000042  b11a              CBZ      r2,|L7.76|
000044  1e52              SUBS     r2,r2,#1
000046  4291              CMP      r1,r2
000048  d000              BEQ      |L7.76|
;;;118          bad = TRUE;
00004a  2001              MOVS     r0,#1
                  |L7.76|
;;;119      }
;;;120      if (cinfo->Al > 13)		/* need not check for < 0 */
00004c  290d              CMP      r1,#0xd
00004e  dc00              BGT      |L7.82|
;;;121        bad = TRUE;
;;;122      /* Arguably the maximum Al value should be less than 13 for 8-bit precision,
;;;123       * but the spec doesn't say so, and we try to be liberal about what we
;;;124       * accept.  Note: large Al values could result in out-of-range DC
;;;125       * coefficients during early scans, leading to bizarre displays due to
;;;126       * overflows in the IDCT math.  But we won't crash.
;;;127       */
;;;128      if (bad)
000050  b1b0              CBZ      r0,|L7.128|
                  |L7.82|
;;;129        ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
000052  6821              LDR      r1,[r4,#0]
000054  2010              MOVS     r0,#0x10
000056  6148              STR      r0,[r1,#0x14]
000058  6821              LDR      r1,[r4,#0]
00005a  f8d40190          LDR      r0,[r4,#0x190]
00005e  6188              STR      r0,[r1,#0x18]
000060  6821              LDR      r1,[r4,#0]
000062  f8d40194          LDR      r0,[r4,#0x194]
000066  61c8              STR      r0,[r1,#0x1c]
000068  6821              LDR      r1,[r4,#0]
00006a  f8d40198          LDR      r0,[r4,#0x198]
00006e  6208              STR      r0,[r1,#0x20]
000070  6821              LDR      r1,[r4,#0]
000072  f8d4019c          LDR      r0,[r4,#0x19c]
000076  6248              STR      r0,[r1,#0x24]
000078  6820              LDR      r0,[r4,#0]
00007a  6801              LDR      r1,[r0,#0]
00007c  4620              MOV      r0,r4
00007e  4788              BLX      r1
                  |L7.128|
;;;130    	     cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
;;;131      /* Update progression status, and verify that scan order is legal.
;;;132       * Note that inter-scan inconsistencies are treated as warnings
;;;133       * not fatal errors ... not clear if this is right way to behave.
;;;134       */
;;;135      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000080  f04f0900          MOV      r9,#0
000084  46cb              MOV      r11,r9                ;100
000086  e044              B        |L7.274|
                  |L7.136|
;;;136        int cindex = cinfo->cur_comp_info[ci]->component_index;
000088  eb040089          ADD      r0,r4,r9,LSL #2
00008c  f8d0014c          LDR      r0,[r0,#0x14c]
;;;137        coef_bit_ptr = & cinfo->coef_bits[cindex][0];
;;;138        if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
000090  f8d410a0          LDR      r1,[r4,#0xa0]
000094  f8d08004          LDR      r8,[r0,#4]            ;137
000098  f1ba0f00          CMP      r10,#0
00009c  eb012708          ADD      r7,r1,r8,LSL #8       ;137
0000a0  d111              BNE      |L7.198|
0000a2  6838              LDR      r0,[r7,#0]
0000a4  2800              CMP      r0,#0
0000a6  da0e              BGE      |L7.198|
;;;139          WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
0000a8  6821              LDR      r1,[r4,#0]
0000aa  2073              MOVS     r0,#0x73
0000ac  6148              STR      r0,[r1,#0x14]
0000ae  6821              LDR      r1,[r4,#0]
0000b0  f8c18018          STR      r8,[r1,#0x18]
0000b4  6821              LDR      r1,[r4,#0]
0000b6  f8c1b01c          STR      r11,[r1,#0x1c]
0000ba  6820              LDR      r0,[r4,#0]
0000bc  f04f31ff          MOV      r1,#0xffffffff
0000c0  6842              LDR      r2,[r0,#4]
0000c2  4620              MOV      r0,r4
0000c4  4790              BLX      r2
                  |L7.198|
;;;140        for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
0000c6  f8d45190          LDR      r5,[r4,#0x190]
0000ca  e01c              B        |L7.262|
                  |L7.204|
;;;141          int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
0000cc  f8571025          LDR      r1,[r7,r5,LSL #2]
0000d0  4658              MOV      r0,r11
0000d2  2900              CMP      r1,#0
0000d4  db00              BLT      |L7.216|
0000d6  4608              MOV      r0,r1
                  |L7.216|
;;;142          if (cinfo->Ah != expected)
0000d8  f8d41198          LDR      r1,[r4,#0x198]
0000dc  4281              CMP      r1,r0
0000de  d00d              BEQ      |L7.252|
;;;143    	WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
0000e0  6821              LDR      r1,[r4,#0]
0000e2  2073              MOVS     r0,#0x73
0000e4  6148              STR      r0,[r1,#0x14]
0000e6  6821              LDR      r1,[r4,#0]
0000e8  f8c18018          STR      r8,[r1,#0x18]
0000ec  6820              LDR      r0,[r4,#0]
0000ee  f04f31ff          MOV      r1,#0xffffffff
0000f2  61c5              STR      r5,[r0,#0x1c]
0000f4  6820              LDR      r0,[r4,#0]
0000f6  6842              LDR      r2,[r0,#4]
0000f8  4620              MOV      r0,r4
0000fa  4790              BLX      r2
                  |L7.252|
;;;144          coef_bit_ptr[coefi] = cinfo->Al;
0000fc  f8d4019c          LDR      r0,[r4,#0x19c]
000100  f8470025          STR      r0,[r7,r5,LSL #2]
000104  1c6d              ADDS     r5,r5,#1              ;140
                  |L7.262|
000106  f8d40194          LDR      r0,[r4,#0x194]        ;140
00010a  42a8              CMP      r0,r5                 ;140
00010c  dade              BGE      |L7.204|
00010e  f1090901          ADD      r9,r9,#1              ;135
                  |L7.274|
000112  f8d40148          LDR      r0,[r4,#0x148]        ;135
000116  4548              CMP      r0,r9                 ;135
000118  dcb6              BGT      |L7.136|
;;;145        }
;;;146      }
;;;147    
;;;148      /* Select MCU decoding routine */
;;;149      if (cinfo->Ah == 0) {
00011a  f8d40198          LDR      r0,[r4,#0x198]
00011e  2800              CMP      r0,#0
;;;150        if (is_DC_band)
000120  4650              MOV      r0,r10
000122  d104              BNE      |L7.302|
000124  b108              CBZ      r0,|L7.298|
;;;151          entropy->pub.decode_mcu = decode_mcu_DC_first;
000126  481f              LDR      r0,|L7.420|
000128  e005              B        |L7.310|
                  |L7.298|
;;;152        else
;;;153          entropy->pub.decode_mcu = decode_mcu_AC_first;
00012a  481f              LDR      r0,|L7.424|
00012c  e003              B        |L7.310|
                  |L7.302|
;;;154      } else {
;;;155        if (is_DC_band)
00012e  b108              CBZ      r0,|L7.308|
;;;156          entropy->pub.decode_mcu = decode_mcu_DC_refine;
000130  481e              LDR      r0,|L7.428|
000132  e000              B        |L7.310|
                  |L7.308|
;;;157        else
;;;158          entropy->pub.decode_mcu = decode_mcu_AC_refine;
000134  481e              LDR      r0,|L7.432|
                  |L7.310|
;;;159      }
;;;160    
;;;161      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000136  2500              MOVS     r5,#0
000138  6070              STR      r0,[r6,#4]
00013a  e022              B        |L7.386|
                  |L7.316|
;;;162        compptr = cinfo->cur_comp_info[ci];
00013c  eb040085          ADD      r0,r4,r5,LSL #2
000140  f8d0014c          LDR      r0,[r0,#0x14c]
;;;163        /* Make sure requested tables are present, and compute derived tables.
;;;164         * We may build same derived table more than once, but it's not expensive.
;;;165         */
;;;166        if (is_DC_band) {
000144  f1ba0f00          CMP      r10,#0
000148  d00b              BEQ      |L7.354|
;;;167          if (cinfo->Ah == 0) {	/* DC refinement needs no table */
00014a  f8d41198          LDR      r1,[r4,#0x198]
00014e  b999           

⌨️ 快捷键说明

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