jdtrans.c
Go to the documentation of this file.
1 /*
2  * jdtrans.c
3  *
4  * Copyright (C) 1995-1997, Thomas G. Lane.
5  * This file is part of the Independent JPEG Group's software.
6  * For conditions of distribution and use, see the accompanying README file.
7  *
8  * This file contains library routines for transcoding decompression,
9  * that is, reading raw DCT coefficient arrays from an input JPEG file.
10  * The routines in jdapimin.c will also be needed by a transcoder.
11  */
12 
13 #define JPEG_INTERNALS
14 #include "jinclude.h"
15 #include "jpeglib.h"
16 
17 
18 /* Forward declarations */
20 
21 
22 /*
23  * Read the coefficient arrays from a JPEG file.
24  * jpeg_read_header must be completed before calling this.
25  *
26  * The entire image is read into a set of virtual coefficient-block arrays,
27  * one per component. The return value is a pointer to the array of
28  * virtual-array descriptors. These can be manipulated directly via the
29  * JPEG memory manager, or handed off to jpeg_write_coefficients().
30  * To release the memory occupied by the virtual arrays, call
31  * jpeg_finish_decompress() when done with the data.
32  *
33  * An alternative usage is to simply obtain access to the coefficient arrays
34  * during a buffered-image-mode decompression operation. This is allowed
35  * after any jpeg_finish_output() call. The arrays can be accessed until
36  * jpeg_finish_decompress() is called. (Note that any call to the library
37  * may reposition the arrays, so don't rely on access_virt_barray() results
38  * to stay valid across library calls.)
39  *
40  * Returns NULL if suspended. This case need be checked only if
41  * a suspending data source is used.
42  */
43 
45 jpeg_read_coefficients (j_decompress_ptr cinfo)
46 {
47  if (cinfo->global_state == DSTATE_READY) {
48  /* First call: initialize active modules */
50  cinfo->global_state = DSTATE_RDCOEFS;
51  }
52  if (cinfo->global_state == DSTATE_RDCOEFS) {
53  /* Absorb whole file into the coef buffer */
54  for (;;) {
55  int retcode;
56  /* Call progress monitor hook if present */
57  if (cinfo->progress != NULL)
58  (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
59  /* Absorb some more input */
60  retcode = (*cinfo->inputctl->consume_input) (cinfo);
61  if (retcode == JPEG_SUSPENDED)
62  return NULL;
63  if (retcode == JPEG_REACHED_EOI)
64  break;
65  /* Advance progress counter if appropriate */
66  if (cinfo->progress != NULL &&
67  (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
68  if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
69  /* startup underestimated number of scans; ratchet up one scan */
70  cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
71  }
72  }
73  }
74  /* Set state so that jpeg_finish_decompress does the right thing */
75  cinfo->global_state = DSTATE_STOPPING;
76  }
77  /* At this point we should be in state DSTATE_STOPPING if being used
78  * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access
79  * to the coefficients during a full buffered-image-mode decompression.
80  */
81  if ((cinfo->global_state == DSTATE_STOPPING ||
82  cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) {
83  return cinfo->coef->coef_arrays;
84  }
85  /* Oops, improper usage */
86  ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
87  return NULL; /* keep compiler happy */
88 }
89 
90 
91 /*
92  * Master selection of decompression modules for transcoding.
93  * This substitutes for jdmaster.c's initialization of the full decompressor.
94  */
95 
96 LOCAL(void)
98 {
99  /* This is effectively a buffered-image operation. */
100  cinfo->buffered_image = TRUE;
101 
102  /* Entropy decoding: either Huffman or arithmetic coding. */
103  if (cinfo->arith_code) {
104  ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
105  } else {
106  if (cinfo->progressive_mode) {
107 #ifdef D_PROGRESSIVE_SUPPORTED
108  jinit_phuff_decoder(cinfo);
109 #else
110  ERREXIT(cinfo, JERR_NOT_COMPILED);
111 #endif
112  } else
113  jinit_huff_decoder(cinfo);
114  }
115 
116  /* Always get a full-image coefficient buffer. */
118 
119  /* We can now tell the memory manager to allocate virtual arrays. */
120  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
121 
122  /* Initialize input side of decompressor to consume first scan. */
123  (*cinfo->inputctl->start_input_pass) (cinfo);
124 
125  /* Initialize progress monitoring. */
126  if (cinfo->progress != NULL) {
127  int nscans;
128  /* Estimate number of scans to set pass_limit. */
129  if (cinfo->progressive_mode) {
130  /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
131  nscans = 2 + 3 * cinfo->num_components;
132  } else if (cinfo->inputctl->has_multiple_scans) {
133  /* For a nonprogressive multiscan file, estimate 1 scan per component. */
134  nscans = cinfo->num_components;
135  } else {
136  nscans = 1;
137  }
138  cinfo->progress->pass_counter = 0L;
139  cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
140  cinfo->progress->completed_passes = 0;
141  cinfo->progress->total_passes = 1;
142  }
143 }
transdecode_master_selection(j_decompress_ptr cinfo)
Definition: jdtrans.c:97
#define DSTATE_RDCOEFS
Definition: jpegint.h:38
#define JPEG_REACHED_SOS
Definition: jpeglib.h:996
#define JPEG_REACHED_EOI
Definition: jpeglib.h:997
#define DSTATE_BUFIMAGE
Definition: jpegint.h:36
jinit_d_coef_controller(j_decompress_ptr cinfo, boolean need_full_buffer)
Definition: jdcoefct.c:676
#define ERREXIT(cinfo, code)
Definition: jerror.h:205
#define JPEG_ROW_COMPLETED
Definition: jpeglib.h:998
#define TRUE
Definition: OPC_IceHook.h:13
#define DSTATE_STOPPING
Definition: jpegint.h:39
#define DSTATE_READY
Definition: jpegint.h:31
jinit_phuff_decoder(j_decompress_ptr cinfo)
Definition: jdphuff.c:641
#define JPP(arglist)
Definition: jpeglib.h:818
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:208
LOCAL(void)
Definition: jdtrans.c:19
#define GLOBAL(type)
Definition: jmorecfg.h:188
#define JPEG_SUSPENDED
Definition: jpeglib.h:965
retcode
jinit_huff_decoder(j_decompress_ptr cinfo)
Definition: jdhuff.c:635


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Sat May 8 2021 02:42:39