ReactOS  0.4.15-dev-494-g1d8c567
jdcoefct.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
Include dependency graph for jdcoefct.c:

Go to the source code of this file.

Classes

struct  my_coef_controller
 

Macros

#define JPEG_INTERNALS
 

Typedefs

typedef my_coef_controllermy_coef_ptr
 

Functions

 METHODDEF (int)
 
 start_input_pass (j_decompress_ptr cinfo)
 
 start_output_pass (j_decompress_ptr cinfo)
 
 decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
 
 dummy_consume_data (j_decompress_ptr cinfo)
 
 jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
 

Macro Definition Documentation

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 18 of file jdcoefct.c.

Typedef Documentation

◆ my_coef_ptr

Definition at line 63 of file jdcoefct.c.

Function Documentation

◆ decompress_onepass()

decompress_onepass ( j_decompress_ptr  cinfo,
JSAMPIMAGE  output_buf 
)

Definition at line 148 of file jdcoefct.c.

149 {
150  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
151  JDIMENSION MCU_col_num; /* index of current MCU within row */
152  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
153  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
154  int blkn, ci, xindex, yindex, yoffset, useful_width;
155  JSAMPARRAY output_ptr;
158  inverse_DCT_method_ptr inverse_DCT;
159 
160  /* Loop to process as much as one whole iMCU row */
161  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
162  yoffset++) {
163  for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col;
164  MCU_col_num++) {
165  /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */
166  if (cinfo->lim_Se) /* can bypass in DC only case */
167  FMEMZERO((void FAR *) coef->MCU_buffer[0],
168  (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK)));
169  if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
170  /* Suspension forced; update state counters and exit */
171  coef->MCU_vert_offset = yoffset;
172  coef->MCU_ctr = MCU_col_num;
173  return JPEG_SUSPENDED;
174  }
175  /* Determine where data should go in output_buf and do the IDCT thing.
176  * We skip dummy blocks at the right and bottom edges (but blkn gets
177  * incremented past them!). Note the inner loop relies on having
178  * allocated the MCU_buffer[] blocks sequentially.
179  */
180  blkn = 0; /* index of current DCT block within MCU */
181  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
182  compptr = cinfo->cur_comp_info[ci];
183  /* Don't bother to IDCT an uninteresting component. */
184  if (! compptr->component_needed) {
185  blkn += compptr->MCU_blocks;
186  continue;
187  }
188  inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index];
189  useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
191  output_ptr = output_buf[compptr->component_index] +
193  start_col = MCU_col_num * compptr->MCU_sample_width;
194  for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
195  if (cinfo->input_iMCU_row < last_iMCU_row ||
196  yoffset+yindex < compptr->last_row_height) {
198  for (xindex = 0; xindex < useful_width; xindex++) {
199  (*inverse_DCT) (cinfo, compptr,
200  (JCOEFPTR) coef->MCU_buffer[blkn+xindex],
201  output_ptr, output_col);
203  }
204  }
205  blkn += compptr->MCU_width;
206  output_ptr += compptr->DCT_v_scaled_size;
207  }
208  }
209  }
210  /* Completed an MCU row, but perhaps not an iMCU row */
211  coef->MCU_ctr = 0;
212  }
213  /* Completed the iMCU row, advance counters for next one */
214  cinfo->output_iMCU_row++;
215  if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
216  start_iMCU_row(cinfo);
217  return JPEG_ROW_COMPLETED;
218  }
219  /* Completed the scan */
220  (*cinfo->inputctl->finish_input_pass) (cinfo);
221  return JPEG_SCAN_COMPLETED;
222 }
JDIMENSION MCU_ctr
Definition: jdcoefct.c:34
jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]
Definition: jpeglib.h:650
struct jpeg_input_controller * inputctl
Definition: jpeglib.h:682
JSAMPARRAY JDIMENSION start_col
Definition: jdct.h:169
JCOEF JBLOCK[DCTSIZE2]
Definition: jpeglib.h:79
struct jpeg_d_coef_controller * coef
Definition: jpeglib.h:680
#define JPEG_ROW_COMPLETED
Definition: jpeglib.h:1078
boolean component_needed
Definition: jpeglib.h:174
GLint GLint GLint yoffset
Definition: gl.h:1547
jpeg_component_info * compptr
Definition: jdct.h:238
#define SIZEOF(_ar)
Definition: calc.h:97
#define FAR
Definition: guiddef.h:36
jpeg_component_info JCOEFPTR JSAMPARRAY JDIMENSION output_col
Definition: jdct.h:238
#define for
Definition: utility.h:88
JCOEF FAR * JCOEFPTR
Definition: jpeglib.h:84
JSAMPROW * JSAMPARRAY
Definition: jpeglib.h:76
#define JPEG_SCAN_COMPLETED
Definition: jpeglib.h:1079
JDIMENSION input_iMCU_row
Definition: jpeglib.h:543
start_iMCU_row(j_compress_ptr cinfo)
Definition: jctrans.c:242
#define JPEG_SUSPENDED
Definition: jpeglib.h:1045
JDIMENSION MCUs_per_row
Definition: jpeglib.h:653
JDIMENSION output_iMCU_row
Definition: jpeglib.h:550
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
struct jpeg_inverse_dct * idct
Definition: jpeglib.h:685
my_coef_controller * my_coef_ptr
Definition: jdcoefct.c:63
struct jpeg_entropy_decoder * entropy
Definition: jpeglib.h:684
JDIMENSION total_iMCU_rows
Definition: jpeglib.h:633
JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]
Definition: jccoefct.c:52
#define FMEMZERO(target, size)
Definition: jpegint.h:368

Referenced by jinit_d_coef_controller().

◆ dummy_consume_data()

dummy_consume_data ( j_decompress_ptr  cinfo)

Definition at line 230 of file jdcoefct.c.

231 {
232  return JPEG_SUSPENDED; /* Always indicate nothing was done */
233 }
#define JPEG_SUSPENDED
Definition: jpeglib.h:1045

Referenced by jinit_d_coef_controller().

◆ jinit_d_coef_controller()

jinit_d_coef_controller ( j_decompress_ptr  cinfo,
boolean  need_full_buffer 
)

Definition at line 678 of file jdcoefct.c.

679 {
680  my_coef_ptr coef;
681 
682  coef = (my_coef_ptr)
683  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
685  cinfo->coef = (struct jpeg_d_coef_controller *) coef;
686  coef->pub.start_input_pass = start_input_pass;
687  coef->pub.start_output_pass = start_output_pass;
688 #ifdef BLOCK_SMOOTHING_SUPPORTED
689  coef->coef_bits_latch = NULL;
690 #endif
691 
692  /* Create the coefficient buffer. */
693  if (need_full_buffer) {
694 #ifdef D_MULTISCAN_FILES_SUPPORTED
695  /* Allocate a full-image virtual array for each component, */
696  /* padded to a multiple of samp_factor DCT blocks in each direction. */
697  /* Note we ask for a pre-zeroed array. */
698  int ci, access_rows;
700 
701  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
702  ci++, compptr++) {
703  access_rows = compptr->v_samp_factor;
704 #ifdef BLOCK_SMOOTHING_SUPPORTED
705  /* If block smoothing could be used, need a bigger window */
706  if (cinfo->progressive_mode)
707  access_rows *= 3;
708 #endif
709  coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
710  ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE,
715  (JDIMENSION) access_rows);
716  }
717  coef->pub.consume_data = consume_data;
718  coef->pub.decompress_data = decompress_data;
719  coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */
720 #else
721  ERREXIT(cinfo, JERR_NOT_COMPILED);
722 #endif
723  } else {
724  /* We only need a single-MCU buffer. */
726  int i;
727 
728  buffer = (JBLOCKROW)
729  (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
731  for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) {
732  coef->MCU_buffer[i] = buffer + i;
733  }
734  if (cinfo->lim_Se == 0) /* DC only case: want to bypass later */
735  FMEMZERO((void FAR *) buffer,
736  (size_t) (D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)));
737  coef->pub.consume_data = dummy_consume_data;
738  coef->pub.decompress_data = decompress_onepass;
739  coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */
740  }
741 }
start_input_pass(j_decompress_ptr cinfo)
Definition: jdcoefct.c:108
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
jpeg_component_info * comp_info
Definition: jpeglib.h:583
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
JCOEF JBLOCK[DCTSIZE2]
Definition: jpeglib.h:79
struct jpeg_d_coef_controller * coef
Definition: jpeglib.h:680
GLuint buffer
Definition: glext.h:5915
dummy_consume_data(j_decompress_ptr cinfo)
Definition: jdcoefct.c:230
boolean need_full_buffer
Definition: jpegint.h:384
jpeg_component_info * compptr
Definition: jdct.h:238
JDIMENSION width_in_blocks
Definition: jpeglib.h:148
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define SIZEOF(_ar)
Definition: calc.h:97
#define JPOOL_IMAGE
Definition: jpeglib.h:808
#define FAR
Definition: guiddef.h:36
struct jpeg_c_coef_controller pub
Definition: jccoefct.c:36
jround_up(long a, long b)
Definition: jutils.c:133
smooth NULL
Definition: ftsmooth.c:416
JDIMENSION height_in_blocks
Definition: jpeglib.h:149
start_output_pass(j_decompress_ptr cinfo)
Definition: jdcoefct.c:120
JBLOCK FAR * JBLOCKROW
Definition: jpeglib.h:80
#define D_MAX_BLOCKS_IN_MCU
Definition: jpeglib.h:66
#define long
Definition: qsort.c:33
decompress_onepass(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
Definition: jdcoefct.c:148
boolean progressive_mode
Definition: jpeglib.h:587
jvirt_barray_ptr whole_image[MAX_COMPONENTS]
Definition: jccoefct.c:55
unsigned int JDIMENSION
Definition: jmorecfg.h:229
my_coef_controller * my_coef_ptr
Definition: jdcoefct.c:63
JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]
Definition: jccoefct.c:52
#define FMEMZERO(target, size)
Definition: jpegint.h:368

Referenced by master_selection(), and transdecode_master_selection().

◆ METHODDEF()

METHODDEF ( int  )

Definition at line 66 of file jdcoefct.c.

82 {
83  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
84 
85  /* In an interleaved scan, an MCU row is the same as an iMCU row.
86  * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
87  * But at the bottom of the image, process only what's left.
88  */
89  if (cinfo->comps_in_scan > 1) {
90  coef->MCU_rows_per_iMCU_row = 1;
91  } else {
92  if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1))
93  coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
94  else
95  coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
96  }
97 
98  coef->MCU_ctr = 0;
99  coef->MCU_vert_offset = 0;
100 }
JDIMENSION MCU_ctr
Definition: jdcoefct.c:34
if(!(yy_init))
Definition: macro.lex.yy.c:714
my_coef_controller * my_coef_ptr
Definition: jdcoefct.c:63
int MCU_rows_per_iMCU_row
Definition: jccoefct.c:41

◆ start_input_pass()

start_input_pass ( j_decompress_ptr  cinfo)

Definition at line 108 of file jdcoefct.c.

109 {
110  cinfo->input_iMCU_row = 0;
111  start_iMCU_row(cinfo);
112 }
JDIMENSION input_iMCU_row
Definition: jpeglib.h:543
start_iMCU_row(j_compress_ptr cinfo)
Definition: jctrans.c:242

Referenced by jinit_d_coef_controller().

◆ start_output_pass()

start_output_pass ( j_decompress_ptr  cinfo)

Definition at line 120 of file jdcoefct.c.

121 {
122 #ifdef BLOCK_SMOOTHING_SUPPORTED
123  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
124 
125  /* If multipass, check to see whether to use block smoothing on this pass */
126  if (coef->pub.coef_arrays != NULL) {
127  if (cinfo->do_block_smoothing && smoothing_ok(cinfo))
128  coef->pub.decompress_data = decompress_smooth_data;
129  else
130  coef->pub.decompress_data = decompress_data;
131  }
132 #endif
133  cinfo->output_iMCU_row = 0;
134 }
boolean do_block_smoothing
Definition: jpeglib.h:489
struct jpeg_d_coef_controller * coef
Definition: jpeglib.h:680
struct jpeg_c_coef_controller pub
Definition: jccoefct.c:36
smooth NULL
Definition: ftsmooth.c:416
if(!(yy_init))
Definition: macro.lex.yy.c:714
JDIMENSION output_iMCU_row
Definition: jpeglib.h:550
my_coef_controller * my_coef_ptr
Definition: jdcoefct.c:63

Referenced by jinit_d_coef_controller().