/src/libjpeg-turbo.2.1.x/jdcoefct.h
Line  | Count  | Source  | 
1  |  | /*  | 
2  |  |  * jdcoefct.h  | 
3  |  |  *  | 
4  |  |  * This file was part of the Independent JPEG Group's software:  | 
5  |  |  * Copyright (C) 1994-1997, Thomas G. Lane.  | 
6  |  |  * libjpeg-turbo Modifications:  | 
7  |  |  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB  | 
8  |  |  * Copyright (C) 2020, Google, Inc.  | 
9  |  |  * For conditions of distribution and use, see the accompanying README.ijg  | 
10  |  |  * file.  | 
11  |  |  */  | 
12  |  |  | 
13  |  | #define JPEG_INTERNALS  | 
14  |  | #include "jpeglib.h"  | 
15  |  |  | 
16  |  |  | 
17  |  | /* Block smoothing is only applicable for progressive JPEG, so: */  | 
18  |  | #ifndef D_PROGRESSIVE_SUPPORTED  | 
19  |  | #undef BLOCK_SMOOTHING_SUPPORTED  | 
20  |  | #endif  | 
21  |  |  | 
22  |  |  | 
23  |  | /* Private buffer controller object */  | 
24  |  |  | 
25  |  | typedef struct { | 
26  |  |   struct jpeg_d_coef_controller pub; /* public fields */  | 
27  |  |  | 
28  |  |   /* These variables keep track of the current location of the input side. */  | 
29  |  |   /* cinfo->input_iMCU_row is also used for this. */  | 
30  |  |   JDIMENSION MCU_ctr;           /* counts MCUs processed in current row */  | 
31  |  |   int MCU_vert_offset;          /* counts MCU rows within iMCU row */  | 
32  |  |   int MCU_rows_per_iMCU_row;    /* number of such rows needed */  | 
33  |  |  | 
34  |  |   /* The output side's location is represented by cinfo->output_iMCU_row. */  | 
35  |  |  | 
36  |  |   /* In single-pass modes, it's sufficient to buffer just one MCU.  | 
37  |  |    * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks,  | 
38  |  |    * and let the entropy decoder write into that workspace each time.  | 
39  |  |    * In multi-pass modes, this array points to the current MCU's blocks  | 
40  |  |    * within the virtual arrays; it is used only by the input side.  | 
41  |  |    */  | 
42  |  |   JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU];  | 
43  |  |  | 
44  |  |   /* Temporary workspace for one MCU */  | 
45  |  |   JCOEF *workspace;  | 
46  |  |  | 
47  |  | #ifdef D_MULTISCAN_FILES_SUPPORTED  | 
48  |  |   /* In multi-pass modes, we need a virtual block array for each component. */  | 
49  |  |   jvirt_barray_ptr whole_image[MAX_COMPONENTS];  | 
50  |  | #endif  | 
51  |  |  | 
52  |  | #ifdef BLOCK_SMOOTHING_SUPPORTED  | 
53  |  |   /* When doing block smoothing, we latch coefficient Al values here */  | 
54  |  |   int *coef_bits_latch;  | 
55  | 3.05M  | #define SAVED_COEFS  10         /* we save coef_bits[0..9] */  | 
56  |  | #endif  | 
57  |  | } my_coef_controller;  | 
58  |  |  | 
59  |  | typedef my_coef_controller *my_coef_ptr;  | 
60  |  |  | 
61  |  |  | 
62  |  | LOCAL(void)  | 
63  |  | start_iMCU_row(j_decompress_ptr cinfo)  | 
64  |  | /* Reset within-iMCU-row counters for a new row (input side) */  | 
65  | 78.7M  | { | 
66  | 78.7M  |   my_coef_ptr coef = (my_coef_ptr)cinfo->coef;  | 
67  |  |  | 
68  |  |   /* In an interleaved scan, an MCU row is the same as an iMCU row.  | 
69  |  |    * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.  | 
70  |  |    * But at the bottom of the image, process only what's left.  | 
71  |  |    */  | 
72  | 78.7M  |   if (cinfo->comps_in_scan > 1) { | 
73  | 6.48M  |     coef->MCU_rows_per_iMCU_row = 1;  | 
74  | 72.2M  |   } else { | 
75  | 72.2M  |     if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows - 1))  | 
76  | 72.0M  |       coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;  | 
77  | 181k  |     else  | 
78  | 181k  |       coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;  | 
79  | 72.2M  |   }  | 
80  |  |  | 
81  | 78.7M  |   coef->MCU_ctr = 0;  | 
82  | 78.7M  |   coef->MCU_vert_offset = 0;  | 
83  | 78.7M  | } Unexecuted instantiation: jdapistd.c:start_iMCU_row jdcoefct.c:start_iMCU_row Line  | Count  | Source  |  65  | 78.7M  | { |  66  | 78.7M  |   my_coef_ptr coef = (my_coef_ptr)cinfo->coef;  |  67  |  |  |  68  |  |   /* In an interleaved scan, an MCU row is the same as an iMCU row.  |  69  |  |    * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.  |  70  |  |    * But at the bottom of the image, process only what's left.  |  71  |  |    */  |  72  | 78.7M  |   if (cinfo->comps_in_scan > 1) { |  73  | 6.48M  |     coef->MCU_rows_per_iMCU_row = 1;  |  74  | 72.2M  |   } else { |  75  | 72.2M  |     if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows - 1))  |  76  | 72.0M  |       coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;  |  77  | 181k  |     else  |  78  | 181k  |       coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;  |  79  | 72.2M  |   }  |  80  |  |  |  81  | 78.7M  |   coef->MCU_ctr = 0;  |  82  | 78.7M  |   coef->MCU_vert_offset = 0;  |  83  | 78.7M  | }  |  
  |