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

📄 jdcoefct.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jdcoefct.o --depend=.\Obj\jdcoefct.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\jdcoefct.c]
                          THUMB

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

                  consume_data PROC
;;;244    METHODDEF(int)
;;;245    consume_data (j_decompress_ptr cinfo)
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;246    {
000004  b086              SUB      sp,sp,#0x18
000006  4604              MOV      r4,r0
;;;247      my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
;;;248      JDIMENSION MCU_col_num;	/* index of current MCU within row */
;;;249      int blkn, ci, xindex, yindex, yoffset;
;;;250      JDIMENSION start_col;
;;;251      JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
;;;252      JBLOCKROW buffer_ptr;
;;;253      jpeg_component_info *compptr;
;;;254    
;;;255      /* Align the virtual buffers for the components used in this scan. */
;;;256      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000008  2600              MOVS     r6,#0
00000a  f10d0a08          ADD      r10,sp,#8             ;251
00000e  f8d051ac          LDR      r5,[r0,#0x1ac]
000012  e014              B        |L1.62|
                  |L1.20|
;;;257        compptr = cinfo->cur_comp_info[ci];
000014  eb040086          ADD      r0,r4,r6,LSL #2
000018  f8d0014c          LDR      r0,[r0,#0x14c]
;;;258        buffer[ci] = (*cinfo->mem->access_virt_barray)
00001c  2301              MOVS     r3,#1
00001e  9300              STR      r3,[sp,#0]
000020  68c3              LDR      r3,[r0,#0xc]
000022  6840              LDR      r0,[r0,#4]
000024  f8d42094          LDR      r2,[r4,#0x94]
000028  eb050080          ADD      r0,r5,r0,LSL #2
00002c  6c81              LDR      r1,[r0,#0x48]
00002e  6860              LDR      r0,[r4,#4]
000030  435a              MULS     r2,r3,r2
000032  6a07              LDR      r7,[r0,#0x20]
000034  4620              MOV      r0,r4
000036  47b8              BLX      r7
000038  f84a0026          STR      r0,[r10,r6,LSL #2]
00003c  1c76              ADDS     r6,r6,#1              ;256
                  |L1.62|
00003e  f8d40148          LDR      r0,[r4,#0x148]        ;256
000042  42b0              CMP      r0,r6                 ;256
000044  dce6              BGT      |L1.20|
;;;259          ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
;;;260           cinfo->input_iMCU_row * compptr->v_samp_factor,
;;;261           (JDIMENSION) compptr->v_samp_factor, TRUE);
;;;262        /* Note: entropy decoder expects buffer to be zeroed,
;;;263         * but this is handled automatically by the memory manager
;;;264         * because we requested a pre-zeroed array.
;;;265         */
;;;266      }
;;;267    
;;;268      /* Loop to process one whole iMCU row */
;;;269      for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
000046  69a8              LDR      r0,[r5,#0x18]
000048  e045              B        |L1.214|
                  |L1.74|
;;;270           yoffset++) {
;;;271        for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row;
00004a  6968              LDR      r0,[r5,#0x14]
00004c  e03a              B        |L1.196|
                  |L1.78|
;;;272    	 MCU_col_num++) {
;;;273          /* Construct list of pointers to DCT blocks belonging to this MCU */
;;;274          blkn = 0;			/* index of current DCT block within MCU */
00004e  2600              MOVS     r6,#0
;;;275          for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000050  4632              MOV      r2,r6
000052  e023              B        |L1.156|
                  |L1.84|
;;;276    	compptr = cinfo->cur_comp_info[ci];
000054  eb040082          ADD      r0,r4,r2,LSL #2
;;;277    	start_col = MCU_col_num * compptr->MCU_width;
000058  f8d0c14c          LDR      r12,[r0,#0x14c]
;;;278    	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
00005c  2000              MOVS     r0,#0
00005e  f8dce034          LDR      lr,[r12,#0x34]        ;277
000062  fb0efe08          MUL      lr,lr,r8              ;277
000066  e014              B        |L1.146|
                  |L1.104|
;;;279    	  buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
000068  f85a1022          LDR      r1,[r10,r2,LSL #2]
00006c  eb000309          ADD      r3,r0,r9
000070  f8511023          LDR      r1,[r1,r3,LSL #2]
000074  eb0113ce          ADD      r3,r1,lr,LSL #7
;;;280    	  for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
000078  2100              MOVS     r1,#0
00007a  e005              B        |L1.136|
                  |L1.124|
;;;281    	    coef->MCU_buffer[blkn++] = buffer_ptr++;
00007c  eb050786          ADD      r7,r5,r6,LSL #2
000080  623b              STR      r3,[r7,#0x20]
000082  3380              ADDS     r3,r3,#0x80
000084  1c76              ADDS     r6,r6,#1
000086  1c49              ADDS     r1,r1,#1              ;280
                  |L1.136|
000088  f8dc7034          LDR      r7,[r12,#0x34]        ;280
00008c  428f              CMP      r7,r1                 ;280
00008e  dcf5              BGT      |L1.124|
000090  1c40              ADDS     r0,r0,#1              ;278
                  |L1.146|
000092  f8dc1038          LDR      r1,[r12,#0x38]        ;278
000096  4281              CMP      r1,r0                 ;278
000098  dce6              BGT      |L1.104|
00009a  1c52              ADDS     r2,r2,#1              ;275
                  |L1.156|
00009c  f8d40148          LDR      r0,[r4,#0x148]        ;275
0000a0  4290              CMP      r0,r2                 ;275
0000a2  dcd7              BGT      |L1.84|
;;;282    	  }
;;;283    	}
;;;284          }
;;;285          /* Try to fetch the MCU. */
;;;286          if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
0000a4  f8d401bc          LDR      r0,[r4,#0x1bc]
0000a8  f1050120          ADD      r1,r5,#0x20
0000ac  6842              LDR      r2,[r0,#4]
0000ae  4620              MOV      r0,r4
0000b0  4790              BLX      r2
0000b2  b928              CBNZ     r0,|L1.192|
;;;287    	/* Suspension forced; update state counters and exit */
;;;288    	coef->MCU_vert_offset = yoffset;
;;;289    	coef->MCU_ctr = MCU_col_num;
;;;290    	return JPEG_SUSPENDED;
0000b4  2000              MOVS     r0,#0
0000b6  e9c58905          STRD     r8,r9,[r5,#0x14]
                  |L1.186|
;;;291          }
;;;292        }
;;;293        /* Completed an MCU row, but perhaps not an iMCU row */
;;;294        coef->MCU_ctr = 0;
;;;295      }
;;;296      /* Completed the iMCU row, advance counters for next one */
;;;297      if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
;;;298        start_iMCU_row(cinfo);
;;;299        return JPEG_ROW_COMPLETED;
;;;300      }
;;;301      /* Completed the scan */
;;;302      (*cinfo->inputctl->finish_input_pass) (cinfo);
;;;303      return JPEG_SCAN_COMPLETED;
;;;304    }
0000ba  b006              ADD      sp,sp,#0x18
0000bc  e8bd87f0          POP      {r4-r10,pc}
                  |L1.192|
0000c0  f1080001          ADD      r0,r8,#1              ;272
                  |L1.196|
0000c4  4680              MOV      r8,r0                 ;271
0000c6  f8d4015c          LDR      r0,[r4,#0x15c]        ;271
0000ca  4540              CMP      r0,r8                 ;271
0000cc  d8bf              BHI      |L1.78|
0000ce  2000              MOVS     r0,#0                 ;294
0000d0  6168              STR      r0,[r5,#0x14]         ;270
0000d2  f1090001          ADD      r0,r9,#1              ;270
                  |L1.214|
0000d6  69e9              LDR      r1,[r5,#0x1c]         ;269
0000d8  4681              MOV      r9,r0                 ;269
0000da  4281              CMP      r1,r0                 ;269
0000dc  dcb5              BGT      |L1.74|
0000de  f8d40094          LDR      r0,[r4,#0x94]         ;297
0000e2  1c40              ADDS     r0,r0,#1              ;297
0000e4  f8c40094          STR      r0,[r4,#0x94]         ;297
0000e8  f8d41140          LDR      r1,[r4,#0x140]        ;297
0000ec  4288              CMP      r0,r1                 ;297
0000ee  d204              BCS      |L1.250|
0000f0  4620              MOV      r0,r4                 ;298
0000f2  f7fffffe          BL       start_iMCU_row
0000f6  2003              MOVS     r0,#3                 ;299
0000f8  e7df              B        |L1.186|
                  |L1.250|
0000fa  f8d401b4          LDR      r0,[r4,#0x1b4]        ;302
0000fe  68c1              LDR      r1,[r0,#0xc]          ;302
000100  4620              MOV      r0,r4                 ;302
000102  4788              BLX      r1                    ;302
000104  2004              MOVS     r0,#4                 ;303
000106  e7d8              B        |L1.186|
;;;305    
                          ENDP


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

                  decompress_data PROC
;;;315    METHODDEF(int)
;;;316    decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
000000  e92d4ff3          PUSH     {r0,r1,r4-r11,lr}
;;;317    {
000004  4604              MOV      r4,r0
;;;318      my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
;;;319      JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
000006  f8d011ac          LDR      r1,[r0,#0x1ac]
00000a  f8d00140          LDR      r0,[r0,#0x140]
00000e  b087              SUB      sp,sp,#0x1c           ;317
000010  1e40              SUBS     r0,r0,#1
;;;320      JDIMENSION block_num;
;;;321      int ci, block_row, block_rows;
;;;322      JBLOCKARRAY buffer;
;;;323      JBLOCKROW buffer_ptr;
;;;324      JSAMPARRAY output_ptr;
;;;325      JDIMENSION output_col;
;;;326      jpeg_component_info *compptr;
;;;327      inverse_DCT_method_ptr inverse_DCT;
;;;328    
;;;329      /* Force some input to be done if we are getting ahead of the input. */
;;;330      while (cinfo->input_scan_number < cinfo->output_scan_number ||
000012  e9cd0105          STRD     r0,r1,[sp,#0x14]
000016  e006              B        |L2.38|
                  |L2.24|
;;;331    	 (cinfo->input_scan_number == cinfo->output_scan_number &&
;;;332    	  cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) {
;;;333        if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
000018  f8d401b4          LDR      r0,[r4,#0x1b4]
00001c  6801              LDR      r1,[r0,#0]
00001e  4620              MOV      r0,r4
000020  4788              BLX      r1
000022  2800              CMP      r0,#0
000024  d06f              BEQ      |L2.262|
                  |L2.38|
000026  f8d41098          LDR      r1,[r4,#0x98]         ;330
00002a  f8d40090          LDR      r0,[r4,#0x90]         ;330
00002e  4288              CMP      r0,r1                 ;330
000030  dbf2              BLT      |L2.24|
000032  d105              BNE      |L2.64|
000034  f8d4109c          LDR      r1,[r4,#0x9c]         ;332
000038  f8d40094          LDR      r0,[r4,#0x94]         ;332
00003c  4288              CMP      r0,r1                 ;332
00003e  d9eb              BLS      |L2.24|
                  |L2.64|
;;;334          return JPEG_SUSPENDED;
;;;335      }
;;;336    
;;;337      /* OK, output from the virtual arrays. */
;;;338      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
000040  f04f0900          MOV      r9,#0
000044  f8d450d8          LDR      r5,[r4,#0xd8]
000048  e051              B        |L2.238|
                  |L2.74|
;;;339           ci++, compptr++) {
;;;340        /* Don't bother to IDCT an uninteresting component. */
;;;341        if (! compptr->component_needed)
00004a  6b28              LDR      r0,[r5,#0x30]
00004c  2800              CMP      r0,#0
00004e  d04b              BEQ      |L2.232|
;;;342          continue;
;;;343        /* Align the virtual buffer for this component. */
;;;344        buffer = (*cinfo->mem->access_virt_barray)
000050  2300              MOVS     r3,#0
000052  9300              STR      r3,[sp,#0]
000054  9806              LDR      r0,[sp,#0x18]
000056  f8d4209c          LDR      r2,[r4,#0x9c]
00005a  eb000089          ADD      r0,r0,r9,LSL #2
00005e  6c81              LDR      r1,[r0,#0x48]
000060  6860              LDR      r0,[r4,#4]
000062  68eb              LDR      r3,[r5,#0xc]
000064  6a06              LDR      r6,[r0,#0x20]
000066  435a              MULS     r2,r3,r2
000068  4620              MOV      r0,r4
00006a  47b0              BLX      r6
;;;345          ((j_common_ptr) cinfo, coef->whole_image[ci],
;;;346           cinfo->output_iMCU_row * compptr->v_samp_factor,
;;;347           (JDIMENSION) compptr->v_samp_factor, FALSE);
;;;348        /* Count non-dummy DCT block rows in this iMCU row. */
;;;349        if (cinfo->output_iMCU_row < last_iMCU_row)
00006c  9003              STR      r0,[sp,#0xc]
00006e  f8d4009c          LDR      r0,[r4,#0x9c]
000072  9905              LDR      r1,[sp,#0x14]
000074  4288              CMP      r0,r1
000076  d201              BCS      |L2.124|
;;;350          block_rows = compptr->v_samp_factor;
000078  68e8              LDR      r0,[r5,#0xc]
00007a  e007              B        |L2.140|
                  |L2.124|
;;;351        else {
;;;352          /* NB: can't use last_row_height here; it is input-side-dependent! */
;;;353          block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
00007c  6a29              LDR      r1,[r5,#0x20]
00007e  68e8              LDR      r0,[r5,#0xc]
000080  fbb1f2f0          UDIV     r2,r1,r0
000084  fb001112          MLS      r1,r0,r2,r1
;;;354          if (block_rows == 0) block_rows = compptr->v_samp_factor;
000088  9104              STR      r1,[sp,#0x10]
00008a  b901              CBNZ     r1,|L2.142|
                  |L2.140|
00008c  9004              STR      r0,[sp,#0x10]
                  |L2.142|
;;;355        }
;;;356        inverse_DCT = cinfo->idct->inverse_DCT[ci];
00008e  2204              MOVS     r2,#4
000090  f8d411c0          LDR      r1,[r4,#0x1c0]
000094  eb020089          ADD      r0,r2,r9,LSL #2

⌨️ 快捷键说明

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