00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #define JPEG_INTERNALS
00016 #include "jinclude.h"
00017 #include "jpeglib.h"
00018
00019
00020
00021
00022
00023
00024
00025 #if 0
00026
00027 const int jpeg_zigzag_order[DCTSIZE2] = {
00028 0, 1, 5, 6, 14, 15, 27, 28,
00029 2, 4, 7, 13, 16, 26, 29, 42,
00030 3, 8, 12, 17, 25, 30, 41, 43,
00031 9, 11, 18, 24, 31, 40, 44, 53,
00032 10, 19, 23, 32, 39, 45, 52, 54,
00033 20, 22, 33, 38, 46, 51, 55, 60,
00034 21, 34, 37, 47, 50, 56, 59, 61,
00035 35, 36, 48, 49, 57, 58, 62, 63
00036 };
00037
00038 #endif
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 const int jpeg_natural_order[DCTSIZE2+16] = {
00055 0, 1, 8, 16, 9, 2, 3, 10,
00056 17, 24, 32, 25, 18, 11, 4, 5,
00057 12, 19, 26, 33, 40, 48, 41, 34,
00058 27, 20, 13, 6, 7, 14, 21, 28,
00059 35, 42, 49, 56, 57, 50, 43, 36,
00060 29, 22, 15, 23, 30, 37, 44, 51,
00061 58, 59, 52, 45, 38, 31, 39, 46,
00062 53, 60, 61, 54, 47, 55, 62, 63,
00063 63, 63, 63, 63, 63, 63, 63, 63,
00064 63, 63, 63, 63, 63, 63, 63, 63
00065 };
00066
00067 const int jpeg_natural_order7[7*7+16] = {
00068 0, 1, 8, 16, 9, 2, 3, 10,
00069 17, 24, 32, 25, 18, 11, 4, 5,
00070 12, 19, 26, 33, 40, 48, 41, 34,
00071 27, 20, 13, 6, 14, 21, 28, 35,
00072 42, 49, 50, 43, 36, 29, 22, 30,
00073 37, 44, 51, 52, 45, 38, 46, 53,
00074 54,
00075 63, 63, 63, 63, 63, 63, 63, 63,
00076 63, 63, 63, 63, 63, 63, 63, 63
00077 };
00078
00079 const int jpeg_natural_order6[6*6+16] = {
00080 0, 1, 8, 16, 9, 2, 3, 10,
00081 17, 24, 32, 25, 18, 11, 4, 5,
00082 12, 19, 26, 33, 40, 41, 34, 27,
00083 20, 13, 21, 28, 35, 42, 43, 36,
00084 29, 37, 44, 45,
00085 63, 63, 63, 63, 63, 63, 63, 63,
00086 63, 63, 63, 63, 63, 63, 63, 63
00087 };
00088
00089 const int jpeg_natural_order5[5*5+16] = {
00090 0, 1, 8, 16, 9, 2, 3, 10,
00091 17, 24, 32, 25, 18, 11, 4, 12,
00092 19, 26, 33, 34, 27, 20, 28, 35,
00093 36,
00094 63, 63, 63, 63, 63, 63, 63, 63,
00095 63, 63, 63, 63, 63, 63, 63, 63
00096 };
00097
00098 const int jpeg_natural_order4[4*4+16] = {
00099 0, 1, 8, 16, 9, 2, 3, 10,
00100 17, 24, 25, 18, 11, 19, 26, 27,
00101 63, 63, 63, 63, 63, 63, 63, 63,
00102 63, 63, 63, 63, 63, 63, 63, 63
00103 };
00104
00105 const int jpeg_natural_order3[3*3+16] = {
00106 0, 1, 8, 16, 9, 2, 10, 17,
00107 18,
00108 63, 63, 63, 63, 63, 63, 63, 63,
00109 63, 63, 63, 63, 63, 63, 63, 63
00110 };
00111
00112 const int jpeg_natural_order2[2*2+16] = {
00113 0, 1, 8, 9,
00114 63, 63, 63, 63, 63, 63, 63, 63,
00115 63, 63, 63, 63, 63, 63, 63, 63
00116 };
00117
00118
00119
00120
00121
00122
00123 GLOBAL(long)
00124 jdiv_round_up (long a, long b)
00125
00126
00127 {
00128 return (a + b - 1L) / b;
00129 }
00130
00131
00132 GLOBAL(long)
00133 jround_up (long a, long b)
00134
00135
00136 {
00137 a += b - 1L;
00138 return a - (a % b);
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 #ifndef NEED_FAR_POINTERS
00152 #define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size)
00153 #define FMEMZERO(target,size) MEMZERO(target,size)
00154 #else
00155 #ifdef USE_FMEM
00156 #define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size))
00157 #define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size))
00158 #endif
00159 #endif
00160
00161
00162 GLOBAL(void)
00163 jcopy_sample_rows (JSAMPARRAY input_array, int source_row,
00164 JSAMPARRAY output_array, int dest_row,
00165 int num_rows, JDIMENSION num_cols)
00166
00167
00168
00169
00170
00171 {
00172 register JSAMPROW inptr, outptr;
00173 #ifdef FMEMCOPY
00174 register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE));
00175 #else
00176 register JDIMENSION count;
00177 #endif
00178 register int row;
00179
00180 input_array += source_row;
00181 output_array += dest_row;
00182
00183 for (row = num_rows; row > 0; row--) {
00184 inptr = *input_array++;
00185 outptr = *output_array++;
00186 #ifdef FMEMCOPY
00187 FMEMCOPY(outptr, inptr, count);
00188 #else
00189 for (count = num_cols; count > 0; count--)
00190 *outptr++ = *inptr++;
00191 #endif
00192 }
00193 }
00194
00195
00196 GLOBAL(void)
00197 jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row,
00198 JDIMENSION num_blocks)
00199
00200 {
00201 #ifdef FMEMCOPY
00202 FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF)));
00203 #else
00204 register JCOEFPTR inptr, outptr;
00205 register long count;
00206
00207 inptr = (JCOEFPTR) input_row;
00208 outptr = (JCOEFPTR) output_row;
00209 for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) {
00210 *outptr++ = *inptr++;
00211 }
00212 #endif
00213 }
00214
00215
00216 GLOBAL(void)
00217 jzero_far (void FAR * target, size_t bytestozero)
00218
00219
00220 {
00221 #ifdef FMEMZERO
00222 FMEMZERO(target, bytestozero);
00223 #else
00224 register char FAR * ptr = (char FAR *) target;
00225 register size_t count;
00226
00227 for (count = bytestozero; count > 0; count--) {
00228 *ptr++ = 0;
00229 }
00230 #endif
00231 }